我正在NASM中制作一个计算器,它应该读取一个输入,即2 + 3并打印结果。 我正在做的是将所有内容推入堆栈,弹出第二个数字(3),弹出运算符(+),进行比较以查看它是哪个运算符并跳转到适当的标签,然后弹出第一个运算符并执行操作。
我的总和标签定义如下
sum:
pop ebx
add al, bl
push eax
jmp print
我的打印标签是:
print:
pop eax
add ax, '0'
mov [res], ax
mov eax,4
mov ebx,1
mov ecx, res
mov edx, 2
int 80h
jmp final
但不是打印结果,而是打印诸如“ 1O”之类的奇怪内容。
我尝试过的方法: 在尝试总和标签之前:
pop eax
cmp byte[eax], '3'
je print2
pop edx
pop ebx
cmp byte[ebx], '2'
je print2
其中edx是运算符,“ +” 而eax应该是3号,ebx是2号,那么跳转就可以了。
我尝试使用:
mov eax, 2
mov ebx, 3
mov edx, '+' ;edx is the operator
push eax
push ebx
然后放 sub al,'0'
sub bl,'0'
在总标签中查看我的问题是否在代码的另一部分中,但这可以正常工作。
关于出什么问题了吗?