如何检测溢出标志?

时间:2014-05-30 11:28:00

标签: assembly binary flags

在下面的问题中,我想知道为什么OVERFLOW标志设置为1。 我知道只有在添加两个相同符号的数字时才会发生溢出 得到一个不同的标志。 这是本书解决方案中的错误还是什么?

enter image description here

1 个答案:

答案 0 :(得分:0)

那些看起来像8位无符号数。结果是9位,这会溢出8位寄存器(现在很难找到)。如果这些是带符号的数字,它们确实会有不同的符号(-1和1)。但是,图像显示的是9位总和,而不仅仅是0(甚至是00000000)。所以那些是无符号的8位或者#34;这本书中的错误"。注意半进位位已设置。这表明正在使用1/2位16位寄存器。这种情况一直都在发生。

关于标志不同使得溢出不可能的说法 - 只是重述了关于添加2个相同位大小的数字的简单关系,其中一个是正数,另一个是负数。最大的8位正数是127.最大的负8位数是-128。进行数学计算相对容易。从127开始,并添加每个可能的负数... 127 + -1 = 126,127 + -2 = 125,127 + -3 = 124,... 127 + -126 = 1,027 + -127 = 0 ,127 + -128 = -1。这些总和都不大于127或小于-128,因此不会发生溢出。您可以通过将每个正数添加到-128来完成校样。