OF标志
flag的第十一位是OF,溢出标志位.一般情况下,OF记录了有符号数运算的结果是否发生了溢出.如果发生溢出,OF=1,否则 OF=0.
溢出:进行有符号数运算的时候,结果超出机器所能表示的范围
机器表示的范围:8位有符号数据,机器所能表示的范围是-128~127,而16位有符号数据,机器所能表示的范围是-32768~32767
注意CF和OF的区别:CF是对无符号数运算有意义的标志位,而OF是对有符号数运算有意义的标志位
adc指令
adc是带进位加法的指令,它利用CF位上记录的进位值. 指令格式:adc 操作对象1,操作对象2 功能:操作对象1=操作对象1+操作对象2+CF
inc和loop指令不影响CF位. sbb指令
sbb指令是带借位减法指令,它利用了CF上记录的借位值 指令格式:sbb 操作对象1,操作对象2 功能:操作对象1=操作对象1-操作对象2-CF
cmp指令
cmp是比较指令,功能相当于减法指令 指令格式:cmp 操作对象1,操作对象2
功能:计算操作对象1-操作对象2,不保存结果,只根据计算结果对标志寄存器进行设置
cmp指令的含义 cmp ah,bh
SF=1,OF=0 ;(ah)< (bh) SF=1,OF=1 ;溢出 (ah)>(bh) SF=0,OF=1 ;溢出 (ah)<(bh) SF=0,OF=0 ;(ah) ≥ (bh)
检测比较结果的条件转移指令
指令 含义 检测的相关标志位 je 等于则转移 ZF=1 jne 不等于则转移 ZF=0 jb 低于则转移 CF=1 jnb 不低于则转移 CF=0 ja 高于则转移 CF=0且ZF=0 jna 不高于则转移 CF=1或ZF=1
DF标志和串传送指令
flag的第10位是DF,方向标志位,在串处理指令中,控制每次操作后si,di的增减
DF=0,每次操作后si,di递增 DF=1,每次操作后si,di递减
传送字节串指令
格式:movsb 相当于mov es:[di], byte ptr ds:[si]
功能:将ds:si指向的内存单元中的字节送入es:di指向的单元中,然后根据DF的值,将si和di进行递增或递减
传送字串指令
格式:movsw 相当于mov es:[di], word ptr ds:[si]
功能:将ds:si指向的内存单元中的字送入es:di指向的单元中,然后根据DF的值,将si和di进行递增2或递减2 两个指令可以和rep配合使用
格式:rep movsb/movsw
相当于:s: movsb/movsw loop s
rep的作用:根据cx的值,重复执行后面的串传送 rep movsb可以循环实现(cx)个字符的传送
8086CPU提供下面两条指令对DF位进行设置 cld指令:将DF置0 std指令:将DF置1
pushf和popf
格式:pushf
功能:将标志寄存器的值压栈
格式:popf
功能:从栈中弹出栈顶数据,送入标志寄存器 上面的两条指令可以直接访问标志寄存器
标志寄存器在Debug中的表示
标志 值为1的标记 OF OV SF NG ZF ZR PF PE CF CY DF DN 值为0的标记 NV PL NZ PO NC UP