D.3.1. Способы адресации
Существуют следующие способы адресации операндов:
Регистровая (операнд – в регистре данных или адреса).
Косвенно-регистровая (операнд – в ячейке памяти, адресуемой содержимым регистра адреса).
Косвенно-регистровая с постинкрементом (операнд – в ячейке памяти, адресуемой содержимым регистра адреса, который автоматически увеличивается после выборки операнда).
Косвенно-регистровая с пердинкрементом (операнд – в ячейке памяти, адресуемое содержимым регистра адреса, которое автоматически уменьшается перед выбором операнда).
Косвенно-регистровая с индексированием (операнд – в ячейке памяти, ее адрес – сумма содержимого регистра адреса, индексного регистра и задаваемого в команде 8-ми (иногда 16-ти и 32-х) разрядного смещения).
Прямая (операнд – в ячейке памяти, адрес которой задается числом, указанным в команде).
Относительная (операнд – в ячейке памяти, адрес которой – сумма текущего содержимого программного счетчика и данного в команде 16-ти (32-х) разрядного смещения).
Относительная со смещением (операнд –в ячейке памяти, адрес которой – сумма содержимого программного счетчика, индексного регистра и указанного в команде 16-ти (32-х) разрядного смещения).
Непосредственная (операнд – в команде).
Дополнительно введены следующие способы адресации:
Косвенно-регистровая с базовым смещением и ндексированием (операнд – в ячейке памяти, адрес которой – сумма адресного базового регистра, индексного регистра (возможно масштабированного) и 32-х разрядного смещения).
Косвенно-регистровая с постиндексированием (к содержимому адресного (базового) регистра прибавляется смещение, затем прибавляется содержимое индексного регистра и дополнительное смещение, и все это является адресом ячейки памяти, содержащий операнд).
Косвенно-регистровая с прединдексированием (операнд – в ячейке памяти, адрес которого определяется суммированием содержимого базового регистра, индексного регистра и базового смещения, к которому впоследствии прибавляется дополнительное смещение).
Относительное с базовым смещением и индексированием (то же, что и 10, только вместо базового регистра используется программный счетчик).
Косвенно-относительная с постиндексированием (аналогична п. 11, но вместо базового регистра используется программный счетчик).
Косвенно-относительная с прединдексированием (аналогична п. 12, но вместо базового регистра используется программный счетчик).
Как правило, другой операнд должен присутствовать в регистре адреса или данных.
Смещение может быть положительным и отрицательным. В качестве индексного регистра при индексации с индексированием может служить любой из регистров данных или адреса. Текущее содержимого программного счетчика, используемое для выделения относительного адреса, равно адресу первого слова выполняемой команды, умноженного на 2 (на 4).
Во всех способах адресации с индексированием введено масштабирование индекса. Оно осуществляется умножением содержимого индексного регистра Xn на масштабный множитель SCALE, имеющий значение 1, 2, 4 и 8. В зависимости от значения символа разрядности SIZE, указываемого после имени индексного регистра, используется 16 или 32 разряда его содержимого. Если после имени индексного регистра указан символ W (word, слово). то индексом служат 16 его младших разрядов, расширенные до 32-х разрядов битом знака. Если же указан символ L (long word, длинное слово), то индексом служит 32-х разрядное значение индексного регистра, используемое как число со знаком. При SCALE=1 содержимое Xn (индексного регистра) остается без изменения, а при SCALE = 2,4 или 8 сдвигается влево на 1, 2 или 3 разряда соответственно.
При программировании на языке ассемблера значение индекса задается следующим обозначением:
Xn.SIZE*SCALE
где Xn – индексный регистр. Им может быть An (регистр адреса) или Dn (регистр данных). SIZE – W или L, а SCALE – 1, 2, 4, 8. Например:
D5.L*1
A4.W*4
Назад... К оглавлению раздела Далее...
=== *** === *** === *** ===
Copyright © Юрий А. Денисов. 2000-2002 г.
В настоящее время проект закрыт (в версии 1.00.3 alpha). Автор приносит извинения за прекрашение разработки.