《深入理解计算机系统》 machine level programing-I

from有道云笔记

gcc -Og -S sum.c

-Og为为调试准备的优化等级,更容易看懂;

-S为只编译出汇编文件;

这样编译出来的汇编文件中,以点(.)开头的行,不用理会,为一些标识符,符号等信息。

gcc -Og sum.c -o sum

编译之后,可以使用objdump工具,进行反汇编:

objdump -d sum > sum.d

或者使用gdb中的disassemble工具:

disassemble sum,其中sum是函数名,可以进行移个函数的反汇编。

同样支持获取寄存器的低16位或低8位。这些是历史遗留所必须遵守的。

除了rsp,stack pointer,表示栈指针,其他寄存器在大多数时候,用途相同。

历史版的各个寄存器的用途,现在不再使用:

movq用法:

把寄存器用括号括起来,代表把这个寄存器的值当作地址,操作这个地址的数据。

带偏移的,访问数组,结构体等数据结构时有用:

函数参数会存在寄存器中,第一个参数存在rdi中,第二个参数存在rsi中,第三个%rdx,最多有6个。

函数返回前,会将返回值存在%rax寄存器中。

movq:q代表quar word,一个word代表16位,quar word就是64位。

相关地址操作的练习题,可以参考《深入理解计算机系统》P122

lea指令:待补充。与mov的区别

其他2元操作指令:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值