代码之家  ›  专栏  ›  技术社区  ›  Naman

MIPS中的div divu

  •  2
  • Naman  · 技术社区  · 6 年前

    div divu 在MIPS中。

    add addu ( link for same add在溢出时生成陷阱的唯一区别是addu没有

    但是div和divu的区别是什么,我的意思是我们这里不会真的溢出来。

    我尝试了以下的案例,但却得到了很奇怪的结果。我只加载了商(带mflo),这里是输出:

    num1 |  num2  | div num1 num2 (qoutient) | divu num1 num2 (qoutient) | 
    
    5    |   2    |            2             |            2              |
    
    -5   |   2    |           -2             |            2147483645     |
    
    5    |  -2    |           -2             |            0              |
    
    -5   |  -2    |            2             |            0              |
    

    有人能解释一下发生什么事的逻辑吗!!??

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mahmoud Al-Qudsi    6 年前

    一般来说 u 后缀的意思是“unsigned”。溢流阀是 副作用 签署 不应该溢出的算术,而允许无符号算术溢出或环绕而不触发任何异常。

    这意味着在查看陷阱之前,应该考虑有符号和无符号的差异。常客 div divu 操作将把操作数视为无符号整数。

    所有这些都意味着,使用相同的操作数可以得到不同的答案,这取决于 迪沃

    分割时 -5 通过 2 具有 ,您得到了您期望的答案:商为-2,余数为-1,这在 -2 * 2 + -1 = -5 . 但是当使用 它接受无符号整数 ,和 -5个 不是“负五”,而是 11111111111111111111111111111011 (这是两个 -2 4294967291 ,除以 2个 2147483645 .

    u型 命令的版本是将输入视为无符号整数,即使这不会导致溢出。为什么会这样?好吧,假设你确实想知道 4294967291/2 4294967291 在32位寄存器中,将产生一个被解释为 -5个 而不是 4294967291 . 注意这一点,让你使用所有32位的寄存器作为“数据”,而不是留出一位的符号。