您的位置:首页 > 其它

<学习笔记>王爽汇编语言__标志寄存器

2011-09-22 12:12 543 查看
CPU内部的寄存器中,有一种特殊的寄存器,具有以下3种作用。

(1)用来存储相关指令的某些执行结果

(2)用来为CPU执行相关指令提供行为依据

(3)用来控制CPU的相关工作方式

这种寄存器在8086CPU中被称为标志寄存器。8086CPU的标志寄存器有16位,其中储存的信息常常被称为程序状态字(PSW),标志寄存器简称为flag

flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。其中1,3,5,12,13,14,15位在8086CPU中没有使用,不具有任何意义。

1.ZF标志

flag的6位是ZF,零标志位。它记录相关指令执行后,其结果是否为0。如果结果为0,那么ZF=1;如果结果不为0,那么ZF=0;

2.PF标志

flag的第2位是PF,奇偶标志位,它记录相关指令执行后,其结果的所有bit位中1的个数是为为偶数。如果1的个数为偶数,pf=1,如果为奇数,pf=0;

3.SF标志

flag的第7位是SF,符号标志位。它记录相关指令执行后,其结果是否为负。如果为负,sf=1,如果非负,sf=0;

4.CF标志

flag的第0位是CF,进位标志位。一般情况,在进行无符号运算的时候,它记录了运算结果的最高有效位向更高进位的值,或从更高位的借位值。

5.OF标志

flag的第11位是OF,溢出标志位,一般情况下,OF记录了有符号数运算的结果是否发生了溢出。如果发生溢出,OF=1,如果没有,OF=0。

6.adc指令

adc是带进位加法指令,它利用了CF标志位上记录的进位值。

指令格式:adc 操作对象1 , 操作对象2

功能:操作对象1 = 操作对象1 + 操作对象2 + CF

比如指令 adc ax , bx实现的功能是:(ax) = (ax) + (bx) + CF

例:

mov ax , 2
mov bx , 1
sub bx , ax
adc ax , 1
执行后(ax)= 4,相当于计算:(ax) + 1 + CF = 2 + 1 + 1 = 4

mov al , 1
add ax , ax
adc ax , 3
执行后,(ax) = 5,相当于计算:(ax)+ 3 + CF = 2 + 3 + 0 = 5

7.sbb指令

sbb指令时带借位减法指令,它利用CF位上记录的借位器

指令格式:sbb 操作对象1,操作对象2

功能:操作对象1 = 操作对象1 - 操作对象2 - CF

比如指令:sbb ax , bx实现的功能是:(ax)= (ax)- (bx) - CF

8.cmp指令

cmp指令是比较指令,cmp的功能相当于减法指令,只是不保存结果。

cmp指令格式:cmp 操作对象1 , 操作对象2

功能:计算操作对象1 - 操作对象2,但并不保存结果,仅仅根据计算结果对标志寄存器产生影响。

9.pushf和popf

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