【问题标题】:MIPS processor - why sub cause overflow and slt isn't?MIPS 处理器 - 为什么 sub 导致溢出而 slt 不是?
【发布时间】:2021-09-05 08:46:20
【问题描述】:

我正在为我的“电子计算器”考试做一些练习,我发现这个问题对我来说有点棘手。

如有必要,请参考绿卡,考虑 MIPS sub 和 slt 处理器的两条指令。假设两者都提供使用 ALU 来减去两个源操作数,特别是 slt 以便比较它们。请注意,在绿卡中,潜水员是如何导致溢出异常的 [cf.注意(1)],而这在 slt 的情况下不存在。你怎么解释呢?给出的理由的质量会影响响应的评估。

我试图找出答案,但我不确定它是否正确。我认为差异在于指令的目的,事实上,如果在子中我必须在寄存器中存储一个真正的“值”,我需要那个数字是正确的。另一方面,在 slt 中,我只需要了解这个数字是高于还是低于另一个......这是正确的吗?你们有更好的答案吗?

感谢您的宝贵时间。

【问题讨论】:

  • 这个问题似乎是由非英语为母语的人写的,或者(严重)从另一种语言翻译而来?我不能完全遵循它的语法。

标签: assembly mips


【解决方案1】:

我同意——slt 只需要在其操作数之间或多或少地回答,这可以在不发生溢出的情况下完成。

但我们可以进一步详细说明。

首先,让我们注意sub 需要发出溢出信号(通过抛出异常),因此除了仅 32 位减法运算之外,还使用了一些额外的逻辑来检测它。

因此,我们可以假设slt 除了仅仅 32 位减法之外还有一些额外的逻辑(它也与sub 不同,它捕获 0 或 1 结果,而不是直接捕获减法结果)。

sub 的这个额外逻辑可能是它对 33 位结果进行减法 - 如果 33 位与 32 位不同,则 32 位答案的幅度将是有损的,即溢出。

或者sub 的这个额外逻辑可能是它执行 32 位减法,并将输入的符号与结果的符号进行比较。如果输入的符号相同,则不会溢出,但如果输入的符号不同,并且结果的符号与被减数(第一个操作数)的符号不同,则发生溢出。

对于slt,可以像sub 那样检测溢出(在给出 33 位答案或比较 3 个符号方法的情况下计算 1 与 0 结果),但有一种非常简单的方法( a) 检测是否可能发生溢出,以及 (b) 在可能发生溢出时以简单的答案绕过子操作(或绕过子操作)。

所以,我会按照下表:

 minuend   subtrahend    can           slt
(source1)  (source2)   overflow?      result    
----------------------------------------------------------------
  pos         pos         No       sign of subtraction operation
  pos         neg         Yes      0 (sign of minuend), ignore subtraction
  neg         pos         Yes      1 (sign of minuend), ignore subtraction
  neg         neg         No       sign of subtraction operation

总而言之,如果输入的符号不同,则slt 结果是被减数的符号,否则 slt 结果是减法的符号(它不会溢出,因为输入的符号是一样)。

由于我们至少有 3 种实现策略可以在不存在溢出导致的错误风险的情况下获得答案,因此slt 没有必要引发异常。

(一个愚蠢的指令集架构确实可以为这条指令定义一个溢出异常,并在与sub相同的情况下抛出异常——这就像为slt的答案捕获减法结果的符号,而在这些情况下还会检测减法溢出和异常。)

【讨论】:

  • 比较 ISA 和 FLAGS 可能很有趣,比如 x86。 cmp 设置像 sub 这样的标志(包括有符号溢出和负(符号位)标志,以及 x86 的有符号条件,如 jl 是 SF≠OF。felixcloutier.com/x86/jcc。(x86 sub / cmp 不要捕获有符号溢出,因为它有一个 FLAGS 寄存器;只有 MIPS 有一个单独的 subu 指令。)
  • 间接相关:x86 有 ucomisd 用于 FP 比较,即使与未屏蔽 FP 异常的信号 NaN 一起使用也不会引发异常。还有comisd 会的。但是没有故障抑制usubsd,只有简单的subsd。稍微类似的原因:即使等价的减法会出错,您有时也希望比较能够工作。因为您需要找出有关输入的信息,所以这就是比较的重点。 (但在其他方面它与签名溢出完全不同)
猜你喜欢
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 2015-10-27
  • 2017-01-27
  • 2018-06-21
  • 2011-10-22
  • 1970-01-01
相关资源
最近更新 更多