首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

热心人帮忙解决思路

2012-02-21 
热心人帮忙带参数的函数调用:intdataByte2Port(0x03bc,data)由编译器生成的代码:PUSHDWORD[_data]PUSHDO

热心人帮忙
带参数的函数调用:
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中保存。

热点排行