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是函数名,可以进行移个函数的反汇编。

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

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

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

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

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

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

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

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

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

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

movq用法:

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

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

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

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

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

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

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

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

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

其他2元操作指令:

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

相关文章:

  • 2021-10-31
  • 2021-05-29
  • 2021-11-09
  • 2021-11-02
  • 2022-02-19
  • 2021-08-12
  • 2022-12-23
猜你喜欢
  • 2021-12-14
  • 2021-09-16
  • 2021-12-08
  • 2022-01-04
  • 2021-08-29
  • 2021-09-11
  • 2021-11-17
相关资源
相似解决方案