调用过程跳过x86程序集

时间:2014-12-15 15:20:10

标签: assembly x86 call procedure

我正在使用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

0 个答案:

没有答案