深入理解计算机系统笔记:第三章:3.2-寄存与数据传输指令

  • 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
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值