8086寄存器的那些事

8086寄存器的那些事

1.寄存器的作用?

寄存器是CPU内部用来存放地址数据状态标志的部件。

2.8086内部有哪些寄存器?各用作什么?

  • 8086有14个16位寄存器,其中有4个可拆开成8个8位寄存器。

  • 按用途可以分为以下五类:
    数据寄存器: AX,BX,CX,DX;
    指针和变址寄存器: BP,SP,SI,DI;
    段寄存器: CS,DS,SS,ES;
    指令指针寄存器: IP;
    标志寄存器: FLAGS

  • 记下来,很重要

    8086寄存器的那些事
    3.详细了解:数据寄存器AX、BX、CX、DX

  • 可拆成8个8位的寄存器:AH、AL、BH、BL、CH、CL、DH、DL

  • 这些寄存器均可独立使用

AX AH(high) AL(low)
BX BH BL
CX CH CL
DX DH DL
  • 作用:数据寄存器主要用来存放计算结果(或中间结果)和操作数,也可以存放地址以减少访问存储器的次数

  • 多数情况下,这些数据寄存器是用在算术运算或逻辑运算指令中,以进行算术逻辑运算。在有些指令中,它们则有特定的用途。

  • 特定用途:

8086寄存器的那些事

4.详细了解:指针和变址寄存器 BP,SP,SI,DI
8086寄存器的那些事

5.详细了解:段寄存器 CS,DS,SS,ES

①.CS:代码段寄存器(Code Segment)

  • 作用:

    • 代码段用来存放程序的指令序列

    • 代码段寄存器CS存放代码段的段地址

  • 指令指针寄存器IP指示下条指令的偏移地址

  • 处理器利用CS:IP取得下一条要执行的指令。
    即CS×16+IP (×16等于左移4位)

eg:某指令在代码段内的偏移地址为0100H,即IP=0100H,当前代码段寄存器CS=2000H,则该指令在存储器中的物理地址为:PA=2000H×16+0100H=20100H

②.DS:数据段寄存器(Data Segment)

  • 作用:
    • 数据段用来存放运行程序所用的数据
    • 数据段寄存器DS存放数据段的段地址
    • 操作数的偏移地址EA
    • 处理器利用DS:EA取得变量或操作数的地址。
      即DS×16+EA

③.SS:堆栈段(Stack Segment)

  • 作用:
    • 存放当前堆栈段的起始地址。堆栈是按照“后进先出”原则组织的一个特殊内存区域。
    • 堆栈段寄存器SS存放堆栈段的段地址
    • 堆栈指针寄存器SP指示堆栈栈顶的偏移地址
    • 处理器利用SS:SP操作堆栈栈顶的数据
      即SS×16+SP
    • 当需要访问堆栈中的某一存储单元时,必须通过基址寄存器BP
      即 SS×16+BP

④.ES:附加段(Extra Segment)

  • 作用:
    • 附加段是附加的数据段,也用于数据的保存:
    • 附加段寄存器ES存放附加段的段地址
    • 各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址
    • 处理器利用ES:EA存取附加段中的数据
    • 串操作指令将附加段作为其目的操作数的存放区域,ES:DI(目的变址寄存器)

⑤.IP:指令指针寄存器(Instruction Pointer)

  • 作用:相当于程序计数器PC,用于控制程序中指令的执行顺序。它与CS联用,形成下一条要取出指令的物理地址。

  • 程序不能直接对IP进行存取,但能在程序运行中被自动修改。

  • 例如,控制器取到要执行的指令后,会立刻修改IP值,使之指向下一条指令的首地址;
    转移、调用、返回等指令执行,就是通过修改IP的值来控制指令序列的执行流程的

⑥.FR:标志寄存器(FLAG)

  • 作用:FR是一个16位的寄存器。也称程序状态字(PSW)寄存器。用于反映执行结果或控制指令。 有效的只有9位。

-状态标志位有6个

  • 记录程序中运行结果的状态信息,是根据指令的运行结果由CPU自动设置的。这些状态信息会影响后面的具体操作。

    CF PF AF ZF SF OF
    名称 进位标志 奇偶标志 辅助进位标志 零标志 符号标志 溢出标志
    作用 指令执行后,如果运算结果在最高位上产生了一个进位或借位,则CF=1;否则,CF=0。 如果运算结果低八位1的个数为偶数,则PF=1;否则,PF=0。 如果运算结果低4位产生了进位,则AF=1;否则,AF=0。 如果运算结果为0,则ZF=1;否则,ZF=0。 如果运算结果为正数,则SF=0;否则,SF=1。 如果运算过程产生了溢出,则OF=1;否则,OF=0
    例子 【例】3AH + 7CH=0B6H,结果:没有进位:CF = 0
  • 控制标志位有3个,(TF,IF,DF)

  • 可以编程设置,用于控制处理器执行指令的方式。控制标志设置之后,可对后面的操作产生控制作用。

TF IF DF
名称 单步标志 中断允许标志 方向标志(用于串操作指令)
作用 TF=1,处理器按单步执行指令;
TF=0,处理器正常工作。
IF=1,允许可屏蔽中断;
IF=0,不允许可屏蔽中断。
DF=1,存储器地址会自动减值;
DF=0,存储器地址会自动增值。

重点解决:

1.8086内部有哪14个16位寄存器?其中哪些可以分成高8位和低8位?各寄存器的作用?
2.标志寄存器中的16位用了几位?标志怎么分类,分别有哪些?各位标志的作用?