Можно ли иметь отрицательное, а не кратное смещению 4 в инструкции загрузки / сохранения? - PullRequest
0 голосов
/ 30 мая 2019

Во время экзамена по сборке MIPSx32 я нашел эту инструкцию:

Lw $8, -2($4)

Мой вопрос: верна ли эта инструкция? Если это правильно, может кто-нибудь сказать мне, почему?

1 Ответ

1 голос
/ 30 мая 2019

Мой вопрос: верна ли эта инструкция? Если это правильно, может кто-нибудь сказать мне, почему?

Я только что посмотрел руководство для процессора R4400, реального процессора MIPS:

Инструкция 0x8C88FFFE означает: lw $8,-2($4) (а не lw $8,-8($4), поскольку другие типы ЦП интерпретируют константу -2 в операциях со словами).

Так что, по крайней мере, инструкция существует.

Следующее, что говорится в руководстве, это то, что ему не разрешен доступ к невыровненной памяти. Это означает, что ($x)+a должно быть кратно 4 в инструкции lw $y,a($x).

Другими словами: если ($4)=0x1002, то lw $8,-2($4) получит доступ к адресу 0x1000, кратному 4. Нет проблем.

Однако, в этом случае lw $8,4($4) будет обращаться к адресу 0x1006. И 0x1006 не кратно 4. Это будет проблемой, хотя смещение кратно 4.

...