汇编指令

X86处理器中寄存器的组织形式

  • 在X86系统中,对所有程序员都可见的寄存器一共16个,称为通用寄存器。均以r打头,为64位寄存器。
  • 中间字符为字母的64位寄存器对应低32位寄存器,将r换为e开头;r后字符为数字的64位寄存器对应低32位寄存器,后边有d后缀
  • sp寄存器都用特殊用途,存放栈顶指针;bp寄存器也有特殊作用,在后边的过程调用会讲到

汇编指令_第1张图片

X8632位系统
  • 有通用寄存器8个,没有64位寄存器中的r9到r15
  • 其对应低16位寄存器有4个,取掉前缀;低16位寄存器对应低8位寄存器有4个

汇编指令_第2张图片

汇编语言指令

数据访问指令

注记符:movq

将原操作数中数据复制到目标数据位置

操作数形式
  • 立即数,前缀为$,表示常数的整数类型。位长由注记符的最后一个字母决定,可以为1、2、4、8个字节。如movq中q表示为8字节,64位
  • 寄存器类型:前缀为%,有些特殊寄存器有特殊用途,如rsp寄存器不能当做普通寄存器使用,只用于存放程序运行时数据地址
  • 内存:()表示内存,通过访问内存地址的方式来加载数据或把数据存放到内存中
源操作数与目标操作数的限制

汇编指令_第3张图片

源操作数 目标操作数
立即数 寄存器、内存
寄存器 寄存器、内存
内存 寄存器
  • 当内存为原操作数时,不存在内存到内存的方式,即目标操作数只能为寄存器。因为冯诺依曼体系结构中处理器是计算机的核心,所有指令都要通过处理器完成,而在内存到内存的过程中无处理器参与
  • 立即数只能作为原操作数出现

结合实例理解数据访问指令

汇编指令_第4张图片
函数的参数存储在di,si两个寄存器中,这两个寄存器中存放的是地址而非值

内存的寻址模式

汇编指令_第5张图片

  • 完全寻址模式:用四元组表示(如上图)
  1. D:偏移量。只能为1、2、4、8四个常数中的一个
  2. Rb:内存基地址(base)。可以为任意整数
  3. Ri:索引寄存器(index)。除了rsp不能作为Ri使用,其余寄存器均可以
  4. S:宽度。只能为1、2、4、8中的值。因为高级语言处理数据类型时,基本数据类型宽度只有这四个值
  • 特殊情况
  1. D缺少时默认D=0
  2. S缺少时默认S=1
  3. Rb、Ri寄存器缺少时默认为0
  • 例子汇编指令_第6张图片

操作码后缀(操作码所描述的数据长度信息的规范)

汇编指令_第7张图片
mov后缀决定了移动字节数,进一步决定了所要选择寄存器的字节数,决定了从内存起始地址开始到底访问几个字节数据

你可能感兴趣的:(计算机基础)