为什么被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 .
如果A小于b,则应该输出1,否则输出0.这通常需要计算A - B,你需要ALU.
现在,如果这只是计算的符号位A - B将是多余的,但在那里考虑的情况A = -2147483648 = 0x80000000和B = 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在手上将其结果存储在寄存器中.