assembly - 评估作为字符串 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'
在总和标签中查看我的问题是否在代码的另一部分,但这工作正常。
关于出了什么问题的任何想法?
解决方案
推荐阅读
- python - VS 代码中的文件夹
- c - 从字符文件中读取并打印整数文件
- python-3.x - 格式化列表中大于数字的订单
- mysql - 如何从 Ticket 表中为每个用户找到最近的“created_date”?
- json - 单独对象中的属性之间的 JSON 模式依赖关系
- javascript - 为什么我不能用 JS 改变一个 html 元素?
- python - websocket在接收数据时是否会花费出站数据流量?
- python - RuntimeError:当前 NumPy 安装未能通过健全性检查
- sql - SSRS 报告垂直对齐更改为水平
- kubernetes - Kubernetes spec.ports required value 错误