Разница между косвенным регистром и базой плюс смещение в режиме адресации MIPS? - PullRequest
0 голосов
/ 17 ноября 2011

В чем разница между косвенным регистром и base плюс смещение , и как это влияет на то, как вы пишете сборку на архитектуре MIPS? Я думаю, это означает, что вы можете ссылаться только на регистр в инструкции, и этот регистр должен указывать на дополнительные инструкции?

Ответы [ 2 ]

5 голосов
/ 17 ноября 2011

«Зарегистрировать косвенную» адресацию означает, что адрес, который будет использоваться Инструкция (известная как «эффективный адрес») берется из содержимого зарегистрироваться, а не кодироваться непосредственно в самой инструкции (что является "абсолютной" адресацией). MIPS имеет инструкции по переходу для обоих режимы адресации:

j 0x1234

означает «перейти к адресу 0x1234» (абсолютная адресация), тогда как

jr $ra

означает «перейти к адресу, указанному в регистре $ra» (косвенный регистр адресация).

Адресация «База плюс смещение» означает, что базовый адрес берется из содержимое регистра, а затем смещение (которое кодируется в инструкции сам) добавлен. MIPS использует этот режим адресации для загрузки и хранения. За Пример:

lw $t0, 0($a0)
lw $t1, 4($a0)

... если $a0 содержит 0x1234, то $t0 будет загружено словом в адрес 0x1234 (эффективный адрес - содержимое регистра, плюс смещение 0), и $t1 будет загружен словом по адресу 0x1238 (эффективный адрес - содержимое регистра плюс смещение 4).

Как вы можете видеть, когда смещение равно 0, это эквивалентно косвенному регистру адресации.

3 голосов
/ 17 ноября 2011

Регистрация режима косвенной адресации - это особый случай режима адресации базы плюс смещение, когда смещение равно нулю.

Режим адресации базы плюс смещение используется, когда у вас есть структура с несколькими элементами данных и вы хотите обратитьсяк предметам.Базовый регистр указывает на начало структуры, а смещение используется для извлечения конкретного элемента.Примером является загрузка адреса виртуального метода, где базовый регистр указывает на базу таблицы виртуальных методов, а смещение указывает интересующий метод.Другой пример относится к локальным переменным функции в стеке, где базовый регистр указывает на кадр стека функции, а смещение указывает конкретную интересующую переменную.

...