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

     

    Назад...   К оглавлению раздела   Далее...

    === *** === *** === *** ===

    В настоящее время проект закрыт (в версии 1.00.3 alpha). Автор приносит извинения за прекрашение разработки.