Вы неправильно используете sw
, в котором хранится слово, то есть 4-битные данные.
В вашем алгоритме после инструкции
li $t0, 'X'
вы пишете 'X' как 32-битное слово в вашем регистре t0. Вероятно, ваш компьютер настроен как little-endian и $t0
, то есть 32-битный регистр содержит значение 0x00000058 (0x58 - это код ascii для X).
Когда вы записываете его в память с помощью sw $t0, ($a0)
, записываются все 32 бита, и содержимое вашей памяти, которое изначально было «ABCDEFGH», становится «X \ 0 \ 0 \ 0EFGH».
Когда вы просите его напечатать, '\ 0' в позиции string+1
рассматривается как терминатор конца строки, и у вас отображается только 'X'.
Исправление - просто заменить строку на
sw $t0, ($a0)
с
sb $t0, ($a0)
и только младший байт вашего регистра (то есть 'X') записывается в память.