| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 673 人关注过本帖
标题: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
快速回复:C代码转变为等价的汇编代码,有一汇编语句想不通,讨论一下
数据加载中...
 
   



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

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