编码为十六进制时的MIPS小端或大端

时间:2019-06-06 17:27:03

标签: assembly compilation mips endianness

在MIPS1中,将十六进制值存储为小端还是大端,例如将t1 t2 t3加起来。 是否将其存储为00000001010010110100100000100000 0x014B4820或00000100000100101101001010000000 412D280

1 个答案:

答案 0 :(得分:2)

  

...或00000100000100101101001010000000 412D280

为什么您认为add t1, t2, t3可以这样存储?

在CPU手册(如MIPS手册)中,指令通常是这样描述的:

+--------+-------+-------+-------+-------+--------+
| 000000 | Reg 2 | Reg 3 | Reg 1 | 00000 | 100000 |  ADD
+--------+-------+-------+-------+-------+--------+

在这种绘图中,最高位在左侧,最低位在右侧。

这意味着00000001010010110100100000100000或0x014B4820是正确的。

但是,这与大小端字节无关!

大尾数法用于定义字节,16位值和32位值在内存中的关系:

数字0x12345678是像四个字节0​​x12、0x34、0x56、0x78还是像四个字节0​​x78、0x56、0x34、0x12一样存储的?

在两种情况下,指令add t1, t2, t3的存储方式都与32位数字0x014B4820的存储方式相同。

但是,在小端系统上,此数字的存储方式类似于四个字节0​​x20、0x48、0x4B,0x01;在big-endian系统上,此数字的存储方式类似于四个字节0​​x01、0x4B,0x48、0x20。