(1)寄存器

一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。
在CPU中:

  • 运算器进行信息处理
  • 寄存器进行信息存储
  • 控制器控制各种器件进行工作
  • 内部总线连接各种器件,在他们之间进行数据的传送

注:不同的CPU,寄存器的个数、结构是不同的、
8086CPU有14个寄存器,分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW
8086CPU的所有寄存器都是16位的,可以存放两个字节

通用寄存器

AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器
逻辑结构:

在这里插入图片描述
8086CPU 的上一代 CPU 中的寄存器都是 8 位的,为了保证兼容,使原来基于上代 CPU 编写的程序稍加修改就可以运行在 8086 之上,8086CPU 的 AX、BX、CX、DX 这 4个寄存器都可分为两个可独立使用的 8 位寄存器来用

AX可分为AH和AL
BX可分为BH和BL
CX可分为CH和CL
DX可分为DH和DL

在这里插入图片描述

字在寄存器中的存储

出于对兼容性的考虑,8086CPU 可以一次性处理以下两种尺寸的数据。
● 字节∶记为 byte,一个字节由 8个 bit 组成,可以存在8位寄存器中。

● 字∶记为 word,一个字由两个字节组成,这两个字节分别称为这个字的高位字
节和低位字节

在这里插入图片描述
一个字可以存在一个 16 位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高 8 位寄存器和低 8 位寄存器中。

例如,一个字型数据 20000,存在 AX 寄存器中,在 AH中存储了它的高8 位,在 AL中存储了它的低8位。AH和 AL中的数据,既可以看成是一个字型数据的高 8 位和低 8 位,这个字型数据的大小是 20000; 又可以看成是两个独立的字节型数据,它们的大小分别是 78 和 32。在这里插入图片描述

小结:
在这里插入图片描述

几条汇编指令

汇编指令举例:
在这里插入图片描述
注: 在写一条汇编指令或一个寄存器的名称时不区分大小写

例:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
注:在进行数据传送或运算时,要主要指令的两个操作对象的位数应当是一致的。
不能在8位和16位寄存器之间传送数据,高8数据不能存8

物理地址

CPU 访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。

**CPU 通过地址总线送入存储器的,必须是一个内存单元的物理地址。**在 CPU 向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的 CPU 可以有不同的形成物理地址的方式。

16位结构的CPU

16位结构CPU的结构特性:

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

8086 是 16 位结构的 CPU,这也就是说,在 8086 内部,能够一次性处理、传输、暂时存储的信息的最大长度是 16 位的。内存单元的地址在送上地址总线之前,必须在 CPU中处理、传输、暂时存放,对于16 位 CPU,能一次性处理、传输、暂时存储 16 位的地址。

8086CPU给出物理地址的方法

8086CPU有 20 位地址总线,可以传送 20 位地址,达到 1MB 寻址能力。8086CPU 又是 16 位结构,在内部一次性处理、传输、暂时存储的地址为 16 位。从 8086CPU的内部结构来看,如果将地址从内部简单地发出,那么它只能送出 16 位的地址,表现出的寻址能力只有64KB。

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

地址加法器:
在这里插入图片描述

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

例:8086CPU要访问地址为123C8H的内存单元:
在这里插入图片描述
在这里插入图片描述
小结:基础地址 + 偏移地址 = 物理地址

段的概念

内存并未分段,段的划分来自于CPU,我们可以用分段的方式来管理内存。

以后,可以将若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。

注:段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址为16位,16位地址寻址能力为64KB,所以一个段的长度最大为64KB。
在这里插入图片描述

内存单元地址小结:

CPU访问内存单元时,必须向内存提供内存单元的物理地址。8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。
在这里插入图片描述
在这里插入图片描述

段寄存器

8086CPU在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。 段地址在8086CPU的段寄存器中存放。8086CPU有4个段寄存器:CS、DS、SS、ES。当8086CPU要访问内存时由这4个段寄存器提供内存单元的段地址。

CS和IP

CS 和 IP 是 8086CPU 中两个最关键的寄存器,它们指示了 CPU 当前要读取指令的地址。CS 为代码段寄存器,IP 为指令指针寄存器,从名称上我们可以看出它们和指令的关系。

在 8086PC 机中,任意时刻,设 CS 中的内容为M,IP 中的内容为N,8086CPU将从内存 M×16+N 单元开始,读取一条指令并执行。

也可以这样表述∶ 8086 机中,任意时刻,CPU 将 CS∶IP 指向的内容当作指令执行。

在这里插入图片描述
8086CPU的工作过程:
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
(2)IP=IP+所读取指令的长度,从而指向下一条指令
(3)执行指令。转到步骤(1),重复这个过程。

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

在内存中,指令和数据没有任何区别,都是二进制信息,CPU在工作的时候把有的信息看作指令,有的信息看作数据。
CPU根据什么将内存中的信息看作指令?
我们可以说,CPU 将 CS∶IP 指向的内存单元中的内容看作指令,因为,在任何时候,CPU 将 CS、IP 中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。
如果说,内存中的一段信息曾被 CPU 执行过的话,那么,它所在的内存单元必然被 CS∶IP 指向过。

修改CS、IP的指令

在 CPU 中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对 CPU 的控制。CPU 从何处执行指令是由 CS、IP 中的内容决定的,程序员可以通过改变 CS、IP 中的内容来控制 CPU 执行目标指令。

能够修改CS、IP的内容的指令被统称为转移指令。最简单:jmp指令
(1)若想同时修改 CS、IP 的内容,可用形如"jmp 段地址∶偏移地址"的指令完成。功能:用指令中给出的段地址修改CS,偏移地址修改IP
例:jmp 2AE3∶3,执行后∶ CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。
jmp 3∶0B16,执行后∶CS=0003H,IP=OB16H,CPU将从 00B46H处读取指令。
(2)若想仅修改IP的内容,可用形如“jmp 某一合法寄存器”的指令完成。功能:用寄存器中的值修改IP(好似:mov IP,ax)

例:jmp ax,指令执行前∶ ax=1000H,CS=2000H,IP=0003H


指令执行后∶ax=1000H,CS=2000H,IP=1000H


 jmp bx,指令执行前∶bx=OB16H,CS=2000H,IP=0003H



 指令执行后∶ bx=0B16H,CS=2000H,IP=0B16H

注:读入指令后即IP增加,若读入指令为jmp ax/bx,则先根据读入内存单元数增加IP,执行命令后赋值IP。

代码段

我们可以将长度为N(N<=64KB)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,我们可以认为,这段内存是用来存放代码的,从而定义了一个代码段。
将一段内存当作代码段,仅仅是我们在编程时的一种安排,CPU并不会由于这种安排,就自动地将我们定义的代码段中的指令当作指令来执行。
所以,要让CPU执行我们放在代码段中的指令,必须要将CS:IP指向所定义的代码段中的第一条指令的首地址。

小结:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hvk_l

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

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

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

打赏作者

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

抵扣说明:

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

余额充值