带偏移量的 MIPS 32 lb 指令
MIPS 32 lb instruction with offset
我不明白为以前的作业问题给出的解决方案。
问题:执行以下指令后显示$R3
的内容
lb $R3, 13($R2)
初始值:
$R2 = 12(decimal)
$R3 = 14(decimal)
初始内存地址(十进制) -- 内容(十进制):
36 -- -18
32 -- 99
28 -- 177
24 -- -14
解决方案:
$R3 = OxFFFFFFFF
我不明白他是怎么得出这个答案的。感谢您的帮助!
如果您 google mips 指令集,您会看到 lb 是加载字节。
lb $t, offset($s)
表示
$t = MEM[$s + offset]; advance_pc (4);
这里假设 MEM 是 32 位宽,但那是在核心的边缘,我们不关心它是如何实现的。
您最初的定义是十进制,这可能是故意造成学习痛苦。然后都是可以适合字节大小的值,这可能意味着字节地址。
r2 是 12 然后我们加上 13 得到未定义的十进制地址 25。如果我们采用您在评论中提到的概念,即这些是单词大小的定义。然后 24 = -14 表示在地址 0x18(顺便说一句,这是一个有效的 8 位、16 位、32 位和 64 位对齐地址)我们有地址 0x18 的值 0xFFFFFFF2,我们在 0x19 之后。因此,取决于字节顺序,可能是 0xooFFoooo 字节或 0xooooFFoo 字节,在任何一种情况下都是 0xFF。
那你要知道lb符号是extends。 0xFF 的 msbit 是 1,因此其余位将是我们加载 0xooooooFF 然后将其符号扩展为 0xFFFFFFFF 的位。然后将其保存在 r3 中。 (并将程序计数器递增到下一条指令)。
换个角度看,既然你给了我们 0xFFFFFFFF 的答案,那不是一个字节值,所以 lb 必须是符号扩展并且读取的值必须是 0xFF。如果它没有签名扩展,我们将期望 0x000000XX,其中 XX 是我们正在寻找的字节。 And or xx 从字节大小的二进制补码角度来看是正的,那么符号扩展就不明显了。
r3 的初始值无关紧要,可能会误导您。
我不明白为以前的作业问题给出的解决方案。
问题:执行以下指令后显示$R3
的内容
lb $R3, 13($R2)
初始值:
$R2 = 12(decimal)
$R3 = 14(decimal)
初始内存地址(十进制) -- 内容(十进制):
36 -- -18
32 -- 99
28 -- 177
24 -- -14
解决方案:
$R3 = OxFFFFFFFF
我不明白他是怎么得出这个答案的。感谢您的帮助!
如果您 google mips 指令集,您会看到 lb 是加载字节。
lb $t, offset($s)
表示
$t = MEM[$s + offset]; advance_pc (4);
这里假设 MEM 是 32 位宽,但那是在核心的边缘,我们不关心它是如何实现的。
您最初的定义是十进制,这可能是故意造成学习痛苦。然后都是可以适合字节大小的值,这可能意味着字节地址。
r2 是 12 然后我们加上 13 得到未定义的十进制地址 25。如果我们采用您在评论中提到的概念,即这些是单词大小的定义。然后 24 = -14 表示在地址 0x18(顺便说一句,这是一个有效的 8 位、16 位、32 位和 64 位对齐地址)我们有地址 0x18 的值 0xFFFFFFF2,我们在 0x19 之后。因此,取决于字节顺序,可能是 0xooFFoooo 字节或 0xooooFFoo 字节,在任何一种情况下都是 0xFF。
那你要知道lb符号是extends。 0xFF 的 msbit 是 1,因此其余位将是我们加载 0xooooooFF 然后将其符号扩展为 0xFFFFFFFF 的位。然后将其保存在 r3 中。 (并将程序计数器递增到下一条指令)。
换个角度看,既然你给了我们 0xFFFFFFFF 的答案,那不是一个字节值,所以 lb 必须是符号扩展并且读取的值必须是 0xFF。如果它没有签名扩展,我们将期望 0x000000XX,其中 XX 是我们正在寻找的字节。 And or xx 从字节大小的二进制补码角度来看是正的,那么符号扩展就不明显了。
r3 的初始值无关紧要,可能会误导您。