我正在设计一个MIPS处理器作为我的个人项目,目前我遇到了一个非常困惑的问题。我就是无法总结出在MIPS中何时使用符号扩展(signed-extend)和何时使用零扩展(zero-extend)。
我已经搜索了很多资源,大部分都说:
1) ADDI, ADDIU 都使用符号扩展。
2) ANDI, ORI, XORI 都使用零扩展。
然而,在以下这两个指令中,我开始感到困惑:
SLTIU/SLTI
在Imagination的《MIPS Architecture for Programmers Volume II-A: The MIPS instruction set Manual》第368页上写着:
它清楚地说明了16位立即数是符号扩展的。但我不理解以下陈述:
[0, 32767] 或最大值[max_unsigned-32767, max_unsigned] 是无符号范围的末端。
还有一些人说16位立即数是零扩展的,就像这样:
好的,有人能解释一下在MIPS中有符号指令和无符号指令之间的确切区别吗?
我已经搜索了很多资源,大部分都说:
1) ADDI, ADDIU 都使用符号扩展。
2) ANDI, ORI, XORI 都使用零扩展。
然而,在以下这两个指令中,我开始感到困惑:
SLTIU/SLTI
在Imagination的《MIPS Architecture for Programmers Volume II-A: The MIPS instruction set Manual》第368页上写着:
![Picture 1](https://istack.dev59.com/0idwI.webp)
[0, 32767] 或最大值[max_unsigned-32767, max_unsigned] 是无符号范围的末端。
还有一些人说16位立即数是零扩展的,就像这样:
![http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/pseudojump.html](https://istack.dev59.com/16mqE.webp)