我对汇编很新,并试图从标准输入读取一个值(从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
Run Code Online (Sandbox Code Playgroud)
预期输出与输入的数量相同,但输出始终为
1Run Code Online (Sandbox Code Playgroud)
注意:使用gcc -m32 -o inout inout.s在64位suse linux企业桌面上编译
这里出了什么问题?