我正在尝试使用scanf
和printf
编写一个简单的程序,但它没有正确存储我的值。
extern printf
extern scanf
SECTION .data
str1: db "Enter a number: ",0,10
str2: db "your value is %d, squared = %d",0,10
fmt1: db "%d",0
location: dw 0h
SECTION .bss
input1: resw 1
SECTION .text
global main
main:
push ebp
mov ebp, esp
push str1
call printf
add esp, 4
push location
push fmt1
call scanf
mov ebx, eax ;ebx holds input
mul eax ;eax holds input*input
push eax
push ebx
push dword str2
call printf
add esp, 12
mov esp, ebp
pop ebp
mov eax,0
ret
由于某些原因,当我运行程序时,无论我输入什么号码,程序都会为两个输入打印1。
我正在使用nasm,与gcc链接
答案 0 :(得分:3)
你在这里做了一个不正确的假设:
call scanf
mov ebx, eax ;ebx holds input
scanf
实际上返回“成功填充的参数列表的项目数”(source)。您的整数位于location
顺便说一下,您应该使location
至少4个字节(即使用dd
而不是dw
)。