3.1.6. Способы адресации

Рассмотрим команду сложения. Ранее мы предположили, что одно из слагаемых было в аккумуляторе. В таком случае, откуда поступает второе слагаемое и как оно находится? Многочисленные способы решения этой задачи называются способами адресации. В настоящей главе мы упоминали уже способы адресации во многие регистры, однако, в этом вопросе имеется ряд тонкостей. Рассмотрим их подробнее.   

Способы адресации микропроцессора следующие: 1) неявный; 2) регистровый;   3) непосредственный; 4) прямой; 5) косвенный регистровый. 

Два первых (регистровый и неявный) касаются операндов, расположенных в самом МП. Три последних (непосредственная, прямая и косвенная регистровая) – операндов, расположенных вне МП, то есть в ячейках памяти или в портах ввода-вывода. Рассмотрим пример команды с неявной адресацией. Команда ВОССТАНОВИТЬ ИНДИКАТОР ПЕРЕНОСА принадлежит к группе команд передачи данных и является  однобайтовой, потому что дополнительные данные бесполезны для ее выполнения. Все события происходят в МП.   

Это действие представлено на рис. 3.12, а, не нужно искать данные или адреса в других регистрах МП, в памяти или портах УВВ. Команда STC восстанавливает индикатор переноса без воздействия на другие регистры или индикаторы.

В случае регистровой адресации операнд отыскивается во внутреннем регистре МП. Рассмотрим пример команды ВЫЧЕСТЬ L из A, принадлежащей к группе арифметических команд. Регистровые операции (как и неявные) всегда являются однобайтовыми, потому что они не требуют данных и адресов вне МП. Все события происходят в МП. Операция показана на рис. 3.12, б. Первое число 0000 1111 находится в аккумуляторе, другое 0000 0011 является содержимым регистра L. После выполнения команды результат 0000 1100 помещается в аккумулятор.

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

Рассмотрим пример этого типа команд. Команда загрузить данные в SP, принадлежащая группе передачи данных – это трехбайтовая команда. Обычно непосредственные команды определяются двумя или тремя байтами.

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

Младший байт 0111 0000 загружен первым, затем старший байт 0000 0010. Непосредственные команды удобны для осуществления загрузок, инициализированных регистрами МП или указателем стека.

В случае прямой адресации команд второй и третий байт памяти прямо указывают на адрес операнда. Они являются адресами в прямом способе адресации, тогда как при непосредственной адресации эти же байты были операндами. Операция передать данные из порта УВВ в А (группа команд передачи данных) является примером команды из двух байт. Обычно эти команды состоят из двух или трех байт.

В примере, приведенном на рис. 3.14, а, мы можем проследить передачу содержимого 1100 0011 из порта ввода в аккумулятор. Адрес порта указан адресом, являющимся содержимым второго байта команды – здесь 0000 1010.

В случае косвенных регистровых команд пара регистров HL указывает на адрес операнда в памяти. Рассмотрим пример: загрузить LOC (Н и L) в А с мнемоникой MOV A, M (группа команд передачи данных).

Этот тип команд всегда однобайтовый. Обратимся к рис. 3.14, б, содержимое памяти по адресу 2080 (1111 0000 в этом случае) загружено в аккумулятор. Соответствующий адрес (2080 в нашем случае) памяти данных указан содержимым пары HL, которая здесь играет роль адресного регистра.

Другие МП снабжены иногда иными способами прямой адресации, а именно: нулевой или основной страницы; абсолютной адресации действующей страницы или ожидаемой.

Адресация – это способ нахождения соответствия между множеством однотипных объектов в микропроцессорной системе и множеством их адресов.

Способы адресации ориентированы на то, где и как осуществляется поиск данных.