我对汇编相当陌生,并试图从标准输入中读取一个值(从 C 调用 scanf 函数)并将其打印回标准输出(使用 printf)。
.text
readstr: .asciz "%d" #string used for calling scanf
printstr: .asciz "%d\n" #string used for calling printf
.global main
main: movl %esp, %ebp #initialize base pointer
call inout
pushl %eax
pushl $printstr
call printf
pushl $0 #push exit code to stack
call exit #exit with the exit code
inout: pushl %ebp
movl %esp, %ebp
subl $4, %esp
leal -4(%ebp), %eax
pushl %eax
pushl $readstr
call scanf
movl %ebp, %esp
popl %ebp
ret
预期的输出将与输入的数字相同,但输出始终是
1
注意:在 64 位 suse linux 企业桌面上编译,使用 gcc -m32 -o inout inout.s
这里出了什么问题?