Индексная и стековая адресации.

Индексная и стековая адресации.

XalionMay 21, 2018

Адресация – это способ обращения к операнду в команде ISA.
Всего их пять: непосредственная, прямая, регистровая, индексная и стековая.
Про первые три уже написана статья.
В этой части распишем индексную и стековую адресацию.

Индексная адресация находит операнды через смещение от регистра.
Смещение – размер шага от начальной ячейки, обычно размером 8, 16 или 32 бита.

Смещение работает только с адресами, но не со значениями.
Ox36f3575de – подходит, 40075 – не подходит

Значение смещения складывается с адресом в регистре и получается адрес операнда в памяти. Изменяем смещение – получаем адрес другого операнда.

Для индексной адресации нужно большое адресное поле, потому что команды смешения индекса длиннее остальных. Она работает быстрее регистровой, если смещение идет не дальше 16 бит.

Для примера, разберем задачу: массивы A и B состоят из 1024 элементов. Элементы: нули и единицы. Нужно найти пару одинаковых элементов из обоих массивов.

Решение на ассемблере,названия регистров упростили.

В четвёртой команде и пятой команде используем индексную адресацию.

Четвёртая команда.
Добавляем в регистр R4 элемент массива A. Регистр R2 и адрес первого
элемента A складываются и получается адрес нужного элемента в массиве A.

Пятая команда.
Применяем логическое И к значению в регистре R4 и элементу в массиве B. Регистр R2 и адрес первого элемента B складываются и получается адрес нужного элемента в массиве B.

Работает как индексная адресация, но вычисляет сумму двух регистров и смещения. Один из регистров становится базой, другой – индексом.

Перепишем четвёртую и пятую команду из решения чтобы использовать относительную индексную адресацию.

MOV R5, #A  Добавляем первую переменную массива A в регистр R5
MOV R6, #B  Добавляем первую переменную массива B в регистр R6

LOOP: MOV R4, (R2 + R5) Добавляем в регистр R4 переменную из массива A
      AND R4, (R2 + R6) Логическое И между R4 и переменной массива B


Стековая адресация работает без адресов, все команды выполняются
в стеке – специальная память процессора для временных данных.
О стеке мы писали в статье о понимании компьютером языков программирования.

Пример команды со стековой адресацией.

Команды добавления в стек:
PUSH 1  Добавит в вершину стека число 1. Вершина стека – число 1.
PUSH 4  Добавит в вершину стека число 4.
Теперь вершина стека – число 4.



Команды перехода – указатели для процессора, они сообщают, что и когда делать. Например, прервать последовательное выполнение команд или продолжить выполнять команды с заданного адреса.

Команды перехода могут использовать прямую, косвенную регистровую или индексную адресацию. Чаще используют относительную адресацию по счетчику команд.

Относительная адресация по счётчику команд работает как индексная, только смещение прибавляется к счётчику команд – регистр следующей команды.
О счётчике команд мы писали в статье о центральном процессоре.

В счётчике команд лежит адрес следующей команды – 1.
Складываем смещение 4 со счётчиком команд и получаем операнд по адресу 5.

Следующая статья о.

Report Page