求解答如何判断OF标志位

1,两个负数相与如何判断?
2,两个同号的数相加如何判断?
3,两个异号的数相加如何判断?

简单来说,比如8位数表示范围是-128~127
不管什么数相加还是相减,你先把二进制转换为10进制,然后人为计算,结果在这个范围之外,OF=1,否则OF=0
注意,负数转换为十进制,前面加上负号,符号位以外取反+1

先要理解负数在内存中是2'补码存储的,也就是正数的二进位码取反加1得到。举个栗子:

8-bit数值+8,和 -8相加:

+8  0000 1000
-8  1111 1000 <= +1<1111 0111<=+8取反
+---------------
=   0000 0000

参考《VirtualNES虚拟红白机》The force: Forth 语言部分 http://blog.csdn.net/winsenjiansbomber/article/details/50747947

负数和正数的运算都是加法器的运算,这种情况下,如果P>|N|就会产生溢出。

两个同号的数相加如果值超出范围OF=1。

两个负数相与就是两个的与运算,如果结果为0那么 ZF=0。

“负数和正数的运算都是加法器的运算,这种情况下,如果P>|N|就会产生溢出。”这个描述有问题,进位不等于于溢出,负数与正数相加是典型的情况,经常出现高位有进位,却没有溢出。

谢谢解答,我查到的答案,OR、AND指令影响标志位PF、SF、ZF,使CF=0、OF=0