我正在使用MASM进行一些汇编编程。当我尝试运行我的程序时,它正在跳过第一个调用并转到正常工作的第二个调用。 这是代码(程序主体很长,所以我用 procedure_body 替换它们):
run_statement:
call convert
call calculate
convert proc ;this is the procedure that is skipped
<procedure_body>
ret
convert endp
calculate proc ;this is taken
<procedure_body>
ret
calculate endp
我使用调试器来查看发生了什么,但我没有发现问题。 这可能发生的任何特殊原因?任何帮助将不胜感激。 这是run_statement之前的漏洞代码:
public start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.data
msg1 db "Insert the base(decimal): ", 0
msg2 db "Expression: ", 0
base_adr Db 2 dup(0) ;base address
baza db "%c",0 ; base, D for decimal, H for hexadecimal
exit_op db "%s", 0
tex Db 60 DUP('#')
std_tex Dw 20 DUP(0) ;THIS IS WHERE THE STANDARD FORM OF USER INPUT WILL STORE
rezultat dw 10 dup(0)
char_adr db 8 dup(?)
char_input Db " %c",0
.code
start:
push offset msg1
call printf
add ESP, 4
push offset base_adr
push offset baza
call scanf
add ESP, 8
mov eax,0
lea esi, tex
cmp base_adr,'D'
je decimal
;cmp base_adr,'H'
;jz hexadecimal
decimal:
push offset msg2
call printf
add esp,4
jmp decimal_input
decimal_input:
push offset char_adr
push offset char_input
call scanf
mov al, char_adr
add esp, 8
cmp al,'='
mov BYTE PTR[esi], '#'
je run_statement
number_or_sign:
cmp al,'0'
jl sign_check
cmp al, '9'
ja sign_check
jmp put_char
sign_check:
cmp al,'+'
je put_char
cmp al,'-'
je put_char
cmp al,'*'
je put_char
cmp al, '/'
je put_char
put_char:
mov [esi],eax
inc esi
jmp decimal_input
run_statement:
call convert
call calculate