Assembly 程序集EAX寄存器的行为异常

Assembly 程序集EAX寄存器的行为异常,assembly,x86,Assembly,X86,我对汇编相当陌生,尝试从标准输入读取一个值(从C调用scanf函数)并将其打印回标准输出(使用printf) 预期的输出与输入的数字相同,但输出总是相同的 1 注意:在64位suse linux企业桌面上编译,使用gcc-m32-o inout.s 这里出了什么问题?在调用scanf()之后,%eax包含函数的返回值,即。在您的情况下,这始终是1,因为始终只有一个输入项 从inout()返回之前,需要将-4(%ebp)处的值放入%eax中。您编写的汇编代码非常不正确,函数参数和返回值不正确,堆栈

我对汇编相当陌生,尝试从标准输入读取一个值(从C调用scanf函数)并将其打印回标准输出(使用printf)

预期的输出与输入的数字相同,但输出总是相同的

1
注意:在64位suse linux企业桌面上编译,使用gcc-m32-o inout.s

这里出了什么问题?

在调用
scanf()
之后,
%eax
包含函数的返回值,即。在您的情况下,这始终是
1
,因为始终只有一个输入项


inout()

返回之前,需要将
-4(%ebp)
处的值放入
%eax
中。您编写的汇编代码非常不正确,函数参数和返回值不正确,堆栈不平衡。使用C编译器并查看其程序集输出以正确执行此操作。我强烈建议您学习如何使用调试器。然后,您可以逐步检查代码,检查寄存器和内存位置,看看它们是否包含您希望它们在每个点包含的内容。如果您期望的和您看到的不匹配,或者您的代码被破坏,或者您的理解被破坏,您可以调试其中任何一个。
1