第二章 寄存器

第二章 寄存器

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

在CPU中:

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

2.1 通用寄存器

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

以AX为例,寄存器逻辑结构如下:

这里需要指出的是:在8086CPU中AX寄存器可以拆分为两个寄存器单独使用,如AX可以分为AH和AL,AH指AX中的高八位寄存器,存储地址为8~15,AL指AX中的低八位寄存器,存储地址为0~7。AH可以视为Ahigh,AL可以视为Alow,高低便是由这两个英文翻译而来的。

请注意:高八位寄存器和低八位寄存器数值并不互通,即低八位寄存器中如果存在溢出,则不能进位到高八位寄存器。

在8086CPU中:

AX 可分为 AH 和 AL。

BX 可分为 BH 和 BL。

CX 可分为 CH 和 CL。

DX 可分为 DH 和 DL。

2.2 字在寄存器中的存储

字节:记为 byte,一个字节由8个bit组成,可以存在8位寄存器中。

字:记为 word,一个字由两个字节组成。

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

2.3 几条汇编指令

下面是几条常见的汇编指令的举例:

下面我们通过一段程序感受一下寄存器的加减法和赋值运算:

问题 2.1:指令执行后 AX 中的数据为多少?

答案:044CH

解析:add ax,bx的含义,将bx的值加到ax上并赋值给ax,即用高级语言表述的话为:ax += bx,那么,ax和bx最近的一步操作后的结果均为8226H,那么8226H+8226H = 1044CH,可以发现最终结果为5为,高位寄存器发生了溢出,在CPU中如果产生溢出则直接舍弃,因此最终结果为044CH。

下面我们再通过一段程序感受一下单独对寄存器中的高位寄存器和低位寄存器进行操作时的效果:

问题2.2:指令执行后 AX 中的数据为多少?

答案:0058H

解析:add al, 93H的含义,将93H加到ax中的低位寄存器al上,并赋值给al,即用高级语言表述的话为:al += 93H,那么,ax的最近的一次操作后的结果为00C5H,al寄存器为C5H,93H + C5H = 158H,我们发现该寄存器产生了溢出,因为低位寄存器的溢出不会向高位寄存器进位,因此溢出舍弃,最终结果为0058H。

2.4 物理地址

CPU 访问内存单元时,要给出内存单元的地址。

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

2.5 16 位结构的 CPU

8086CPU是16位的CPU,其上一代(8080、8085)是8位的,16位CPU具有以下特性:

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

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

我们先看一个8086CPU的逻辑结构:

我们发现,其地址总线为20位。这个20位是怎么得到的?

地址加法器采用物理地址=段地址x16+偏移地址的方法用段地址和偏移地址合成物理地址。
具体解释如下:

段地址和偏移地址均为16位,那么按照16进制来看,四个二进制位为1个16进制位,因此我们可以设想段地址为如下结构

​ A B C D,一个字母代表四位,偏移地址为B C D E,一个字母也是四位(字母没有特殊含义,主要用来抽象存储结构)。

如果我们将段地址整体 * 16,那么段地址便整体左移一个16进制位。段地址为:

​ A B C D 0。

如果不理解为什么左移1位,可以假设现在是10进制,假设某数字为5665,那么 * 10结果为56650,是不是左移一位?

​ 我们再让段地址 * 16后的地址 + 偏移地址,即:

		A B  C  D  0
+         B  C  D  E 
=		A 2B 2C 2D E

原本段地址 * 16以后,无论段地址怎么变化,最后的那一位永远是0,因此加上偏移地址后,便可以通过偏移地址来达到拼凑出一个20位的物理地址的效果。

2.7 “段地址x16+偏移地址=物理地址“的本质含义

8086CPU 的这种寻址功能是“基础地址+偏移地址=物理地址”寻址模式的一种具体实现方案。

2.8 段的概念

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

由于 8086CPU 用“基础地址(段地址x16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

观察下面地址,你有什么发现?

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

2.9 段寄存器

8086CPU有4个段寄存器:CS、DS、SS、ES。当8086CPU要访问内存时由这4个段寄存器提供内存单元的段地址。

2.10 CS 和IP

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

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值