爱了爱了,这篇寄存器讲的有点意思( 二 )
文章插图
8086 CPU 的上一代寄存器是 8080, 它是一类 8 位的 CPU , 为了保证兼容性 , 8086 在 8080 上做了很小的修改 , 8086 中的通用寄存器 AX、BX、CX、DX 都可以独立使用两个 8 位寄存器来使用 。
在细节方面 , AX、BX、CX、DX 可以再向下进行划分
- AX(Accumulator Register) :累加寄存器 , 它主要用于输入/输出和大规模的指令运算 。
- BX(Base Register):基址寄存器 , 用来存储基础访问地址
- CX(Count Register):计数寄存器 , CX 寄存器在迭代的操作中会循环计数
- DX(data Register):数据寄存器 , 它也用于输入/输出操作 。 它还与 AX 寄存器以及 DX 一起使用 , 用于涉及大数值的乘法和除法运算 。
- 「AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;」
- 「BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;」
- 「CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;」
- 「DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器;」
如下图所示 。
文章插图
合起来就是
文章插图
AX 的低位(0 - 7)位构成了 AL 寄存器 , 高 8 位(8 - 15)位构成了 AH 寄存器 。 AH 和 AL 寄存器是可以使用的 8 位寄存器 , 其他同理 。
在认识了寄存器之后 , 我们通过一个示例来看一下数据的具体存储方式 。
比如数据 19, 它在 16 位存储器中所存储的表示如下
文章插图
寄存器的存储方式是先存储低位 , 如果低位满足不了就存储高位 , 如果低位能够满足 , 高位用 0 补全 , 在其他低位能满足的情况下 , 其余位也用 0 补全 。
8086 CPU 可以一次存储两种类型的数据
- 字节(byte):一个字节由 8 bit 组成 , 这是一种恒定不变的存储方式
- 字(word):字是由指令集或处理器硬件作为单元处理的固定大小的数据 , 对于 intel 来说 , 一个字长就是两个字节 , 字是计算机一个非常重要的特征 , 针对不同的指令集架构来说 , 计算机一次处理的数据也是不同的 。 也就是说 , 针对不同指令集的机器 , 一次能处理不用的字长 , 有字、双字(32位)、四字(64位)等 。
下面是几段汇编代码
mov ax,20/* 将 20 送入寄存器 AX*/mov ah,80/* 将 80 送入寄存器 AH*/add ax,10/* 将寄存器 AX 中的数值加上 8 */
?这里注意下:上面代码中出现的是 ax、ah, 而注释中确是 AX、AH, 其实含义是一样的 , 不区分大小写 。
?
AX 相比于其他通用寄存器来说 , 有一点比较特殊 , AX 具有一种特殊功能的使用 , 那就是使用 DIV 和 MUL 指令式使用 。
?
DIV 是 8086 CPU 中的除法指令 。
MUL 是 8086 CPU 中的乘法指令 。
?
BX 寄存器BX 被称为数据寄存器 , 即表明其能够暂存一般数据 。 同样为了适应以前的 8 位 CPU, 而可以将 BX 当做两个独立的 8 位寄存器使用 , 即有 BH 和 BL 。 BX 除了具有暂存数据的功能外 , 还用于 寻址 , 即寻找物理内存地址 。 BX 寄存器中存放的数据一般是用来作为偏移地址 使用的 , 因为偏移地址当然是在基址地址上的偏移了 。 偏移地址是在段寄存器中存储的 , 关于段寄存器的介绍 , 我们后面再说 。
推荐阅读
- 双旦OLED电视怎么选?这篇文章帮你解惑
- Golang 切片综合指南
- IntelliJ IDEA快捷键中排名前五的导航快捷键
- 不同微单系统对焦有何区别?这篇文章给你答案
- 为什么大家不讨论Macbook?
- 关于中文编程的一些思考
- Seaborn的6个简单技巧
- 谷歌登月实验室的新项目,居然这么“土”
- iPhone12买不买?看这篇就够了。
- 双十一采购推荐之路由器选购