首页 > 解决方案 > 对 mips I-Type 指令语法感到困惑

问题描述

对不起这个非常愚蠢的问题。但是我一整天都在阅读我的教科书,它变得非常混乱。

我想用 MIPS I-type 指令澄清一些与语法相关的问题。

我明白这样的说明

addi $21, $22, -50

是可能的,并且立即值被解释为十进制(2s 补码)。

但是我可以写成addi $21, $22, 0xF1DF?立即值是十六进制的吗?

这让我想到了我的下一个问题andi $10, $11, 0xFFFFand ori $8, $0, 0x0FA5。我知道这两个代码是正确的。

但是我可以写成andi $10, $11, 120这样ori $8, $0, -16立即值是十进制的吗?如果可能,它是解释120为十六进制还是将十进制转换120为十六进制,相当于78十六进制。

我很困扰。

标签: mipsmips32

解决方案


您可以用 10 进制或十六进制表示立即数。要表示一个 hedacimal 值,您需要0x在数字前使用前缀(例如0x1016以 10 为基数)。如果你不在0x数字前使用前缀,汇编器将假定数字是十进制表示法。

使用您的示例,如果您想添加120(以 10 为底),您应该像 soaddi $10, $11, 120或 like so对指令进行编码addi $10, $11, 0x78。汇编器将产生相同的二进制指令0x20000000。您可以使用此在线汇编器在此处亲自尝试。


推荐阅读