爱了爱了,这篇寄存器讲的有点意思( 二 )


爱了爱了,这篇寄存器讲的有点意思文章插图
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 一起使用 , 用于涉及大数值的乘法和除法运算 。
这四种寄存器可以分为上半部分和下半部分 , 用作八个 8 位数据寄存器
  • 「AX 寄存器可以分为两个独立的 8 位的 AH 和 AL 寄存器;」
  • 「BX 寄存器可以分为两个独立的 8 位的 BH 和 BL 寄存器;」
  • 「CX 寄存器可以分为两个独立的 8 位的 CH 和 CL 寄存器;」
  • 「DX 寄存器可以分为两个独立的 8 位的 DH 和 DL 寄存器;」
除了上面 AX、BX、CX、DX 寄存器以外 , 其他寄存器均不可以分为两个独立的 8 位寄存器
如下图所示 。
爱了爱了,这篇寄存器讲的有点意思文章插图
合起来就是
爱了爱了,这篇寄存器讲的有点意思文章插图
AX 的低位(0 - 7)位构成了 AL 寄存器 , 高 8 位(8 - 15)位构成了 AH 寄存器 。 AH 和 AL 寄存器是可以使用的 8 位寄存器 , 其他同理 。
在认识了寄存器之后 , 我们通过一个示例来看一下数据的具体存储方式 。
比如数据 19, 它在 16 位存储器中所存储的表示如下
爱了爱了,这篇寄存器讲的有点意思文章插图
寄存器的存储方式是先存储低位 , 如果低位满足不了就存储高位 , 如果低位能够满足 , 高位用 0 补全 , 在其他低位能满足的情况下 , 其余位也用 0 补全 。
8086 CPU 可以一次存储两种类型的数据
  • 字节(byte):一个字节由 8 bit 组成 , 这是一种恒定不变的存储方式
  • 字(word):字是由指令集或处理器硬件作为单元处理的固定大小的数据 , 对于 intel 来说 , 一个字长就是两个字节 , 字是计算机一个非常重要的特征 , 针对不同的指令集架构来说 , 计算机一次处理的数据也是不同的 。 也就是说 , 针对不同指令集的机器 , 一次能处理不用的字长 , 有字、双字(32位)、四字(64位)等 。
AX 寄存器我们上面探讨过 , AX 的另外一个名字叫做累加寄存器或者简称为累加器 , 其可以分为 2 个独立的 8 位寄存器 AH 和 AL;在编写汇编程序中 , AX 寄存器可以说是使用频率最高的寄存器 。
下面是几段汇编代码
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 寄存器中存放的数据一般是用来作为偏移地址 使用的 , 因为偏移地址当然是在基址地址上的偏移了 。 偏移地址是在段寄存器中存储的 , 关于段寄存器的介绍 , 我们后面再说 。