Every people has right on left Chia ulo havas rajton sur levo
Каждый человек имеет право на лево (Н. Фоменко)
CopyLeft (L) Юрий А. Денисов (yudenisov) Все права защищены
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
Назад... К оглавлению раздела Далее...
|
|