为什么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。
答案 0 :(得分:7)
如果A小于b则输出1,否则输出0。这通常需要计算A - B,你需要ALU。
现在,如果仅计算A - B
的符号位,那将是多余的,但考虑A = -2147483648 = 0x80000000
和B = 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
将其结果存储在寄存器中。