我是masm的新手,我需要制作一个袖珍计算器。 我已经完成了+, - ,/,*的宏,我将表达式放在EBX寄存器中。
例如:我输入“1 + 2 =”并且EBX获取所有字符串并存储它。
我正在尝试将每个角色存储在CL中,以便我可以在此之后调用宏。 我找到了表达方式 mov cl,byte ptr [ebx]
但就在这里我的程序崩溃了。我不知道出了什么问题。 这是我的代码:
zecimal read:
push offset expr
push offset expr_format
call scanf
add esp,8
mov al,output
mov bl,change ;to change the base ex. Zecimal - Z, Hexa - H
mov ecx,expr
cmp al,cl
jz end ;if input = "exit"
cmp bl,cl
jz read_loop ;changes base if = "num"
mov ebx,0 ;reset ebx
mov ecx,0 ;reset ecx
mov ebx,expr ;replace expr in ebx
mov eax,0 ;reset eax
alloc:
mov ecx,0
mov cl,byte ptr [ebx] ;从字符串中读取第一个字符< ---这是我的问题
cmp cl,' ' ;comp with spce
jz space
mul ten
sub cl,'0'
add ax,cx
inc ebx
jmp alloc
space: <-- this is where i compare the sign with my operators
.....
我到处搜寻,一无所获。请帮助:(
答案 0 :(得分:1)
在您alloc
的{{1}}循环中,在循环开始之前,您将[ebx]
设置为ebx
。你没有展示expr
的声明或解释它应该是什么,但我猜你用它来保存字符串是一个字节数组。在这种情况下,行expr
应为mov ebx, expr