NASM。使用scanf和printf读取和打印整数

时间:2015-04-26 15:46:36

标签: assembly io x86 nasm

以下是我为使用scanf和printf读取和打印整数而编写的代码。但是打印结果不正确。

Section .data

formatint: db "%d",0
formatintout: db "%d",10,0

section .bss

i: resd 1
j: resd 1
n: resd 1

section .text
extern printf
extern scanf
global main

main:

push n
push formatint
call scanf
add esp,8 

push n
push formatintout
call printf
add esp,6

exit:
mov eax,1
mov ebx,0
int 80h

1 个答案:

答案 0 :(得分:0)

请注意,对于scanf,您需要传递地址,但对于printf,您需要传递该值。在这两种情况下,您都要传递地址。您应该为push dword [n]执行printf

add esp, 6当然应该是add esp, 8。我认为这只是一个错字。

另请注意,建议不要使用exit syscall。您应该ret来自main,或者如果您真的想要使用call exit