我不理解先前作业问题的解决方案。
问题:执行以下指令后显示$R3
的内容。
lb $R3, 13($R2)
初始值:
$R2 = 12(decimal)
$R3 = 14(decimal)
初始内存地址(十进制) - 内容(十进制):
36 -- -18
32 -- 99
28 -- 177
24 -- -14
解决方案:
$R3 = OxFFFFFFFF
我不明白他是如何得出答案的。任何帮助表示赞赏!
答案 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的初始值不相关,只是可能会让你失望。