系统级程序设计 - 机器级编程I:基础

汇编/机器代码

系统级程序设计 - 机器级编程I:基础

  • PC: 程序计数器Program counter
    –下一条指令地址
    – 被称为“RIP” (x86-64)
  • 寄存器文件(寄存器堆)
    – 大量使用的程序数据
  • 条件码(寄存器)
    –存储关于最新算术或逻辑操作的状态 信息
    –用于条件分支
  • 内存
    – 字节可寻址数组
    – 代码和用户数据
    – 支持过程的堆栈(保存过程 调用和返回时的栈

机器指令示例

C代码
把t的值存储到dest指向的对象中
系统级程序设计 - 机器级编程I:基础
汇编代码
把8-byte值传送到内存中
用x86-64术语,四个字
系统级程序设计 - 机器级编程I:基础系统级程序设计 - 机器级编程I:基础
目标代码

  • 3-byte 指令
  • 存储位置在地址0x40059e
    系统级程序设计 - 机器级编程I:基础
    反汇编器
    objdump –d sum
  • 用于检查目标代码的有用工具
  • 分析指令序列的位模式
  • 生成汇编代码的近似再现
  • 可以以a.out(完整的可执行文件)或.o文件形式运行

数据格式

系统级程序设计 - 机器级编程I:基础
四种传送指令:
movb 传送字节
movw 传送字
movl 传送双字
movq 传送四字
系统级程序设计 - 机器级编程I:基础

传送数据

movq Source, Dest:
系统级程序设计 - 机器级编程I:基础系统级程序设计 - 机器级编程I:基础
系统级程序设计 - 机器级编程I:基础

完整存储器寻址方式

最一般的形式:比例变址寻址

系统级程序设计 - 机器级编程I:基础
系统级程序设计 - 机器级编程I:基础
系统级程序设计 - 机器级编程I:基础

压入和弹出栈数据

系统级程序设计 - 机器级编程I:基础

系统级程序设计 - 机器级编程I:基础

地址计算指令

系统级程序设计 - 机器级编程I:基础
系统级程序设计 - 机器级编程I:基础系统级程序设计 - 机器级编程I:基础
incq Dest Dest = Dest + 1
decq Dest Dest = Dest - 1
negq Dest Dest = - Dest
notq Dest Dest = ~Dest