Насколько я понимаю, существует несоответствие с порядком байтов в сборке MIPS при запуске на QtSpim (нет машины x86_64, что означает, что QtSpim является прямым порядком байтов). Однако я не уверен, ошибка это или я ошибаюсь.
Когда слово загружается в регистр, байты не меняются местами, чтобы отразить прямой порядок байтов. Например, если слово в памяти содержит 0x11223344 и мы загружаем его в регистр, мы получаем 0x11223344 (я ожидал бы 0x44332211).
Рассмотрим следующий фрагмент:
.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.