Поддержка механизма модульности. Уровни доступа. Слова расширения. Использование команд CAS/CAS2 в системных программах, страница 8

Еще одной особенностью  индексной  адресации  MC68020  является возможность косвенной адресации через память, что позволяет непосредственно использовать длинное слово в памяти как указатель на операнд. При этом для адресации указателя можно использовать любой из описанных выше методов. Помимо прочего, при подавлении использования обоих регистров смещение выступает в  роли  абсолютного адреса. Это означает, что обращаться к расположенному в памяти указателю можно и по абсолютному адресу.

После  того  как  указатель считан из памяти, но перед выборкой данных, его можно дополнительно модифицировать добавлением  еще одной  константы смещения. Это второе смещение называется внешним. Иными словами, сам расположенный в памяти указатель  может рассматриваться как базовый адрес.

При косвенной адресации через память возможны следующие варианты употребления индексного регистра: а) с подавлением  его  использования,  б) с использованием его для обращения к указателю в памяти (т.е. до выборки косвенного адреса), в) с  использованием его для обращения к конечному операнду (т.е. после выборки косвенного  адреса). В последнем случае значение индексного регистра складывается со считанным из памяти значением  указателя

(и,  возможно, внешним смещением). Поскольку в MC68020 допускается масштабирование индексного  регистра,  можно  осуществлять позиционирование в массиве, адресуемом указателем, считанным из памяти. Следует иметь в виду, что использование индекса для обращения  к  конечному  операнду исключает его использование для адресации указателя в памяти. Иными словами, невозможно  индексирование и до, и после выборки косвенного адреса; оно возможно либо  до, либо  после его выборки.

D.5.2 Сводка типов адресации

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

MC68020. Например, тип адресации, называемый косвенной  адресацией по регистру (Rn), при ассемблировании реализуется как косвенная  адресация по адресному регистру в случае, если Rn - адресный регистр (базовый способ адресации),  или  как  косвенная адресация  с индексированием и подавлением адресного регистра в случае, если Rn - регистр  данных  (частный  режим  аппаратного способа).Другой  пример - (смещ,An), где имеется зависимость от размера смещения. Если смещение укладывается в 16 бит,  то  используется аппаратный способ адресации по адресному регистру со смещением,  в  противном  случае используется аппаратный способ косвенной адресации по адресному  регистру  с  индексированием, так как только при ней допускаются большие значения смещения.

С другой стороны, два или более из упомянутых  типов  адресации при  ассемблировании могут реализоваться как один и тот же способ  аппаратной  адресации. К примеру, адресация по абсолютному адресу с индексным регистром - (адр,Rn) и адресация по базовому адресу с большим смещением - (смещ,Rn) представляют собой всего лишь два различных варианта интерпретации одного и  того  же  адресации  по регистру с 32-битным смещением. При ассемблировании в обоих вариантах будет получен один и тот же машинный код.

Ассемблером проводится необходимый анализ и подбирается  подходящий  аппаратный способ адресации; при этом в случае, если выбор неоднозначен, т.е. существует несколько способов  осуществления  данного  типа адресации, предпочтение отдается более эффективному. Как правило, человеку, программирующему на  ассемблере,  нет необходимости делать такой выбор самому, поэтому полезно дать обзор доступных программисту типов адресации  безотносительно  к методам вычисления исполнительного адреса, фактически реализованным в кристалле MC68020.

Типы  адресации, о которых идет речь ниже, определяются в общеупотребительных терминах программирования, без привязки  к  каким-либо  конкретным  способам адресации, реализованным в архитектуре MC68020 (впрочем, для некоторых программных типов адресации имеются очевидные аппаратные аналоги). Описанию типов адресации предпослано, для определенности, точное толкование  некоторых часто используемых терминов.

указатель - двухсловное значение в регистре или памяти, представляющее собой адрес.

база      - указатель, который, при сложении со смещением  позволяет вычислить адрес (называемый базированным).

индекс    - постоянная  или переменная, которую программист использует в качестве аддитивной добавки при вычислении исполнительного адреса. Постоянный индекс обычно трактуется как смещение. Переменный индекс всегда является значением регистра.

смещ      - смещение, постоянный индекс.

позиционирование - использование адресных регистров или регистров данных в качестве  переменных  индексов_массива для  массивов  с размером элементов в 1, 2, 4 или 8

байтов.

относительный - адрес, базируемый по программному счетчику. Используется  для  адресации  операндов в программном пространстве; делает ссылку не зависящей от  месторасположения  программы в памяти. Прочие ссылки, за исключением пр_адр (см. ниже), относятся  к  пространству данных.

адр       - абсолютный адрес.

пр_адр    - абсолютный адрес в программном пространстве. Прочие ссылки,  за  исключением относительных, относятся к пространству данных.

В  этой  терминологии  возможные типы адресации характеризуются следующим образом:

Непосредственные - #данные      Данные  -  константа во входном данные                         потоке команд.

Прямая           - Rn           Указывается содержимое регистра.

регистровая

Сканирующие      - (An)+        Указатель в  адресном  регистре методы                         автоматически  инкрементируется после использования.

-(An)        Указатель в  адресном  регистре автоматически  декрементируется перед использованием.

По абсолютному   - (адр)        Абсолютный адрес в пространстве адресу                         данных.

(пр_адр,ZPC) Абсолютный  адрес в программном пространстве.

По указателю     - (Rn)         Регистр в качестве указателя.

в регистре        (смещ,Rn)    Регистр в качестве указателя  с постоянным  индексом (или базированный адрес).