寄存器有哪五种,寄存器分类

首页 > 经验 > 作者:YD1662022-11-06 07:40:20

叙述一下上图描述的过程

CPU 相关组件提供两个地址:段地址和偏移地址,这两个地址都是 16 位的,他们经由地址加法器变为 20 位的物理地址,这个地址即是输入输出控制电路传递给内存的物理地址,由此完成物理地址的转换。

地址加法器采用 「物理地址 = 段地址 * 16 偏移地址」 的方法用段地址和偏移地址合成物理地址。

下面是地址加法器的工作流程

寄存器有哪五种,寄存器分类(9)

其实段地址 * 16 ,就是左移 4 位。在上面的叙述中,物理地址 = 段地址 * 16 偏移地址,其实就是「基础地址 偏移地址 = 物理地址」 寻址模式的一种具体实现方案。基础地址其实就等于段地址 * 16。

你可能不太清楚 段 的概念,下面我们就来探讨一下。

什么是段

段这个概念经常出现在操作系统中,比如在内存管理中,操作系统会把不同的数据分成 段来存储,比如 「代码段、数据段、bss 段、rodata 段」 等。

但是这些的划分并不是内存*,cxuan 告诉你是谁*,这其实是幕后 Boss CPU 搞的,内存当作了声讨的对象。

其实,内存没有进行分段,分段完全是由 CPU 搞的,上面聊过的通过基础地址 偏移地址 = 物理地址的方式给出内存单元的物理地址,使得我们可以分段管理 CPU。

如图所示

寄存器有哪五种,寄存器分类(10)

这是两个 16 KB 的程序分别被装载进内存的示意图,可以看到,这两个程序的段地址的大小都是 16380。

这里需要注意一点, 8086 CPU 段地址的计算方式是段地址 * 16,所以,16 位的寻址能力是 2^16 次方,所以一个段的长度是 64 KB。

段寄存器

cxuan 在上面只是简单为你介绍了一下段寄存器的概念,介绍的有些浅,而且介绍段寄存器不介绍段也有「不知庐山真面目」的感觉,现在为你详细的介绍一下,相信看完上面的段的概念之后,段寄存器也是手到擒来。

我们在合成物理地址的那张图提到了 相关部件 的概念,这个相关部件其实就是段寄存器,即 「CS、DS、SS、ES」 。8086 的 CPU 在访问内存时,由这四个寄存器提供内存单元的段地址。

CS 寄存器

要聊 CS 寄存器,那么 IP 寄存器是你绕不过去的曾经。CS 和 IP 都是 8086 CPU 非常重要的寄存器,它们指出了 CPU 当前需要读取指令的地址。

CS 的全称是 Code Segment,即代码寄存器;而 IP 的全称是 Instruction Pointer ,即指令指针。现在知道这两个为什么一起出现了吧!

在 8086 CPU 中,由 CS:IP 指向的内容当作指令执行。如下图所示

寄存器有哪五种,寄存器分类(11)

说明一下上图

在 CPU 内部,由 CS、IP 提供段地址,由加法器负责转换为物理地址,输入输出控制电路负责输入/输出数据,指令缓冲器负责缓冲指令,指令执行器负责执行指令。在内存中有一段连续存储的区域,区域内部存储的是机器码、外面是地址和汇编指令。

上面这幅图的段地址和偏移地址分别是 2000 和 0000,当这两个地址进入地址加法器后,会由地址加法器负责将这两个地址转换为物理地址

寄存器有哪五种,寄存器分类(12)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.