【问题标题】:Best solution: add or addu最佳解决方案:添加或添加
【发布时间】:2014-07-07 18:22:58
【问题描述】:

将以下 C 代码转换为 MIPS 程序集的最佳解决方案是什么?

x = A[i];

请注意x ⇨ $t0A[] ⇨ $s0i ⇨ $s1

add:

sll $t0, $s1, 2
add $t0, $t0, $s0

addu:

sll $t0, $s1, 2
addu $t0, $t0, $s0

我知道addaddu 之间的difference,但我不明白何时使用其中一个。

【问题讨论】:

  • 如果您了解区别,那么您应该了解何时使用它们。是否要在溢出时设置陷阱?
  • 我不知道。如果我想要一个陷阱,我必须根据什么选择?
  • 如果需要询问是否需要溢出陷阱,则不需要溢出陷阱。

标签: assembly add mips memory-address


【解决方案1】:

C 代码不会在整数溢出时抛出异常。所以组装也不应该。使用addu

【讨论】:

    【解决方案2】:
    MIPS 中的

    addsigned 溢出时引发异常。
    假设您要索引到一个大数组,并且该数组在(signed)INTPTR_MAX(signed)INTPTR_MIN 之间交叉。如果您使用add,这将引发异常,尽管您可能已经在数组范围内。
    在数组索引中您更可能需要注意的是 unsigned 溢出,从 (unsigned)UINTPTR_MAX 跨越到 zero,但 MIPS 无法帮助您,AFAIK。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2021-06-10
      • 2011-11-07
      相关资源
      最近更新 更多