什么是;将立即数扩展到32位“;在MIPS中是什么意思?
我正在阅读MIPS数据路径中的指令解码(ID)阶段,我得到了以下引用:“一旦操作数已知,读取实际数据(从寄存器)或将数据扩展到32位(立即)。” 有人能解释一下“将数据扩展到32位(立即)”部分是什么意思吗?我知道寄存器都包含32位,我知道什么是立即数。我只是不明白为什么需要将立即数从26位扩展到32位什么是;将立即数扩展到32位“;在MIPS中是什么意思?,mips,cpu-architecture,machine-code,sign-extension,immediate-operand,Mips,Cpu Architecture,Machine Code,Sign Extension,Immediate Operand,我正在阅读MIPS数据路径中的指令解码(ID)阶段,我得到了以下引用:“一旦操作数已知,读取实际数据(从寄存器)或将数据扩展到32位(立即)。” 有人能解释一下“将数据扩展到32位(立即)”部分是什么意思吗?我知道寄存器都包含32位,我知道什么是立即数。我只是不明白为什么需要将立即数从26位扩展到32位 谢谢 26位直接指令仅在跳转指令中,并且不会将符号或零扩展到32位,因为它们不是要加/减的位移 具有16位立即数的I型指令是不同的 addi/addiu立即数是符号扩展的(通过将立即数的顶部/
谢谢 26位直接指令仅在跳转指令中,并且不会将符号或零扩展到32位,因为它们不是要加/减的位移 具有16位立即数的I型指令是不同的
/addi
立即数是符号扩展的(通过将立即数的顶部/符号位复制到所有更高的位)。addiu
这允许2的补码从
开始<代码>+2^15-1待编码。-2^15
(0xFFFF8000到0x00007FFF)
/ori
/andi
布尔立即数是零扩展的(通过将所有高位设置为零)xori
这允许
。0.中的无符号/2的补码。。2^16-1要编码的
(0x00000000到0x0000FFFF)
/lw
和其他加载/存储指令使用的reg+imm16寻址模式中的偏移量sw
- 相对分支(
PC+=imm16在32位CPU上,您执行的大多数操作(如加、减、解引用指针)是用32位数字完成的。当你有一个位数较少的数字时,当你想在其中一个运算中使用该数字时,你需要以某种方式决定其他的位数。决定这些新的高位是什么的行为称为“扩展”
假设你只是在做一个标准的零扩展或符号扩展,扩展是非常便宜的。但是,它确实需要一些电路,所以有必要在MIPS数据路径的描述中提到它。也可以使用符号扩展:slti[u]即时。还有带有即时的陷阱指令,甚至更多的内容在MIPS64上进行了符号扩展(大多数32位ALU指令和一些更新的仅限MIPS64的指令)。