您的位置:首页 > 其它

汇编语言学习笔记(十一)标志寄存器

2014-07-17 15:18 357 查看
flag寄存器(传送指令不会影响标志寄存器)

flag的1、3、5、12、13、14、15位在8086cpu中没有使用,不具有任何含义。而其余的都有特殊含义

ZF:0标志位

如果结果为0,则ZF=1

如果结果非0,则ZF=0

PF:奇偶标志位

如果1的个数为偶数,则PF=1,否则为0

SF:符号标志位

结果为负数,SF=1,否则为0

CF:进位标志位

OF:溢出标志位

adc:带进位的加法指令,利用了CF位上记录的进位值

sbb:带借位减法指令,利用了CF位上记录的借位值

cmp:是比较指令,功能相当于减法指令,不保存结果。只关心哥哥标志寄存器发生的相应变化

检测比较结果的条件转移指令:

检测那些标志位:被cmp影响的那些标志位

je 相等则转移 只检测ZF的值

jne 不相等

jb 低于

jnb 不低于

ja 高于

jna 不高于

j jump e equal n not b below a above

以上都是cmp进行无符号比较

实例:如果(ah)=(bh)则(ah)=(ah)+(ah),否则(ah)=(ah)+(bh)

结果:

cmp ah,bh

je s

add ah,bh

jmp short ok

s:add ah,ah

ok:ret

DF和串传送指令

DF:方向标志位

DF=0:每次操作后si,di递增;否则递减

movsb:将ds:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器DF位的值,将si和di递增或者递减

movsw:以字的单位传送

一般都和rep指令配合使用

rep movsb:

rep的作用是根据cx的值,重复执行后面的字符串送指令

8086提供了两条指令对DF继续努力设置

cld:设置DF=0 clear

std:设置DF=1 set

pushf和popf

将标志寄存器的值压入栈

从栈中弹出值放入标志寄存器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: