如何通过寄存器值判断MIPS addu指令MSB进位及可用指令
MIPS
addu指令最高有效位进位判断方法 仅通过寄存器内容判断的逻辑
addu是32位无符号加法指令,执行逻辑为 $t2 = ($t1 + $t0) mod 2^32,最高有效位(MSB)进位的本质是两个加数相加的实际结果大于等于2^32,超出了32位寄存器的存储范围。
此时寄存器$t2中存储的模运算结果,必然小于两个加数中的任意一个,因此可以直接通过比较寄存器值判断:
- 若
$t2 < $t1或$t2 < $t0,则说明MSB发生了进位 - 若以上条件均不成立,则MSB没有产生进位
举个验证示例:假设$t1 = 0xf0000000,$t0 = 0x30000000,二者相加的实际结果为0x120000000,$t2中存储的截断后值为0x20000000,显然0x20000000 < 0xf0000000,符合进位判断条件。
可实现该判断的相关指令
MIPS指令集提供了sltu(无符号比较小于置1)指令,可以单周期完成该判断,不需要额外的分支逻辑,使用示例如下:
# 先执行原加法指令 addu $t2, $t1, $t0 # 检测进位,结果存在$t3中 sltu $t3, $t2, $t1
执行后如果$t3的值为1,代表addu执行时产生了MSB进位;如果$t3的值为0则没有进位。
内容的提问来源于stack exchange,提问作者user1286550
相关产品推荐
相关产品推荐

