概述
文章目录
- 一、不同时期的寄存器
- 1)最早8086中,包含的8个16位寄存器
- 2)当处理器从16位扩展到32位时,寄存器的位数也扩展到了32位
- 3)今天64位的寄存器,除了8个还新增了8个新的寄存器
- 4)寄存器的使用规则
- 二、指令
- 1)指令组成:指令一般包含操作码和操作数
- 2)操作数分类:立即数、寄存器、内存引用
- 3)内存引用补充讲解
- 4)move操作补充讲解
- 1)movb、movw、movl、movq都是把数据从源位置复制到目的位置(主要区别操作数据大小不同)
- 2)mov类型有两个操作数:源操作数和目的操作数(目的操作数是用来存放源操作数的内容,所以不能是立即数)
- 3)x86-64额外特殊要求:mov指令的源操作数和目的操作数都不能是内存的地址
- 4) 移动内存数据举例
- 5)mov指令特殊情况了解
- 6)举例mov指令对目的寄存器的修改结果展示(源操作数和目的操作数的大小一致)
- 7)当源操作数的位数小于目的操作数时,使用mov指令(需要对目的操作数剩余的字节进行零扩展或者符号位扩展)
- Memory Hierarchy(存储层次结构(Memory Hierarchy) )
一、不同时期的寄存器
1)最早8086中,包含的8个16位寄存器
2)当处理器从16位扩展到32位时,寄存器的位数也扩展到了32位
3)今天64位的寄存器,除了8个还新增了8个新的寄存器
4)寄存器的使用规则
不同程序使用不同的规则利用寄存器,相应的编程规范规定好了如何使用这些寄存器
1)rax用来保存函数的返回值
2)rsp用来保存程序栈的结束位置
3)除此之外,6个寄存器用来传递函数参数
二、指令
1)指令组成:指令一般包含操作码和操作数
2)操作数分类:立即数、寄存器、内存引用
- 补充
1)再AT&T格式的汇编中,立即数是以$符号开头的,后面跟一个整数,整数需要满足标准C语言的定义
2)64位、32位、16位的寄存器都可以作为操作数
3)(%rsi) 表示内存引用
3)内存引用补充讲解
1)背景:通常将内存抽象成一个字节数组,当需要从内存中存取数据时,需要获得目的数据的起始地址,以及数据长度b
2)组成:最常见的内存引用包含4部分
①立即数
②基址寄存器
③变址寄存器
④比例因子
3)有效地址= 立即数+ 基址寄存器+变址寄存器*比例因子(比例因子s的取值必须为1、 2 、4 、8)
4)比例因子的大小取值因素
例如定义char类型的数组,比例因子就是1,int类型,比例因子就是4,至于double类型,比例因子就是8
5)内存引用的全部写法
4)move操作补充讲解
1)movb、movw、movl、movq都是把数据从源位置复制到目的位置(主要区别操作数据大小不同)
2)mov类型有两个操作数:源操作数和目的操作数(目的操作数是用来存放源操作数的内容,所以不能是立即数)
3)x86-64额外特殊要求:mov指令的源操作数和目的操作数都不能是内存的地址
注意:此时移动一块数据的内容就需要两条mov指令来完成
1)第一条指令将内存源位置的数值加载到寄存器
mov memory , register
2)第二条指令再将该寄存器的值写入到内存的目的位置
mov register , memory
4) 移动内存数据举例
- 注意:内存对应
movl对应32位寄存器eax;寄存器al是8位,与字节b对应
5)mov指令特殊情况了解
1)当movq指令的源操作数是立即数时,该立即数只能是32位的补码
表示,然后对该数值进行符号位扩展后,将得到64位数传送到目的位置
- 限制带来的问题:当立即数是64位,该如何处理?
这里引入新的指令,movabsq (该指令的源操作数可以是任意的64位立即数),但是目的操作数只能是寄存器
6)举例mov指令对目的寄存器的修改结果展示(源操作数和目的操作数的大小一致)
1)首先使用movabsq将64位的立即数复制到寄存器rax
2)使用movb指令将立即数 -1复制到寄存器al,寄存器al的长度为8,与movb指令操作的数据大小一致,此时寄存器rax的低8位发生了变化
3)movw将立即数-1复制到寄存器ax,此时寄存器rax的低16位发生了改变
4)当指令movl将立即数-1复制到寄存器eax时,此时rax不仅低32位,而且高32位也发生了变化
(当movl的目的操作数是寄存器时,他会把寄存器的高4字节设置为0,这是x86-64位处理器的规定 :即任何寄存器生成32位值得指令都会把该寄存器的高位部分置为0)
7)当源操作数的位数小于目的操作数时,使用mov指令(需要对目的操作数剩余的字节进行零扩展或者符号位扩展)
1)零扩展传送
zero-extending)指令有5条,其中字符z是zero的缩写,指令最后的两字都是大小指示符,第一个字母表示源操作数的大小,第二个字母表示目的操作数的大小
2)符号位扩展
传送指令有6条,其中s是 sign的缩写,同样最后的两个字符也是大小指示符
(符号扩展比零扩展多一条4字节到8字节的扩展指令)
3)符号位还有一条特殊的指令cltq,该指令的源操作数总是寄存器eax,目的操作数总是寄存器rax
最后
以上就是高大滑板为你收集整理的深入理解计算机系统笔记:第三章:3.2-寄存与数据传输指令的全部内容,希望文章能够帮你解决深入理解计算机系统笔记:第三章:3.2-寄存与数据传输指令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复