Assembly 符号扩展立即数与零扩展立即数之差

Assembly 符号扩展立即数与零扩展立即数之差,assembly,mips,Assembly,Mips,据我理解: 零扩展立即数-将从左起用零填充立即数,因此: ori $t1, $0, 0xF 结果: 0x0000000F 0xFFFFFFFF 符号扩展立即数-将用最高有效位填充立即数,因此: addi $t1, $0, 0xF 结果: 0x0000000F 0xFFFFFFFF 我明显错了,但是为什么? 你需要考虑即时的大小,它是MIPS中的16位。因此,您的立即数实际上是0x000F,因此MSB为零。为了说明符号扩展为负值,使用一个较大的

据我理解:

零扩展立即数-将从左起用零填充立即数,因此:

   ori $t1, $0, 0xF
结果:

    0x0000000F
   0xFFFFFFFF
符号扩展立即数-将用最高有效位填充立即数,因此:

    addi $t1, $0, 0xF
结果:

    0x0000000F
   0xFFFFFFFF

<>我明显错了,但是为什么?

你需要考虑即时的大小,它是MIPS中的16位。因此,您的立即数实际上是
0x000F
,因此MSB为零。为了说明符号扩展为负值,使用一个较大的具有15位集合的立即,如<代码> 0xFFFF>代码>,它确实被CPU解释为代码> 0xFFFFFFF< /COD>。

< P>您需要考虑MIPS的即时大小,即MIPS中的16位。因此,您的立即数实际上是
0x000F
,因此MSB为零。为了说明符号扩展为负值,使用一个较大的立即位,该位具有15位的集合,如<代码> 0xFFFF>代码>,这将确实被CPU解释为代码> 0xFFFFFFF< /COD> ./P>因为你需要考虑即时的大小,这是MIPS中的16位(我假设你使用MIPS,你忘了提……)因此,您的立即数实际上是
0x000F
,因此MSB是零。哦,好的。我想我正在寻找一个符号扩展可能导致问题的例子。使用一个更大的即时性,例如“代码> 0xFFFF < /代码>。@ JeSts可以把你的评论作为答案,所以我可以把它标记为正确答案。因为你需要考虑即时的大小,它是MIPS中的16位(我假设你使用MIPS,你忘了提……)因此,您的立即数实际上是
0x000F
,因此MSB是零。哦,好的。我想我正在寻找一个符号扩展可能导致问题的示例。使用更大的立即数,例如,
0xffff
@Jester可以将您的评论作为答案发布,这样我就可以将其标记为正确答案。