标题:C代码转变为等价的汇编代码,有一汇编语句想不通,讨论一下
只看楼主
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
 问题点数:0 回复次数:3 
C代码转变为等价的汇编代码,有一汇编语句想不通,讨论一下
C代码:
int f(int a, char b) {}

void main()
{
int a=0;
char b = ' ';
int g = f(a, b);
}

int g=f(a, b);这一C语句等价的汇编为:

push b //将参数b压栈
push a //将参数a压栈
call f() //调用函数f()
add sp, 4 //这一句没法对应呀???
mov g, register a //将寄存器a中的值返回给变量g

add sp, 4这一句,我奇怪它为何要把栈指针加4, 栈指针的操作不都由call指令完成吗?
搜索更多相关主题的帖子: 汇编 语句 代码 等价 
2006-09-12 10:47
lewuming
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-9-15
得分:0 

是为了恢复调用f()函数前的栈指针呀,调用前有两个push指令么。

2006-09-15 10:18
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
得分:0 
但也不对呀,push a, push b后,sp的值应该是:sub sp, 8
因为a, b分别占4Byte,之后要说恢复的话,也应该是add sp, 8呀....

谷底深深行 ,峰顶漫漫步......@_@
2006-09-15 14:27
emyhello
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-1-3
得分:0 
在汇编中的push,pop是对两个字节的操作。

两条语句就是四个字节。
2006-09-15 19:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-89554-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.450065 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved