X86处理器中寄存器的组织形式
- 在X86系统中,对所有程序员都可见的寄存器一共16个,称为通用寄存器。均以r打头,为64位寄存器。
- 中间字符为字母的64位寄存器对应低32位寄存器,将r换为e开头;r后字符为数字的64位寄存器对应低32位寄存器,后边有d后缀
- sp寄存器都用特殊用途,存放栈顶指针;bp寄存器也有特殊作用,在后边的过程调用会讲到
X8632位系统
- 有通用寄存器8个,没有64位寄存器中的r9到r15
- 其对应低16位寄存器有4个,取掉前缀;低16位寄存器对应低8位寄存器有4个
汇编语言指令
数据访问指令
注记符:movq
将原操作数中数据复制到目标数据位置
操作数形式
- 立即数,前缀为$,表示常数的整数类型。位长由注记符的最后一个字母决定,可以为1、2、4、8个字节。如movq中q表示为8字节,64位
- 寄存器类型:前缀为%,有些特殊寄存器有特殊用途,如rsp寄存器不能当做普通寄存器使用,只用于存放程序运行时数据地址
- 内存:()表示内存,通过访问内存地址的方式来加载数据或把数据存放到内存中
源操作数与目标操作数的限制
源操作数 | 目标操作数 |
---|---|
立即数 | 寄存器、内存 |
寄存器 | 寄存器、内存 |
内存 | 寄存器 |
- 当内存为原操作数时,不存在内存到内存的方式,即目标操作数只能为寄存器。因为冯诺依曼体系结构中处理器是计算机的核心,所有指令都要通过处理器完成,而在内存到内存的过程中无处理器参与
- 立即数只能作为原操作数出现
结合实例理解数据访问指令
函数的参数存储在di,si两个寄存器中,这两个寄存器中存放的是地址而非值
内存的寻址模式
- 完全寻址模式:用四元组表示(如上图)
- D:偏移量。只能为1、2、4、8四个常数中的一个
- Rb:内存基地址(base)。可以为任意整数
- Ri:索引寄存器(index)。除了rsp不能作为Ri使用,其余寄存器均可以
- S:宽度。只能为1、2、4、8中的值。因为高级语言处理数据类型时,基本数据类型宽度只有这四个值
- 特殊情况
- D缺少时默认D=0
- S缺少时默认S=1
- Rb、Ri寄存器缺少时默认为0
- 例子
操作码后缀(操作码所描述的数据长度信息的规范)
mov后缀决定了移动字节数,进一步决定了所要选择寄存器的字节数,决定了从内存起始地址开始到底访问几个字节数据
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。