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 -
记下来,很重要
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 |
-
作用:数据寄存器主要用来存放计算结果(或中间结果)和操作数,也可以存放地址,以减少访问存储器的次数。
-
多数情况下,这些数据寄存器是用在算术运算或逻辑运算指令中,以进行算术逻辑运算。在有些指令中,它们则有特定的用途。
-
特定用途:
4.详细了解:指针和变址寄存器 BP,SP,SI,DI
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位用了几位?标志怎么分类,分别有哪些?各位标志的作用?