【问题标题】:Overflow/carry flag in MIPSMIPS 中的溢出/进位标志
【发布时间】:2018-11-11 19:12:25
【问题描述】:

我搜索了一下,没有找到任何可以正确解释这一点的东西。

在 MIPS 中,您可以使用 addaddu 进行添加。主要区别在于addu 不会产生溢出异常。

假设我们有这个二进制文件(我使用 4 位,尽管 MIPS 为 32 以进行简化):

0111

如果我们添加1,它将变为1000

add 指令存在溢出且无进位,因为正 7 变为负 1(假设 MIPS 中的二进制补码)。这也会产生溢出异常。

addu 没有溢出和进位,因为一切都按预期进行。

现在假设你有这个二进制文件:

1111

如果我们添加1,它将变为0000

add 指令应该不会溢出,因为负 1 变成了 0。那么进位标志呢,它会变成 1 吗?

addu 指令会发生什么?是否认为溢出,因为 15 变成了 0?我知道没有溢出异常,但是溢出标志会发生什么?它被设置为1吗?进位标志呢?

【问题讨论】:

  • 你指的是哪个进位标志? MIPS 架构中没有状态寄存器。
  • @Michael 哦,我以为有。我的错。
  • 仅供参考,1000 在二进制补码中是 -8,而不是 -1

标签: overflow mips carryflag


【解决方案1】:

MIPS 架构中没有进位标志。

当结果的符号与可能发生的预期符号不同时,会发生加法溢出异常:

  • 当您将两个正数相加得到一个负数时
  • 当您将两个负数相加并得到一个正数作为结果时

所以是的,在您假设的 4 位 MIPS 0111+1 中会导致溢出,并激活相应的标志。

【讨论】:

    猜你喜欢
    • 2016-02-05
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多