在x86程序集中跳过了scanf函数

时间:2014-12-13 21:46:15

标签: assembly x86 scanf

我正在尝试从键盘读取一些整数,添加它们并计算结果。 出于某种原因,当我尝试阅读操作时,它正在跳过 scanf ,所以我无法继续我的程序。

下面代码中调用它的部分是:

push offset opr_adr 
push offset opr 
call scanf 
add ESP,8

代码是:

.386
.model flat, stdcall
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;libraries and functions
includelib msvcrt.lib
extern printf: proc
extern scanf: proc
extern exit: proc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;declare start symbol as public
public start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;sectiunile programului, date, respectiv cod
.data
msg1 db "Base(decimal or hexadecimal): ", 0
msg2 db "Expression: ", 0
msg3 db "Expression(hexadecimal): ", 0

base_adr Db 2 dup(0)     ;base address
baza db "%c",0           ;base, D for decimal, H for hexadecimal

opr_adr Db 4 dup(0),0    ;operator address
opr db "%c",0

nr db 4 dup(0)
number Db "%d",0

result db "%d",0    
rez db 0



.code


start:
push offset msg1
call printf
add ESP, 4

push offset base_adr
push offset baza
call scanf
add ESP, 8

cmp base_adr,'D'
je decimal
cmp base_adr,'H'
jz hexadecimal

decimal:
push offset msg2
call printf
add ESP, 4
jmp decimal_numbers

decimal_numbers:
push offset nr
push offset number
call scanf
mov bx, 0
mov bl,nr
add ESP,8

push offset opr_adr
push offset opr
call scanf
add ESP,8

cmp opr_adr, '+' 
je adunare
cmp opr_adr, '=' 
je result


adunare:
add Al, Bl
jmp decimal_numbers


result:
mov rez, AH
push offset rez
push offset rezultat
call printf
add esp,8


hexadecimal:
push offset msg3
call printf
add ESP,4


;terminarea programului
push 0
call exit
end start

0 个答案:

没有答案