Assembly 在x86程序集中跳过了scanf函数
我试图从键盘上读取一些整数,把它们相加,然后计算结果。 由于某种原因,当我试图读取操作时,它跳过了scanf,因此我无法继续我的程序 以下代码中称之为的部分为:Assembly 在x86程序集中跳过了scanf函数,assembly,x86,scanf,Assembly,X86,Scanf,我试图从键盘上读取一些整数,把它们相加,然后计算结果。 由于某种原因,当我试图读取操作时,它跳过了scanf,因此我无法继续我的程序 以下代码中称之为的部分为: push offset opr_adr push offset opr call scanf add ESP,8 代码是: .386 .model flat, stdcall ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;
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
你有没有用调试器检查过你的代码?或者,当编译、执行和后期堆栈溢出无法完美工作时,您是否遵循了该开发模型?我使用了Olly Debugger,但它没有停止到scanf,因此我可以给运算符,我不明白为什么…您是如何构建该程序的?我看到你的符号叫做“开始”-你没有链接libc启动文件吗?我在其他程序中也使用过这个符号,它工作得很好。。。