《汇编语言(第四版)》---王爽 第二章寄存器(CPU工作原理) 详细笔记 ~后续章节笔记,课后检测,实验代码持续更新中

《汇编语言(第四版)》—王爽 第二章寄存器(CPU工作原理) 详细笔记 ~后续章节笔记,课后检测,实验代码持续更新中

第二章寄存器(CPU工作原理)

CPU概述

一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部的总线相连

区别

内部总线实现的是CPU内部的各个器件之间的联系

外部总线实现的是CPU和主板上其他器件之间的联系

寄存器概述

8086COU有十四个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW

2.1、通用寄存器

8086CPU所有的寄存器都是16位的,可以存放两个字节

AX,BX,CX,DX通常用来存放一般性的数据被称为通用寄存器

一个16位的寄存器所能存储的数据的最大值为:2的16次-1

为了保证兼容性,这四个通用的寄存器都可以分为两个独立的8位寄存器使用

AX可以分为AH(高位,8位),AL(低位,8位)

在这里插入图片描述
如果要按照以前的8位版本使用时,就将高位全部置为0,取低位使用

AH和AL是可以独立使用的寄存器

在这里插入图片描述
扩展内容(通用寄存器):

32位的通用寄存器有:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI

16位的通用寄存器有:AX,CX,DX,BX,SP,BP,SI,DI

08位的通用寄存器有:AH,AL,BH,BL,CH,CL,DH,DL

2.2、字在寄存器中的存储

字的英文表示形式为:word = 2B 两个字节

双字英文表示形式为:Dword

一个字可以存在一个16位的寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器额度高8位寄存器和低8位寄存器

二进制与其他进制之间的关系

二进制与十六进制的关系:每四个二进制位可以表示位一个十六进制位

二进制与八进制的关系:每三个二进制位可以表示为一个八进制位

为了区分进制,在十六进制的后面加上H,在八进制的后面加上B

2.3、几条汇编指令

汇编指令不区分大小写

mov ax,18	将18送入AX						AX=18
mov ah,78	将78送人AH                     AX=78
add  ax,8	将寄存器AX中的数值加上8			AX = AX + 8
mov ax,bx	将寄存器BX中的数据送入寄存器AX	  AX = BX
add ax,bx	将AX,BX中的内容相加,结果放在AX中  AX = AX+BX

思考题一:
在这里插入图片描述

通过计算得知结果为1044CH,但是因为AX只能存放16位,而且是从低位开始存储,所以最高位的1丢失,因此AX中存储的是044CH

思考题二:

在这里插入图片描述

通过计算得知结果为0185H,但是结果存放的地方是低八位,因此进位的一没有办法写入进去,顾丢失,因此此时AL中存储的是0058H

这里的丢失,指的是进位制不能在8位寄存器中保存,但是CPU不是真的丢弃了这个进位制值,后续会有相关知识

2.4、物理地址

CPU访问内存单元时要给出内存单元的地址,所以的内存单元构成的存储空间是一个一维的线性空间

我们将这个唯一的地址称之为物理地址

2.5、16位结构的CPU

概括地讲,16位结构(16位机、字长为16位等常见说法,与16位结构的含义相同)描述了一个CPU具有下面几方面的结构特性。

  • 运算器一次最多可以处理16位的数据;
  • 寄存器的最大宽度为16位;
  • 寄存器和运算器之间的通路为16位

2.6、8086CPU给出物理地址的方法

8086有20位的地址总线,可以传输20位的地址,寻址能力是1M

8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却是64K

8086CPU采取的是一种在内部用两个16位地址合成的方法来形成一个20位的物理地址

在这里插入图片描述

地址加法器合成物理地址的方法:

物理地址 = 段地址 * 16 + 偏移地址;

按照位运算来说一个16进制的数乘以16就相当于将这个数相左移动一位,低位补充0,二进制的数乘以16就相当于这个数相左移动四位

在这里插入图片描述

按照位运算来说,N进制,相左移动为乘以N,向右移动为除以N

2.7、物理地址 = 段地址 * 16 + 偏移地址的本质含义

“段地址×16+偏移地址=物理地址”的本质含义是:CPU在访问内存时,用一个基础地址(段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

更一般地说,8086CPU 的这种寻址功能是“基础地址+偏移地址=物理地址”寻址模式的一种具体实现方案。8086CPU中,段地址×16可看作是基础地址。

2.8、段的概念

错误的认识:内存被划分为一个一个的段,每个段有一个段地址

内存并没有分段,段的划分来自于CPU

以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址x16定位段的起始地址(基础地址)用偏移地址定位段中的内存单元。有两点需要注意:段地址x16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB.

内存单元地址小结

CPU在访问内存单元时,必须向内存提供内存单元的物理地址

8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址

CPU可以用不同的段地址和偏移地址形成同一个物理地址

“数据在21F60H内存单元中。”这句话对于8086PC机一般不这样讲,取而代之的是两种类似的说法:

  • 数据存在内存2000:1F60单元中;

  • 数据存在内存的2000H 段中的1F60H单元中。

这两种描述都表示“数据在内存21F6OH单元中”。

在这里插入图片描述

例题解析:首先偏移地址为16位,因此寻址范围位2的16次方为64KB即0HFFFFH;因为段地址位0001H,则段地址*16+偏移地址,即为0000HFFFFH + 0001H * 16 =0010H + 0000H~FFFFH = 0010H~1000FH,为所求

2.9、段寄存器

段寄存器就是提供段地址的

8086CPU有4个段寄存器:CS,DS,SS,ES

CS:代码段地址寄存器

DS:数据段地址寄存器

SS:堆栈段地址寄存器

ES:附加段地址寄存器

当8086CPU要访问内存时,由这四个段寄存器提供内存单元地址

2.10、CS和IP

CS和IP是8086CPU中最重要的寄存器,它们指示了CPU当前要读取的指令的地址

CS为代码段寄存器

IP为指令指针寄存器

(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;

(2)IP=IP+所读取指令的长度,从而指向下一条指令;

(3)执行指令。转到步骤(1),重复这个过程。

注意:在8086CPU加电启动或复位后(即CPU 刚开始工作时)CS和IP被设置为CS=FFFFHIP=0000H,即在8086PC 机刚启动时,CPU从内存 FFFF0H单元中读取指令执行,FFFFOH单元中的指令是8086PC机开机后执行的第一条指令。

在任何时候,CPU 将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。

如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过。

2.11、修改CS、IP指令

在CPU 中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU 的控制。

CPU 从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。

mov指令不能修改CS和IP的值

8086CPU为CS和IP专门提供了另外的指令来改变它们的值:转移指令

同时修改CS和IP的内容

jmp 段地址 偏移地址
jum 2AE3:3	--->到达地址2AE33  --->2AE3 * 16 + 3
jum 3:0B16  --->到达地址0B46   --->0003 * 16 + 0B16
用指令中的段地址修改CS,用指令中的偏移地址修改IP

进修改IP内容

jmp 某一合法的寄存器
(首先mov ax,数值)
jum ax(类似于mov IP,ax)
jum bx
用寄存器中的值修改IP

2.12、代码段

对于8086PC 机,在编程时,可以根据需要,将一组内存单元定义为一个段。我们可以将长度为N(N≤64KB)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,我们可以认为,这段内存是用来存放代码的,从而定义了一个代码段。

将一段内存当作代码段,仅仅是我们在编程时的一种安排,CPU并不会由于这种安排,就自动地将我们定义的代码段中的指令当作指令来执行。CPU只认被CS:IP指向的内存单元中的内容为指令。

要让CPU执行我们放在代码段中的指令,必须要将CS:IP指向所定义的代码段中的第一条指令的首地址。

9~12节 小结

在这里插入图片描述

检测点知识:

sub命令表示的是减法,sub ax,ax即为将ax寄存器中的数据清零

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CYS.burst

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值