Из того, что я могу понять, существует несогласованность с контентом в сборке MIPS при запуске на QtSpim (без машины x86_64, что означает, что QtSpim является малоподобным). Однако я не уверен, что это ошибка, или если я ошибаюсь.Несоответствие Little-endian MIPS
Когда слово загружается в регистр, байты не меняются на противоположные, чтобы отражать малозначность. Например, если слово в памяти содержит 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 (ДХБС). После завершения программы я ожидал бы, что 0x00646362 (\ 0dbc) будет сохранен в памяти, однако 0x63626100 (cba \ 0) сохраняется.
Почему это так?
Протестировано на Fedora 24, x86_64, QtSpim версии 9.1.17.
Так как это прямой порядок байты, я хотел бы ожидать мой регистр '$ t1' содержать «0x61626364» после загрузки (байты в обратном порядке) и «0x62636400» после сдвига влево. Когда мы храним его обратно в память, он сохраняется в обратном порядке, что дало бы '0x00646362'. Я делаю какие-то неправильные предположения? – plafer
_ «Я делаю какие-то неправильные предположения?» _. Да. В конфигурации с маленьким концом наименьший значащий байт расположен по наименьшему адресу. Первым символом в 'letter' является' 'a'' (0x61), затем' 'b'' (0x62) и т. Д. Следовательно,' lw' из 'letter' даст вам' 0x64636261'. – Michael
строки @plafer хранятся в последовательном порядке, не зависящие от конкретизации –