关于8086 CPU中的溢出与进位判断 (转)

Posted on 2011-05-13 21:28  Kanone  阅读(1909)  评论(0编辑  收藏  举报

http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1012&qID=28227

针对有符号数,CPU只要在运算结束后比较一下最高位符号位是否产生变化就能判定溢出情况了!
比如:
 11110000 
+10001000 
-——————                         
 01111000 即78h
运算前,两个操作数最高位都为1,证明都是负数,而运算结果的最高位为0,符号位产生了变化,这就证明运算溢出了!
当然这种判断只局限于(正数+正数)和(负数+负数)的运算,因为(正数+负数)是不会产生溢出的,所以CPU根本就不用进行判断。

第二个问题:
CPU在运算过程中是不区分有符号数和无符号数的,它只知道把所有的位都给加一遍,当然也包括所谓的符号位。运算结果出来以后再使用上面说到的办法判断是否溢出和进位了,设置相应的OF和CF!