我正在尝试从键盘读取一些整数,添加它们并计算结果。 出于某种原因,当我尝试阅读操作时,它正在跳过 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