首页 > 解决方案 > 评估作为字符串 nasm 给出的表达式

问题描述

我正在 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'

在总和标签中查看我的问题是否在代码的另一部分,但这工作正常。

关于出了什么问题的任何想法?

标签: assemblysumnasm

解决方案


推荐阅读