编程范式(斯坦福大学)学习笔记《十一》

上次的课中都是使用C代码生成汇编代码,这次课中将使用C++代码生成汇编代码,对比结果发现这两种语言最终生成的代码形式很像。

 


C语言版本:

void foo()
{
    int x;
    int y;
    x=11;
    y=17;
    swap(&x,&y);
}

对应的汇编代码:

SP=SP-8;
M[SP+4]=11;
M[SP]=17;
R1=SP;//&y
R2=SP+4;//&x
SP=SP-8;
M[SP]=R2;
M[SP+4]=R1;
CALL<swap>;
SP=SP+8;//与第6行代码抵消
SP=SP+8;//与第1行代码抵消
RET;

活动记录示意图:

注意:

1.Saved PC中关联着调用foo的函数的相关信息,在其他某个函数的汇编指令流中会有一条call foo指令,saved PC的值就是直接位于这条call指令之后的指令地址。

2.在函数内部,在返回之前栈指针需要指向刚刚进入函数时的位置(即指向saved PC)。

3.RET指令通常会在函数体生成汇编代码最后一行&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值