为什么设置为小于ALU操作

Jie*_*eng 5 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(in slt $t1, A, B)的结果为负,则ALU应该输出1 .

use*_*653 7

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

现在,如果这只是计算的符号位A - B将是多余的,但在那里考虑的情况A = -2147483648 = 0x80000000B = 1 = 0x00000001这里相减的结果将是0x7fffffff = 2147483647,它不具有最显著位设置即使A < B.

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

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

您可能指的"零"线是 - 在本书讨论的架构中 - IIRC仅用于与分支相等/分支不相等的比较.SLT/SLTI在手上将其结果存储在寄存器中.