简述OF与CF标志位分别表示什么含义? 哪一个用来表示有符号数溢出? 有符号数计算结果溢出判断规则是什么?

2025-03-18 20:46:05
推荐回答(3个)
回答1:

这里说的溢出,是指:数值过大,超出了编码所能表示的范围。

本质上,任何形式的计数,都是有可能溢出的。

在 Intel 设计的 CPU 中,有两个标志位:CF、OF(Over Flag)。

每当无符号数的运算出现了溢出,就会有 CF=1,翻译过来就是:进位。

每当有符号数溢出了,则 OF=1,称为 OVER,翻译过来就是:溢出


按照 Intel 的论调,就是说:

  所谓的“溢出”,是特指“有符号数的运算”。

  无符号数的溢出,就不叫溢出了,必须得叫做“进位”

这说法,有些“反人类”哈!

没有办法,人家是大佬嘛,说的对不对,也必须得这么执行。

---------------------

所以,在计算机领域:

  有符号数,才有可能出现溢出的。

    溢出的特征,是“符号位出错”。

      如:正数+正数,却得出了负数、 ... 。


  无符号数,是没有溢出的,它只有“进位借位”。

  而有符号数的运算,就不必关心进借位了。

回答2:

采用双符号位检测溢出的方法:在运算时,两个符号位同时参加运算,结果中如果两个符号位不同,则表示产生了溢出。若符号为01,则表示运算结果大于允许取值范围的最大正数,称为正溢出;若符号位为10,则表示运算结果是负数,其值小于允许取值范围的最小负数,称为负溢出。两个符号位的最高位仍为正确的符号。

回答3:

mov al,80h (al)=80h= 10000000B
add al,80h (al)=a0h= 100000000B 1 al=0<127所以of为 1
mov al,0FCH (al)=FCH= 11111100B 1 1
add al,05H (al)=101H= 100000001B 1 al=1<128所以OF为 1你是口算的吧,用计算机算算。
请参考