在 MIPS 中加载和存储字节
Loading and storing bytes in MIPS
我正在为明天的考试而学习,我对 loading/storing 字节主题感到困惑。我有这个例子:
我完全不明白他是怎么得到红色答案的。有人可以帮我解释一下吗?
add $s3, $zero, $zero
这执行加法 $s3 = 0 + 0
,有效地将寄存器 $s3
设置为零值。
lb $t0, 1($s3)
这个 l 从内存中的一个位置加载一个 byte 到寄存器 $t0
。内存地址由1($s3)
给出,即地址$s3+1
。这将是内存中的第 0+1=1 个字节。由于我们有一个大端架构,我们读取 4 字节块 "big end first" 的字节。
byte: 0 1 2 3
00 90 12 A0
第0个字节是00
,第1个字节是90
。所以我们将字节 90
加载到 $t0
.
sb $t0, 6($s3)
这个s将寄存器$t0
中的byte存储到6($s3)
给定的内存地址中.同样,这意味着地址 $s3+6
.
byte: 4 5 6 7
FF FF FF FF
变成
byte: 4 5 6 7
FF FF 90 FF
现在,如果架构是小端字节序呢?这意味着字节在内存中排列 "little end first",因此第 2 条和第 3 条指令的效果发生变化。
lb $t0, 1($s3)
这会将内存地址 1 中的字节加载到寄存器 $t0
。但是现在地址是 "little end first",所以我们改为将 12
读入寄存器。
byte: 3 2 1 0
00 90 12 A0
下一个...
sb $t0, 6($s3)
这会将字节存储在寄存器 $t0
中,即 12
到内存地址 6 中。再次使用小端架构:
byte: 7 6 5 4
FF FF FF FF
变成
byte: 7 6 5 4
FF 12 FF FF
我正在为明天的考试而学习,我对 loading/storing 字节主题感到困惑。我有这个例子:
我完全不明白他是怎么得到红色答案的。有人可以帮我解释一下吗?
add $s3, $zero, $zero
这执行加法 $s3 = 0 + 0
,有效地将寄存器 $s3
设置为零值。
lb $t0, 1($s3)
这个 l 从内存中的一个位置加载一个 byte 到寄存器 $t0
。内存地址由1($s3)
给出,即地址$s3+1
。这将是内存中的第 0+1=1 个字节。由于我们有一个大端架构,我们读取 4 字节块 "big end first" 的字节。
byte: 0 1 2 3
00 90 12 A0
第0个字节是00
,第1个字节是90
。所以我们将字节 90
加载到 $t0
.
sb $t0, 6($s3)
这个s将寄存器$t0
中的byte存储到6($s3)
给定的内存地址中.同样,这意味着地址 $s3+6
.
byte: 4 5 6 7
FF FF FF FF
变成
byte: 4 5 6 7
FF FF 90 FF
现在,如果架构是小端字节序呢?这意味着字节在内存中排列 "little end first",因此第 2 条和第 3 条指令的效果发生变化。
lb $t0, 1($s3)
这会将内存地址 1 中的字节加载到寄存器 $t0
。但是现在地址是 "little end first",所以我们改为将 12
读入寄存器。
byte: 3 2 1 0
00 90 12 A0
下一个...
sb $t0, 6($s3)
这会将字节存储在寄存器 $t0
中,即 12
到内存地址 6 中。再次使用小端架构:
byte: 7 6 5 4
FF FF FF FF
变成
byte: 7 6 5 4
FF 12 FF FF