【发布时间】:2019-06-06 17:27:03
【问题描述】:
在 MIPS1 中,十六进制值存储为小端或大端,例如添加 t1 t2 t3。 这将存储为 00000001010010110100100000100000 0x014B4820 或 00000100000100101101001010000000 412D280 吗
【问题讨论】:
-
取决于工具链/工具。
标签: assembly compilation mips endianness
在 MIPS1 中,十六进制值存储为小端或大端,例如添加 t1 t2 t3。 这将存储为 00000001010010110100100000100000 0x014B4820 或 00000100000100101101001010000000 412D280 吗
【问题讨论】:
标签: assembly compilation mips endianness
... 或 00000100000100101101001010000000 412D280
你认为add t1, t2, t3为什么可以这样存储?
在 CPU 手册(如 MIPS 手册)中,指令通常是这样描述的:
+--------+-------+-------+-------+-------+--------+
| 000000 | Reg 2 | Reg 3 | Reg 1 | 00000 | 100000 | ADD
+--------+-------+-------+-------+-------+--------+
并且在这种绘图中,最高位在左侧,最低位在右侧。
这意味着 00000001010010110100100000100000 或 0x014B4820 是正确的。
但是,这与大小端无关!
大端和小端用于定义字节、16 位值和 32 位值在内存中的关系:
数字0x12345678是像0x12、0x34、0x56、0x78这四个字节一样存储还是像0x78、0x56、0x34、0x12这四个字节一样存储?
在这两种情况下,指令 add t1, t2, t3 的存储方式与 32 位数字 0x014B4820 的存储方式相同。
然而,在 little-endian 系统上,这个数字像四个字节 0x20、0x48、0x4B、0x01 一样存储;在 big-endian 系统上,这个数字像四个字节 0x01、0x4B、0x48、0x20 一样存储。
【讨论】: