具有偏移的MIPS 32磅指令

时间:2016-11-02 03:27:56

标签: assembly mips32

我不理解先前作业问题的解决方案。 问题:执行以下指令后显示$R3的内容。

lb $R3, 13($R2)

初始值:

$R2 = 12(decimal)
$R3 = 14(decimal)

初始内存地址(十进制) - 内容(十进制):

36 -- -18
32 -- 99
28 -- 177
24 -- -14

解决方案:

$R3 = OxFFFFFFFF

我不明白他是如何得出答案的。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

如果您使用Google mips指令集,则会看到lb是加载字节。

lb $t, offset($s)

装置

$t = MEM[$s + offset]; advance_pc (4);

假设MEM在这里是32位宽,但是它位于核心的边缘,它是如何实现的,我们不关心。

您首先是十进制的定义可能是故意创造学习痛苦的。然后,所有这些都可以适合字节大小的值,这可能意味着字节地址。

r2是12然后我们加13以得到未定义的十进制地址25。如果我们按照您在评论中提到的概念来看这些是字大小的定义。然后24 = -14表示地址0x18(BTW是有效的8位,16位,32位和64位对齐地址)我们对地址0x18有值0xFFFFFFF,我们在0x19之后。因此,取决于可能是0xooFFoooo字节或0xooooFFoo字节的字节顺序,在任何情况下都是0xFF。

然后你需要知道lb标志延伸。 msFF为0xFF是1,因此其余的位将是我们加载0xooooooFF然后将其扩展为0xFFFFFFFF的位。然后将其保存在r3中。 (并将程序计数器递增到下一条指令)。

从另一个角度来看,由于你给了我们0xFFFFFFFF的答案,那不是一个字节值,所以lb必须是符号扩展,读取的值必须是0xFF。如果它没有签名扩展,我们会期望0x000000XX,其中XX是我们正在寻找的字节。或者xx从字节大小的二进制补码角度看是正的,然后很明显有一个符号扩展。

r3的初始值不相关,只是可能会让你失望。