此 MIPS 代码如何测试字节顺序?
How does this MIPS code test for endianness?
li $t0 , 0xABCD9876
sw $t0 , 100([=10=])
lb $s5 , 101([=10=])
MIPS 新手;所以我的理解是,
li
将值 0xABCD9876
加载到寄存器 $t0
然后这个值被存储到地址([=14=]+100)
的内存中
lb 然后将地址 ([=15=]+101)
处的字节复制到寄存器 $s5
但是寄存器中没有任何内容 ([=15=]+101)
是吗? 0xABCD9876
存储在 ([=14=]+100)
,而不是 ([=20=]+1)
。迷失在这一点上。
内存是按字节寻址的。因此,([=10=]+100)
指向单个字节。当它与 sw
或 lw
指令一起使用时,您实际上访问的不仅是 ([=10=]+100)
,还有 ([=14=]+101)
、([=15=]+102)
和 ([=16= ]+103)
(换句话说,您正在访问 从 该地址开始的四个字节(一个字)。通过存储一个字然后访问它的特定字节,您可以确定该字的字节存储在内存中的顺序,从而确定处理器的字节顺序。
li $t0 , 0xABCD9876
sw $t0 , 100([=10=])
lb $s5 , 101([=10=])
MIPS 新手;所以我的理解是,
li
将值 0xABCD9876
加载到寄存器 $t0
然后这个值被存储到地址([=14=]+100)
lb 然后将地址 ([=15=]+101)
处的字节复制到寄存器 $s5
但是寄存器中没有任何内容 ([=15=]+101)
是吗? 0xABCD9876
存储在 ([=14=]+100)
,而不是 ([=20=]+1)
。迷失在这一点上。
内存是按字节寻址的。因此,([=10=]+100)
指向单个字节。当它与 sw
或 lw
指令一起使用时,您实际上访问的不仅是 ([=10=]+100)
,还有 ([=14=]+101)
、([=15=]+102)
和 ([=16= ]+103)
(换句话说,您正在访问 从 该地址开始的四个字节(一个字)。通过存储一个字然后访问它的特定字节,您可以确定该字的字节存储在内存中的顺序,从而确定处理器的字节顺序。