【问题标题】:MIPS little or big endian when encoding as hex编码为十六进制时的 MIPS 小端或大端
【发布时间】:2019-06-06 17:27:03
【问题描述】:

在 MIPS1 中,十六进制值存储为小端或大端,例如添加 t1 t2 t3。 这将存储为 00000001010010110100100000100000 0x014B4820 或 00000100000100101101001010000000 412D280 吗

【问题讨论】:

  • 取决于工具链/工具。

标签: assembly compilation mips endianness


【解决方案1】:

... 或 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 一样存储。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多