【发布时间】:2016-11-18 01:23:09
【问题描述】:
据我了解,在 QtSpim(没有 x86_64 机器,这意味着 QtSpim 是小端)上运行时,MIPS 程序集的字节序不一致。但是,我不确定这是一个错误还是我错了。
当一个字被加载到寄存器中时,字节不会反转以反映小端序。例如,如果内存中的一个字包含 0x11223344,我们将它加载到寄存器中,我们会得到 0x11223344(我希望是 0x44332211)。
考虑以下 sn-p:
.text
.globl main
main:
la $t0, letters
lw $t1, 0($t0) # Expected ($t1): 0x61626364
sll $t2, $t1, 8 # Expected ($t2): 0x62636400
sw $t2, 0($t0) # Expected (mem): 0x00646362
jr $ra
.data
letters:
.ascii "abcd"
在程序运行之前,“abcd”按小端存储,如预期:0x64636261 (dcba)。程序完成后,我希望 0x00646362 (\0dbc) 存储在内存中,但存储的是 0x63626100 (cba\0)。
为什么会这样?
在 Fedora 24、x86_64、QtSpim 版本 9.1.17 上测试。
【问题讨论】:
标签: mips endianness qtspim