Каким должно быть поведение, если я попытаюсь загрузить слово с адреса, который не выровнен по 4 в Mips? - PullRequest
1 голос
/ 29 мая 2020

Я создаю ассемблер Mips, и на данный момент он поддерживает такие инструкции, как lw $s0, 3($sp), которые я нахожу несколько нелогичными для меня, так как я не знаю, выдерживает ли процессор это или это не могу загрузить, например, 1 байт из слова, а остальные 3 байта из другого слова.

Другими словами, должен ли я работать с данными, поскольку это массив слов (двумерный массив), чтобы я мог только адресные слова, выровненные по четырем точкам, или одномерный массив, в котором все байты один за другим, в котором я могу получить доступ к любым 4 последовательным байтам и втиснуть их в регистр?

1 Ответ

2 голосов
/ 29 мая 2020

Процессор MIPS должен давать сбой из-за смещенных адресов, но это не задача ассемблера.

Предупреждение может быть разумным, но технически во время сборки вы редко можете знать или предсказать, что именно в реестре. Смещение 3 является допустимым и может работать с lw или sw, если адрес в регистре также нечетный.

Кроме того, программист может пытаться вызвать ошибку - вы никогда не знаете .

Дело в том, что инструкция имеет допустимую кодировку и ассемблер должен преобразовать текст в этот машинный код.

...