1. 段寄存器
需执行程序的各部分(指令代码、数据、堆栈)分别放在主存的指定段中。
段寄存器:用来存放每个段的段基值,即段基址的高16位,每个段寄存器有特定功能,不能互换。
当前段:由CS、DS、SS、ES指向的段,如图:
CS ----- 代码段用来存放程序的指令代码序列,CS用来存放当前代码段首址的高16位,即段基值。
DS ----- 数据段用来存放程序的有关数据,DS用来存放当前数据段的段基值。
SS ----- 堆栈段用来存放按后进先出顺序存取的信息,SS用来存放当前堆栈段的段基值。
ES ----- 附加段用来存放运算结果或辅助数据,ES用来存放当前附加段的段基值。
2. 通用寄存器
8个16位通用寄存器按使用情况分为三种:指针寄存器、变址寄存器、数据寄存器。
(1)指针寄存器:主要提供全部或部分偏移量
SP:专门存放堆栈段中栈顶单元的偏移量。
BP:存放堆栈段中某个单元的全部/部分偏移量,也可存放16位操作数或运算结果。
(2)变址寄存器
SI/DI:存放主存操作数的全部/部分偏移量,也可存放16位操作数和结果,在多数情况功能可以互换。 但在串操作指令中作用不能互换,源操作数必须用SI提供偏移量,目的操作数必须用DI提供偏移量。
(3)数据寄存器
数据寄存器既可以作为4个16位的寄存器,也可以作为8个8位的寄存器 ,(H表示高字节,L表示低字节)。
程序中,数据寄存器用来存放操作数、运算结果或其他信息。
数据寄存器在多数指令中要求指明使用,但也有隐含或特定使用,详细情况见下表:
寄存器 |
隐含使用/特定使用的用途 |
使用 |
AL |
(1)在乘法指令中存放乘数 |
隐含使用 |
AH |
在LAHF指令中做目的的寄存器 |
隐含使用 |
AL |
(1)用在组合型BCD码的加减调整指令中 |
隐含使用 |
BX |
在XLAT指令中作基址寄存器 |
隐含使用 |
CX |
在循环指令中,做循环次数计数器 |
隐含使用 |
CL |
在位移指令中,作位移次数计数器 |
特定使用 |
DX |
在字乘法和除法指令中,作辅助累加器 |
隐含使用 |
SP |
在堆栈造作指令,作堆栈指针 |
隐含使用 |
SI |
在串操作指令中,作源变址寄存器 |
隐含使用 |
DI |
在串操作指令中,作目的变址寄存器 |
隐含使用 |
3 控制寄存器
指令指针IP和标志寄存器FR
(1)指令指针IP(16位)
CS提供指令地址的段基值,IP提供偏移量,CS的内容左移4位,与IP中偏移量相加,形成下一指令首字节的存储单元地址。
(2)标志寄存器FR(16位) —— 用来记录程序执行时的状态
-----进位标志位CF(Carry Flag)
◆ 算术运算:结果最高位有进位/借位置‘1’
◆ 移位操作:存放移出的位
-----奇偶标志位PF(Parity Flag)
◆ 结果低8位中‘1’的个数为偶数置‘1’
-----辅助进位标志位AF(Auxiliary Carry Flag)
◆ 低字节中的低4位产生进位/借位置‘1’
-----零值标志位ZF(Zero Flag)
◆ 运算结果为全0置‘1’;不为零置‘0’
-----符号标志位SF(Sign Flag)
◆ 带符号数运算结果为负置‘1’;为正置‘0’
-----溢出标志位OF(Overflow Flag)
◆运算结果N发生溢出时,OF置‘1’,即 字节运算(8位) :N ≤ -129 或 N ≥ 128; 字运算(16位): N ≤ -32769 或 N ≥ 32768
-----单步标志位TF(Trace Flag)
◆ TF=1时,CPU执行完一条指令后产生单步中断,进入单步中断程序
-----中断标志位IF(Interrupt-enable Flag)
◆ IF=1时,允许CPU响应可屏蔽中断请求
-----方向标志位DF(Direction Flag)
◆规定串操作指令中串地址的增减方向:DF=0时,SI/DI内容自动递增;DF=1时,SI/DI内容自动递减
为了便于了解微处理器各个寄存器的情况,将所有寄存器集成到一起,如图所示: