标志寄存器
1>
特殊寄存器
作用
1用来存储相关指令的某些执行结果
2用来为cpu执行相关指令提供行为依据
3用来控制cpu的相关工作
flag和寄存器不一样,区别
寄存器是具有一个含义
flag寄存器是按位起作用的,每一位都有专门的含义,记录特定的信息
标志位:
1为真,表示肯定
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
of df if tf sf zf af pf cf
zf
记录指令执行的结果
mov ax,1
add ax,0 ;ax为0
结果为0,zf=1,表示结果是0
zf=0,表示结果非0
指令对标志寄存器的影响,我们在使用一条指令的时候,要注意这条指令的全部功能
pf
奇偶标志位
记录相关指令执行后,其结果所有二进制中1的个数是否位偶数
num.1=偶,pf=1
num.1=奇,pf=0
sf
符号标志位,记录相关指令执行后,其结果是否为负
result=-,sf=1
result=+,sf=0
cpu对有符号数运算结果的一种记录,记录数据的正负
当数据当作有符号:通过sf来得知正负
当数据当作无符号:sf无意义
cf
进位标志
of
2>
abc指令
abc 操作对象1,操作对象2
操作对象1=操作对象1+操作对象2+cf
3>
sbb指令
sbb 操作对象1,操作对象2
操作对象1=操作对象1+操作对象2-cf
4>
cmp
比较指令
功能相当于减发指令
格式
cmp 操作对象1,操作对象2
功能:计算操作对象1-操作对象2,但并不保持结果,仅仅根据计算结果对标志位进行设置
(ax)=(bx) zf=1
(ax)!=(bx) zf=0
(ax)<(bx) cf=1
(ax)>=(bx) cf=0
(ax)>(bx) 结果又不为0,cf=0且zf=0
(ax)<=(bx) cf=1或zf=1
cpu执行cmp两种含义
无符号运算
有符号运算
5>
检测比较结果的条件转移指令
大多数条件转移指令检测标志寄存器的相关标志位
根据结果是否更改ip
通常检测cmp影响的标志寄存器,通常和cmp配合使用
je 等于则转移 jump equal
jne 不等于则转移 jump not equal
jb 低于则转移 below
jne 不低于则转移
ja 高于则转移 above
jna 不高于则转移
cmp指令于其他比较结果相关的有条件转移指令,在联合使用时
不必考虑cmp指令对相关标志位的影响,和je等指令对相关标志位的检测
6>
df 和串传送指令
df方向标志位,控制每次操作后s, di的增减
df=0 ,每次操作后si,di 递增
df=0,每次操作后si,di递减
串传送指令movsb
格式movsb (8位一次,字节单位)
((es)*16+(di))=((ds)*16+(si))
df=0,(si)=(si)+1
+ (di)=(di)+1
df=1,(si)=(si)-1
(di)=(di)-1
movsw
movsw的功能是将ds:si之乡的内存字单元中的word送入es:di.然后根据标志寄存器df位,si,di递增或递减
一般movsb movsw和rep配合使用
rep movsb
汇编语言描述
s:
movsb
loop s
对df位进行设置
cld 将df=0
dtd 将df=1
例如:
mov ax,data
mov ds,ax
mov si,0
mov es,ax
mov di,5
mov cx,5 ;rep循环计数依靠cx ,d4 d3 d2 d1 d0
cld
rep movsb
7>pushf popf
pushf功能是将标示寄存器的值压栈,
popf 功能从栈中弹出数据,送入标志寄存器
为直接访问标志寄存器提供了一种方法
mov ax,0
push ax
popf
mov ax,0fff0h
add ax,0010h
pushf
pop ax
and al,11000101b
and ah,00001000b
8>
标志寄存器在debug中的表示
nv up ei pl nz na po nc
阅读(904) | 评论(2) | 转发(0) |