Как Необходимость удаления всех небуквенных элементов из строки в сборке (для x86) объясняет, удаление символа в строке означает копирование всей оставшейся части строки.
В вашем случае это всего 3 байта из 4 (включая завершающий 0
). Так что да, вы можете сделать это, просто сдвинув слово на 8 бит (1 байт). Особенно, если вы убедитесь, что test
выровнено по слову с .p2align 2
перед ним, чтобы вы могли безопасно lw
и sw
все 4 байта с одной загрузкой.
Для MIPS с прямым порядком байтов (например,MARS имитирует), это было бы правильным сдвигом, потому что первый байт в памяти является наименее значимым. А сдвиги вправо сдвигают младшие (наименее значимые) биты.
Для MIPS с прямым порядком байтов (старший значащий байт сначала, как работают некоторые реальные процессоры MIPS), это будет сдвиг влево, удаляя самый значимый байти сдвигая младшие биты вверх.
Обратите внимание, что слово test
останется равным 'b', 'c', 0, 0
. Так что да, в качестве строки неявной длины это "bc"
.
Также обратите внимание, что если у вас просто есть указатель в регистре, вы можете получить указатель на "bc"
, просто увеличив его на 1 вместоМодификация памяти. Например, addiu $t0, $t0, 1
.
Или, что эквивалентно, la $t0, test+1
- указатель на 1 байт после начала.