Программирование на Ассемблере
Существует еще одна разновидность регистрового метода адресации, которая
используется для доступа к адресным регистрам: команда MOVE.L #MARKER,A0
записывает адрес переменной MARKER в регистр A0. Теперь переходим к менее тривиальным (и более интересным) методам адресации.
Рассмотрим еще один пример из BASIC\'а: 10 A=1000
20 POKE A,1 В первой строчке переменной A присваивается значение 1000. Такое
присвоение возможно и на ассемблере: MOVE.L #1000,A0 (здесь переменная A
размещается в адресном регистре A0). В строке 20 значение 1 записывается не в саму переменную A, а в ячейку
памяти с адресом, содержащимся в A. Это еще один способ доступа к данным,
который легко записывается и на ассемблере: MOVE.L #1000,A0 ;записать адрес в A0
MOVE #1,(A0) ;записать 1 по этому адресу Скобки задают косвенный регистровый метод адресации. Этот метод работает
только с адресными регистрами. Существует несколько разновидностей косвенных регистровых методов.
Например, может быть задано смещение, которое добавляется к адресному
регистру перед его использованием. Так, команда MOVE #1,4(A0) запишет
значение 1 по адресу 1000+4=1004. Смещение может быть как положительным,
так и отрицательным и должно лежать в диапазоне -32768..32767. Этот метод
адресации называется косвенным регистровым с 16-битным смещением. Существует еще один похожий метод адресации - косвенный регистровый с
8-битным смещением. В этом методе в качестве дополнительного смещения может
использоваться значение какого-либо регистра, а размер основного смещения
ограничен восемью битами. Поясним это на примере. Пусть наша программа использует следующую структуру
данных (массив): ... RECORD: DC.B 2 ;число элементов массива минус один
DC.B 1,2,3 ;элементы массива Будем использовать MOVE.L #RECORD,A0 для загрузки адреса структуры в A0 и
MOVE (A0),D0 для получения числа элементов массива.
|