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


CX 寄存器CX 也是数据寄存器 , 能够暂存一般性数据 。 同样为了适应以前的 8 位 CPU, 而可以将 CX 当做两个独立的 8 位寄存器使用 , 即有 CH 和 CL 。 除此之外 , CX 也是有其专门的用途的 , CX 中的 C 被翻译为 Counting 也就是计数器的功能 。 当在汇编指令中使用循环 LOOP 指令时 , 可以通过 CX 来指定需要循环的次数 , 每次执行循环 LOOP 时候 , CPU 会做两件事

  • 一件事是计数器自动减 1
  • 还有一件就是判断 CX 中的值 , 如果 CX 中的值为 0 则会跳出循环 , 而继续执行循环下面的指令 , 当然如果 CX 中的值不为 0, 则会继续执行循环中所指定的指令。
DX 寄存器DX 也是数据寄存器 , 能够暂存一般性数据 。 同样为了适应以前的 8 位 CPU, DX 的用途其实在前面介绍 AX 寄存器时便已经有所介绍了 , 那就是支持 MUL 和 DIV 指令 。 同时也支持数值溢出等 。
段寄存器CPU 包含四个段寄存器 , 用作程序指令 , 数据或栈的基础位置 。 实际上 , 对 IBM PC 上所有内存的引用都包含一个段寄存器作为基本位置 。
段寄存器主要包含
  • CS(Code Segment) :代码寄存器 , 程序代码的基础位置
  • DS(Data Segment):数据寄存器 , 变量的基本位置
  • SS(Stack Segment):栈寄存器 , 栈的基础位置
  • ES(Extra Segment):其他寄存器 , 内存中变量的其他基本位置 。
索引寄存器索引寄存器主要包含段地址的偏移量 , 索引寄存器主要分为
  • BP(Base Pointer):基础指针 , 它是栈寄存器上的偏移量 , 用来定位栈上变量
  • SP(Stack Pointer): 栈指针 , 它是栈寄存器上的偏移量 , 用来定位栈顶
  • SI(Source Index): 变址寄存器 , 用来拷贝源字符串
  • DI(Destination Index): 目标变址寄存器 , 用来复制到目标字符串
状态和控制寄存器就剩下两种寄存器还没聊了 , 这两种寄存器是指令指针寄存器和标志寄存器:
  • IP(Instruction Pointer):指令指针寄存器 , 它是从 Code Segment 代码寄存器处的偏移来存储执行的下一条指令
  • FLAG : Flag 寄存器用于存储当前进程的状态 , 这些状态有
    • 位置 (Direction):用于数据块的传输方向 , 是向上传输还是向下传输
    • 中断标志位 (Interrupt) :1 - 允许;0 - 禁止
    • 陷入位 (Trap) :确定每条指令执行完成后 , CPU 是否应该停止 。 1 - 开启 , 0 - 关闭
    • 进位 (Carry) : 设置最后一个无符号算术运算是否带有进位
    • 溢出 (Overflow) : 设置最后一个有符号运算是否溢出
    • 符号 (Sign) : 如果最后一次算术运算为负 , 则设置 1 =负 , 0 =正
    • 零位 (Zero) : 如果最后一次算术运算结果为零 , 1 = 零
    • 辅助进位 (Aux Carry) :用于第三位到第四位的进位
    • 奇偶校验 (Parity) : 用于奇偶校验
物理地址我们大家都知道 ,CPU 访问内存时 , 需要知道访问内存的具体地址 , 内存单元是内存的基本单位 , 每一个内存单元在内存中都有唯一的地址 , 这个地址即是 物理地址 。 而 CPU 和内存之间的交互有三条总线 , 即数据总线、控制总线和地址总线 。
爱了爱了,这篇寄存器讲的有点意思文章插图
CPU 通过地址总线将物理地址送入存储器 , 那么 CPU 是如何形成的物理地址呢?这将是我们接下来的讨论重点 。
现在 , 我们先来讨论一下和 8086 CPU 有关的结构问题 。
cxuan 和你聊了这么久 , 你应该知道 8086 CPU 是 16 位的 CPU 了 , 那么 , 什么是 16 位的 CPU 呢?
你可能大致听过这个回答 , 16 位 CPU 指的是 CPU 一次能处理的数据是 16 位的 , 能回答这个问题代表你的底层还不错 , 但是不够全面 , 其实 , 16 位的 CPU 指的是