汇编-寄存器
内部寄存器的类型
含有 14个 16位 寄存器,按照功能可分为三类
-
8个通用寄存器 (除了特殊作用,均可以用作 暂存中间结果)
-
数据寄存器(AX, BX, CX, DX)
- AX : 累加器
- 所有 I/O 指令都通过 AX 与接口传送信息,中间运算结果也多放于 AX 中
- BX :基址寄存器
- 在间接寻址中存放 基地址
- CX : 计数寄存器
- 用于在循环或串操作指令中存放计数值
- DX : 数据寄存器
- 在间接寻址的 I/O 指令中存放 I/O 端口地址 ; 在 32位 乘除法运算时,存放高 16位 数
- AX : 累加器
-
地址指针寄存器 (SP,BP)
- SP : 堆栈指针寄存器,其内容为栈顶的偏移地址
- BP : 基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址
- 注 : 在有堆栈操作的时候 SP 一定被专用, BP 不一定被专用 BP可能作为中间运算结果的存储位置
- BP 和 BX 的区别
- 作为通用寄存器,二者均可用于存放数据
- 作为基址寄存器,用 BX 表示所寻找的数据在 \(\color {red}{数据段}\) ; 用 BP 则表示数据在 \(\color {red}{堆栈段}\)
-
变址寄存器 (SI, DI)
- SI :源变址寄存器
- DI :目标变址寄存器
- 变址寄存器在指令中常用于存放数据在内存中的地址
-
除了 AX、CX 之外剩余 6个 寄存器都有可能存放地址,但是如果 拆开之后 如: \(AH,AL,BH,BL ……\) 一定不可能是地址,一定是运算的数据
-
-
2个控制寄存器
-
IP : 指令指针寄存器,其内容为下一条要取的指令的偏移地址
-
FLAGS :标志寄存器,存放运算结果的特征,是一个 16位 寄存器,但是只有 9位 是有意义的,其他 7位是空闲位
-
6个 状态标志位 (CF SF AF PF OF ZF)
- CF (Carry Flag) :进位标志位。 加(减)法运算时,若最高位有进(借)位 则 CF = 1 两个无符号数结果有溢出
- OF (Overflow Flag) : 溢出标志位。当运算结果超出了有符号数的可表达范围时, OF = 1 两个有符号数结果有溢出
- ZF (Zero Flag) :零标志位。 当运算结果为零时 ZF = 1
- SF (Sign Flag) :符号标志位。 当运算结果最高位为1时 SF = 1
- PF (Parity Flag) :奇偶标志位。 当运算结果低八位中 \(1\) 的个数为偶数时 PF = 1
- AF (AuxiliaryCarry Flag) :辅助进位标志位。 在加(减)操作中,若 Bit3 向 Bit3 有进位(借位),AF = 1
例子:给出以下运算结果以及运算后各状态标志位的的状态
10110110 + 11110100
10110110
\(+\) 11110100
1 10101010
CF = 1 有进位 OF = 0 最高位和次高位进位状态相同
AF = 0 若 Bit3 向 Bit3 没有进位 PF = 1 运算结果偶数个 1
SF = 1 运算结果最高位为 1 ZF = 0 运算结果不为 0 -
3个 控制标志位(IF TF DF)
- TF:(Trap Flag) 陷阱标志位,也叫跟踪标志位。TF = 1 时,使 CPU 处于单步执行指令的工作方式。
- IF 😦InterruptEnalbe Flag ) 中断允许标志位。 IF = 1 使 CPU 可以相应屏蔽中断请求
- DF(Direction Flag) 方向标志位。在数据串操作时确定操作的方向
-
-
-
4个段寄存器
- 作用 : 用于存放相应逻辑段的段基地址
- 8086/8088 内存中逻辑段的类型
- 代码段 : 存放指令代码
- 数据段 : 存放操作的数据
- 附加段 : 存放操作的数据
- 堆栈段 : 存放暂时不用但需要保存的数据
- CS : 代码段寄存器,存放代码段的段基地址
- DS: 数据段寄存器,存放数据段的段基地址
- ES : 附加段寄存器,存放数据段的段基地址
- SS : 堆栈段寄存器,存放堆栈段的段基地址