【问题标题】:How to detect overflow flag?如何检测溢出标志?
【发布时间】:2014-07-20 03:35:29
【问题描述】:

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

【问题讨论】:

  • 但是符号不同时不可能产生溢出!你能解释一下你的答案吗?
  • 将 1 添加到 -1 不是溢出的情况。携带是,但不溢出。
  • 所以书中又一个错误解决办法>>>感谢您的回复。
  • 进位标志又名无符号溢出。有符号溢出是不同的。进行无符号溢出,有符号溢出是msbit的进位和进位不同。
  • 如果你想使用程序集标志然后...请有一些程序集并指定处理器。

标签: assembly binary flags


【解决方案1】:

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

关于符号不同使得溢出不可能的陈述 - 只是重申关于添加两个相同位大小的数字的简单关系,其中一个是正数,另一个是负数。最大的 8 位正数是 127。最大的负 8 位数是 -128。做数学相对容易。从 127 开始,添加所有可能的负数... 127+-1=126, 127+-2=125, 127+-3=124, ... 127+-126=1, 127+-127=0 , 127+-128=-1。没有一个总和大于 127 或小于 -128,因此不会发生溢出。您可以通过将每个正数添加到 -128 来完成证明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2015-08-28
    相关资源
    最近更新 更多