热心人帮忙
带参数的函数调用:
int data;
Byte2Port(0x03bc, data);
由编译器生成的代码:
PUSH DWORD[_data]
PUSH DOWERD 0X03BCH
CALL _Byte2Port
ADD ESP, 8
------------------------
当函数返回时,将会在“ADD ESP, 8”指令处恢复原始代码的执行。此时,参数仍驻留在栈顶,必须将其删除以保持栈的平衡。
由于把两个参数压入到栈上,人们可能会认为应该使用两条POP指令从栈中删除这些数据。然而,POP指令设计用于从栈顶删除数据,并将它们存储进其他一些目的地。
(后面这句话不太理解)通过使用一条“ADD ESP, 8”指令,就像执行两条POP指令一样对寄存器ESP进行调整,同时消除了从内存中实际读取这些弹出数据内容所需的时间。
-------------------------------------
我的问题是,ADD之后的结果不还是停留在栈的位置上吗?
请好心人帮忙,由于分不是太多,很抱歉。
[解决办法]
通常函数返回结果在eax中保存。