【MIPS】内存小端存储与MARS显示
1.小端存储方式:LSB在低地址
以4Byte一个字为单位,其内按字节逆序排列 \(\to\) 其实就是以字节为单位,低有效字节LSB放在在低地址处,而字节内的位序不变(或者说不care,交给更底层的硬件实现,不过硬件中一般位序采用大端,符合人脑直觉方便实现)
| 0111_1000 | 0101_0110 | 0011_0100 | 0001_0010 | ||
0x48 |
0x65 |
0x6c |
0x6c |
0x6c6c6548 |
|
通过lb指令验证
MARS中内存显示:

通过lb将地址0x00000000 ~ 0x00000007的内容取出存入$t0 ~ $t7
li $t8, 0
lb $t0, 0($t8)
lb $t1, 1($t8)
lb $t2, 2($t8)
lb $t3, 3($t8)
lb $t4, 4($t8)
lb $t5, 5($t8)
lb $t6, 6($t8)
lb $t7, 7($t8)
产生的结果:

$t5的0xffffffff是lb指令特性:取出1Byte后将进行符号扩展至32位才能存入寄存器中
2.MARS显示:默认小端存储

字符串与数字对比验证
如下声明:
.data
num: .word 0x12345678
msg: .asciiz "Hellow world"
查看内存(HEX显示)

查看内存(ASCII显示)

可见内存数据段中,0x12345678顺字节显示,而"Hell"逆字节显示

其他例证
.data 0x00001000
num: .byte 1,2,3,4,5,6,7,8
.text
li $a0, 0x00001000
lw $t0, 0($a0)

.byte指令:顺序将内容写入内存数据段,小端读取便是按字逆字节读取

浙公网安备 33010602011771号