学习汇编语言的编程,不能不涉及各种寄存器的知识。 8086cpu有14个16位寄存器,但标志寄存器FLAGS是其中非常复杂的一个。
首先,我们将简要总结8086cpu的14个16位寄存器。
8086cpu寄存器分类:
一、8个通用寄存器。
1,4个数据寄存器AX、BX、CX、DX
2,2个指针寄存器SP,BP
3,2个索引寄存器SI,DI
二、四级寄存器CS、DS、SS、ES
三、两个控制寄存器IP、FLAGS
在这些寄存器中,我觉得FLAGS最难学习。 它的九个标志位对表征微处理器的当前状态和一些控制表示了不同的意义。
一、状态标志:
CF :进位。
运算结果的最高位发生进位或位置偏移时,CF设为1,否则CF清零。
PF :奇偶校验位。
运算结果的后8位中“1”的个数为偶数时,为PF组。
否则PF 清0。
AF :进位辅助。
反应结果的后4位发生进位或位置偏移时。
(ZF )零值位。
如果运算结果为零,则ZF设定为1。 否则归零。
科幻:符号位。
如果运算结果为负,即一个数的最高有效位为1,则SF设置为1,否则SF清零。
OF :溢出位。
运算结果超过补数显示范围(8位-128~127、16位-32768~ 32767 )时。 溢出情况下,将OF设为1,否则将OF设为0。
二.控制标志
TF :单步标志位
用于程序跟踪的调试。 当TF=1时,CPU进入单步模式。
(IF )允许中断位
IF=1时,CPU变为on中断。
IF=0时,CPU变为关闭中断。
DF :方向位
确定执行串行操作指令时指针寄存器的调整方向。 我至今没有碰过。
另外,通过debug可以看到寄存器内各位的值。
输入r命令。 右下角的字符为状态寄存器各位的值。
这是符号值对应表:
溢出标志of (溢出标志ov )1(NV )0) )。
方向标记df (方向标志) dn (1) up (0)
中断标志if (中断标志) ei (1) di (0) ) ) ) ) ) ) ) ) )。
符号标记SF(signflag ) ng )1(pl )0)
零标记ZF(zeroflag ) Zr (1) NZ (0) ) ) ) ) ) ) ) )。
辅助标志af(auxiliarycarryflag ) AC (1) na (0) ) ) ) ) ) ) ) ) )。
奇偶校验标记pf(parityflag ) PE (1) po (0) ) ) ) ) ) ) ) )。
进位标志cf (电荷标志) cy (1) NC (0) ) )。