注册 登录
编程论坛 汇编论坛

C代码转变为等价的汇编代码,有一汇编语句想不通,讨论一下

olivezhang 发布于 2006-09-12 10:47, 678 次点击
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指令完成吗?
3 回复
#2
lewuming2006-09-15 10:18

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

#3
olivezhang2006-09-15 14:27
但也不对呀,push a, push b后,sp的值应该是:sub sp, 8
因为a, b分别占4Byte,之后要说恢复的话,也应该是add sp, 8呀....
#4
emyhello2006-09-15 19:49
在汇编中的push,pop是对两个字节的操作。

两条语句就是四个字节。
1