标志位AF与CF的区别(涉及BCD码)

BCD码

BCD码
全称二进制编码的十进制。用4位二进制数来表示1位十进制数中的0-9这10个数码。

BCD码分类
有权BCD码:有8421码、2421码、5421码;
无权BCD码:有余3码,余3循环码等。

8421BCD码
8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。和四位自然二进制码不同的是,它只选用了四位二进制码中前10组代码,即用0000~1001分别代表它所对应的十进制数,余下的六组代码不用。

压缩BCD码

压缩BCD码:用一个字节表示两位BCD码,高位表示十位数BCD码,低位表示个位数BCD码。

非压缩BCD码

非压缩BCD码:用一个字节表示一位BCD码,高位为0,低位为BCD码。

例子
十进制数12
压缩8421BCD码表示为0001 0010
非压缩BCD码表示为0000 0001 0000 0010

AF、CF标志位

AF辅助进位标志:在进行算术运算的时候,如果低字节中低4位产生进位或者借位的时候,则置1,否则置0。即当两个字节相加时,如果从第3位向第4位形成了进位,则AF=1
CF进位标志:在进行算术运算的时候,如果最高位产生进位或者借位的时候,CF置1,否则置0。在移位类指令中,CF用来存放移出的代码。

AF与CF的区别
共同点:AF跟CF一样是进位(借位)的标志寄存器
不同点:8位运算或16位运算时如果有进位或借位CF就等于1,而4位运算时如果有进位或借位AF就等于1。AF是为了在BCD码运算时,要用到的,因为BCD码是以4位表示的。

例1:
两个8位寄存器相加,AL=1000 0001,BL=1000 0011
结果CF=1,AF=0 因为AL和BL的低四位相加没有进位

例2:
MOV BL,85H
MOV AL,17H
ADD AL,BL
DAA
(AL)=02H, (BL)=85H, SF=0, ZF=0, PF=0, CF=1, AF=1, OF=0

85H=1000 0101
17H=0001 0111
后四位相加有进位(第三位向第四位进1)所以AF=1

发布了2 篇原创文章 · 获赞 0 · 访问量 152

猜你喜欢

转载自blog.csdn.net/weixin_43508546/article/details/103432065