为什么设置为小于ALU操作

时间:2011-10-22 08:09:33

标签: assembly mips

为什么slt被视为ALU操作?我以为它只会减去然后从ALU获得* Z * ero输出?

 ALU control lines |     Function
-------------------+-------------------
       0000        |       AND
       0001        |       OR
       0010        |       add
       0110        |     subtract
       0111        | set on less than

如果A - B(在slt $t1, A, B中)的结果为负,则ALU应该输出1。

1 个答案:

答案 0 :(得分:7)

如果A小于b则输出1,否则输出0。这通常需要计算A - B,你需要ALU。

现在,如果仅计算A - B的符号位,那将是多余的,但考虑A = -2147483648 = 0x80000000B = 1 = 0x00000001的情况,此处减法结果为{{1} },即使0x7fffffff = 2147483647,也没有设置最重要的位。

由于该表来自“Patterson,David A .; Hennessy,John L。:Computer Organization and Design”,我将向您介绍第3章,特别是涉及“加法和减法”的小节(3.3中的第2版​​,第4版3.2)。它有一个处理溢出/下溢的表,可以查找转角情况。

还记得ALU结果是32位,所以即使结果只是减法结果的符号位,它仍然需要一个不同的ALU操作码来表示应该返回与结果位连接的31个零而不是而不是完整的减法结果。

你可能指的是“零”线 - 在本书讨论的架构中 - IIRC仅用于与分支相等/分支不相等的比较。手上的A < B将其结果存储在寄存器中。