Я пытаюсь написать простую программу, используя scanf
и printf
, но она не сохраняет мои значения должным образом.Scanf on nasm assembly program
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
Кроме того, призывая к принятию конвенций, необходимо сохранить «ebx». Вместо этого вы можете использовать 'ecx'. Кроме того, после 'call scanf' есть отсутствующий' add esp, 8', но в этом случае это безобидно, потому что вы восстанавливаете указатель стека из 'ebp'. – Jester