我是汇编程序设计新手,我想知道为什么变量的地址总是被推送到堆栈而不是实际的变量。例如:程序集编程:为什么函数参数始终是内存位置?
的.text:00401270推EBP
的.text:00401271 MOV EBP,尤指
的.text:00401273子ESP,80H
的.text:00401279推偏移aString1
.text:0040127E call sub_401554
为什么实际变量从不会作为参数推送?
我是汇编程序设计新手,我想知道为什么变量的地址总是被推送到堆栈而不是实际的变量。例如:程序集编程:为什么函数参数始终是内存位置?
的.text:00401270推EBP
的.text:00401271 MOV EBP,尤指
的.text:00401273子ESP,80H
的.text:00401279推偏移aString1
.text:0040127E call sub_401554
为什么实际变量从不会作为参数推送?
并非所有的“函数”参数都必须通过引用传递,但是您的示例是一个字符串,由于其变量大小在堆栈上不合适,所以通过引用传递该字符串。
在返回之前调用函数和清理的细节取决于您要与之进行接口的调用约定。
如果您的调用者将始终是您控制的汇编代码,那么您可以选择在堆栈上传递较短的参数,但通过指针可以使用更大更复杂的数据结构,编码组装优化。
感谢您的帮助:) – user1210446 2012-02-15 06:22:47
你可以。但是这个字符串不能超过4个字符,不太实用。 – 2012-02-15 05:10:37