汇编语言下的标志位和跳转指令(8086)

标志位

在汇编语言中,所有的标志位都存放在flags寄存器,寄存器的每一位都代表不同的标志位

  1. CF(Carry Flag):进位标志,用于表示是否产生了进位或借位。
  2. ZF(Zero Flag):零标志,如果操作结果为零,则设置此标志。
  3. SF(Sign Flag):符号标志,如果操作结果为负数,则设置此标志。
  4. OF(Overflow Flag):溢出标志,用于表示是否产生了溢出。
  5. PF(Parity Flag):奇偶标志,如果操作结果的最低有效字节中1的个数为偶数,则设置此标志。
  6. AF(Auxiliary Carry Flag):辅助进位标志,用于BCD(二进制编码的十进制)运算。
  7. DF(Direction Flag):方向标志,用于字符串操作指令,控制SI和DI的增加或减少。
  8. IF(Interrupt Enable Flag):中断允许标志,控制CPU是否响应外部中断

在我个人的理解中,感觉主要是前面四个标志位用的比较多,后面四个标志位没有如何使用 

CF标志位演示

MOV AX, 0FFFFH ; 设置AX为FFFF,一个会导致进位的值
ADD AX, 2     ; 尝试将2加到AX上,会产生进位
JC  Carry     ; 如果CF=1,则跳转到Carry
; 没有进位,继续执行
JMP NoCarry
Carry:
; 处理进位的情况
JMP End

NoCarry:
; 处理没有进位的情况
JMP End

End:

ZF标志位演示

MOV AX, 10
SUB AX, 10 ; AX的结果为0,设置ZF=1
JZ  Zero   ; 如果ZF=1,则跳转到Zero
; 结果不为零,继续执行
JMP NonZero
Zero:
; 处理结果为零的情况
JMP End

NonZero:
; 处理结果不为零的情况
JMP End

End:

SF标志位演示

MOV AX, 8000H ; 设置AX为负数(二进制表示为1000 0000 0000 0000)
JNS NotNegative ; 如果SF=0(非负数),则跳转到NotNegative
; 结果为负数,继续执行
JMP Negative
NotNegative:
; 处理非负数的情况
JMP End

Negative:
; 处理负数的情况
JMP End

End:

OF标志位演示

MOV AX, 8000H ; 设置AX为负数(二进制表示为1000 0000 0000 0000)
JNS NotNegative ; 如果SF=0(非负数),则跳转到NotNegative
; 结果为负数,继续执行
JMP Negative
NotNegative:
; 处理非负数的情况
JMP End

Negative:
; 处理负数的情况
JMP End

End:

跳转指令

跳转指令会根据标志位的状态来决定是否跳转到指定的地址继续执行。以下是一些常用的跳转指令:

  1. JMP:无条件跳转。
  2. JZ/JE:如果零标志(ZF)为1,则跳转。
  3. JNZ/JNE:如果零标志(ZF)为0,则跳转。
  4. JC:如果进位标志(CF)为1,则跳转。
  5. JNC:如果进位标志(CF)为0,则跳转。
  6. JS:如果符号标志(SF)为1,则跳转。
  7. JNS:如果符号标志(SF)为0,则跳转。
  8. JO:如果溢出标志(OF)为1,则跳转。
  9. JNO:如果溢出标志(OF)为0,则跳转。
  10. JP/JPE:如果奇偶标志(PF)为1,则跳转。
  11. JNP/JPO:如果奇偶标志(PF)为0,则跳转。
  12. JB/JNAE/JC:如果低于标志(CF)为1或零标志(ZF)为0,则跳转。
  13. JNB/JAE/JNC:如果低于标志(CF)为0且零标志(ZF)为1,则跳转。
  14. JBE/JNA:如果低于标志(CF)为1或零标志(ZF)为1,则跳转。
  15. JNBE/JA:如果低于标志(CF)为0且零标志(ZF)为0,则跳转。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值