尝试将字符串中的第一个字节移动到寄存器时出错

时间:2014-01-06 20:06:00

标签: assembly masm masm32 ollydbg

我是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
    .....

我到处搜寻,一无所获。请帮助:(

1 个答案:

答案 0 :(得分:1)

在您alloc的{​​{1}}循环中,在循环开始之前,您将[ebx]设置为ebx。你没有展示expr的声明或解释它应该是什么,但我猜你用它来保存字符串是一个字节数组。在这种情况下,行expr应为mov ebx, expr