I'm pretty new at masm and I need to make a pocket calculator. I have done the macros for +, -, /, * and i'm putting my expression in the EBX register.
for example: I type "1 + 2 =" and the EBX takes all that string and stores it.
I'm trying to take every character and store it in CL so that I can call the macro after that. I have found the expression mov cl, byte ptr[ebx]
But right here my program crashes. I have no idea what's wrong. Here is my code:
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] ;read 1st char from the string <--- THIS IS MY PROBLEM
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
.....
I have searched everywhere and found nothing. PLEASE HELP :(
In the
allocloop you're reading from[ebx], and right before the start of the loop you setebxtoexpr. You haven't shown the declaration ofexpror explained what it's supposed to be, but I'm going to guess that it's an array of bytes that you use to hold a string. In that case, the linemov ebx, exprshould bemov ebx, offset expr