标志寄存器2015.1.19

一、

 1、进位标志寄存器CF(Carry Flag):如果运算结果的最高位产生了一个进位或借位,那么其值为1,否则为0

MOV AL,0xEF                                                      MOV AL,0xFE

ADD AL,2                                                             ADD AL,2

先在EAX中放入5555FFFF再加1,EAX变成55560000,此时看EAX首位是5没有进位,所以CF是0

同理把EAX的后四位AL放上最大的数FF再加一,此时进位,CF为1

2、奇偶标志PF:用于反应运算结果中“1”的个数的奇偶性,若“1”的个数为偶数,则PF值为1,反之为0

MOV AL,3      EAX后两位由00变成03

 

ADD AL,3     在03基础上加3变06,06的二进制是0110,有2个1是偶数,所以PF为1

 

ADD AL,2    加2后由06变08,08二进制是1000,只有一个1,所以PF为0

 注意!判断1的个数是看最低有效字节

AX中MOV一个0803二进制是0000 1000 0000 0011,加一后变成0000 1000 0000 0100,(注意)此时是看最低有效字节即看04的二进制0000 0100中有多少个1才判断P位为多少

此时只有一个1,P位为0

再加一个1,为05,二进制是0000 0101,有两个1,P位为1

 

 

 

3、辅助进位标志AF

 

(1)若是32位二进制转换成8位16进制:FFFFFFFF,则观察从前往后数第5位进不进位,进位则A位为1

输入32位的数55EEFFFF再加2变成55EF0001,第五位F已进位,则A位是1

(2)若是16位二进制转换成4位16进制:FFFF,则观察从前往后数第三位进不进位,进位则AF为1

 

5EFE加2变成5F00,已进位则A为1

 4、零标志ZF:

XOR EAX,EAX             EAX与EAX异或结果都是0,所以也是清零效果,运算结果为0,Z位为1

XOR EAX,EAX会影响标志位,与MOV EAX,0(也可以把EAX变成0)相比MOV指令不修改寄存器的值

5、符号标志SF:(要注意数据宽度,最高位由数据宽度决定,如EAX是32位二进制就有8位16进制,但是AL只有2位16进制只占最后两位,00000052看进位是看5的位置)

MOV AL,7F

ADD AL,2                7F的二进制是01111111,再加2要进位,首位(符号位)0会变成1,S位也会又0变成1(但是S位为1时只能说明最高位为1不能说明这个数一定是个负数)

(MOV指令不改变标志寄存器)

6、溢出标志OF:(与CF区别开,做无符号运算时关注的CF,有符号运算关注OF)

 

 

 根据上面的圆:

正加正超过7F就为负数了,若为负数此时溢出(若是无符号数看相加有没有超过FF,超过则溢出)

负加负超过FF为正,此时溢出

 

 补充:

 

符号位是最前面的那位,两个数进行相加产生进位则为1,符号位后面一位为最高有效数值位没有产生进位为0,此时1和0进行异或得到O位为多少

 

posted @ 2024-09-26 15:58  Auriry  阅读(41)  评论(0编辑  收藏  举报