微机原理--指令系统--判断状态标志位!尤其是OF和CF!!

如何判断状态标志位??OF和CF到底怎么计算????

之前,一直被OF和CF这对神仙眷侣搞得云里雾里,总之三个字:看不懂!!!

不过不会也是要整滴~不然越拖越多,今天偶然发现其中的奥秘,不过也可能是以前看书不太仔细吧!哈哈!正文开始:

先给出一个例题

MOV AL , 7EH
ADD AL , 5BH
执行完这两条指令后,状态标志位的状态分别为??

接下来,傻瓜式教学,仔细看一定会:
7EH=0111 1110B
5BH=0101 1011B
两者相加得D9H=1101 1001B

八位数加八位数得到一个八位数

好的,我相信大家的实力,二进制是一定会计算的对吧!
然后先判断其他的状态位:
AF:D3位向D4位有进位吗? 我们计算的有,于是AF=1
PF:低八位的所有位数中1的个数是偶数吗? 我们可以数一共有5个1,是奇数个,所以PF=0
SF:最高位是1吗? 我们看到D9H的最高位是1,所以SF=1
ZF:运算的结果等于0吗? 我们计算的D9H不等于0,所以ZF=0

重头戏来了:

CF:(简单方案)最高位向前有进位吗? 我们没有看到进位,所以CF=0

但是:仅仅如此就是忽视了它最本质的意思,CF是无符号数进借位标志。
这一句是什么意思呢?就是说计算的结果要和八位数中的最大值相比,看他有没有进位!怎么相比?八位数中的最大值是多少?FFH!!!D9H>FFH吗?不大于!所以结果没有超出标识范围,CF=0

OF:有溢出吗?

第一种方式:D9H作为有符号数为负!两个正数相加加成了负数,自然有溢出!所以OF=1
第二种方式:D6位向D7位是否有进位,D7位向D8位是否有进位?同时进位或者同时不进位则OF=0;如果只有一个进位OF=1.如题:因为只有D6位向D7位进位,所以OF=1.
第三种方式:OF是有符号数溢出标志!这是什么意思!看他有没有溢出呀,最大的有符号数是多少?7FH!D9H>7FH,所以OF=1.然后你说,不对啊,有符号数D9H=-59H,怎么就大于7FH了?我们将它这样理解:虽然有符号数的最大数为7FH,但是计算机并不能识别符号位,因此还是会将其看成无符号数,只是比较的时候比较这两个数,于是说D9H>7FH.

综上所述:
AF=1;CF=0;OF=1;PF=0;SF=1;ZF=0

个人的一点理解,如果有不对的地方希望大神指正。

你可能感兴趣的:(微机原理--指令系统--判断状态标志位!尤其是OF和CF!!)