домашняя библиотека
Поиск в библиотеке
Навигация по предметам
Последние добавленные новости
Реклама

Архитектура и организация ЭВММикропроцессор Z80

Методы адресации

Байтовые операнды арифметико-логических команд могут находится в аккумуляторе, регистрах общего назначения B, C, D, E, H, L, непосредственно в коде команды и в ячейках памяти.

Двухбайтовые операнды (слова) могут располагаться в регистровых парах BC, DE и HL, 16-разрядных регистрах SP, IX и IY, непосредственно в коде команды в смежных ячейках памяти. В памяти байты слов хранятся в порядке “младший–старший”, традиционном для большинства вычислительных систем. Разновидностью двухбайтовых операндов можно считать содержимое регистровой пары AF (аккумулятор и регистр флагов) и операнд в стеке.

Адреса переходов в инструкциях передачи управления могут содержаться в самой команде (абсолютная адресация), в регистровой паре HL или регистрах IX, IY (косвенная адресация) или вычисляться с помощью 8-разрядного смещения и адреса следующей инструкции (относительная адресация). В операциях возврата из подпрограммы и прерывания адрес возврата выбирается из вершины стека.

Неявная адресация

Местоположение операнда неявно определяется кодом операции. Например, во всех двухадресных байтовых арифметико-логических операциях один из операндов находится в аккумуляторе, а в операциях PUSH и POP одним из операндов является слово в вершине стека.

Операнд, адресуемый неявно, на языке ассемблера в некоторых инструкциях записывается явным образом (например, инструкция LD A,R, оба операнда которой используют неявную адресацию), а в некоторых не указывается вообще (например, в инструкции LDI, неявно использующей все три регистровые пары).

Регистровая адресация

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

8-разрядные регистры, участвующие в операции, кодируются комбинацией трёх битов:

– 000 – регистр B;

– 001 – регистр C;

– 010 – регистр D;

– 011 – регистр E;

– 100 – регистр H;

– 101 – регистр L;

– 110 – косвенная адресация по регистровой паре HL (см. ниже);

– 111 – регистр A.

16-разрядные регистры и регистровые пары кодируются комбинацией двух битов, при этом в зависимости от инструкции кодировка несколько изменяется:

– 00 – регистровая пара BC;

– 01 – регистровая пара DE;

– 10 – регистровая пара HL (все инструкции, кроме ADD IX и ADD IY), регистр IX (инструкция ADD IX) или регистр IY (инструкция ADD IY);

– 11 – регистровая пара AF (инструкции PUSH и POP) или регистр SP (инструкции LD, ADD, ADC, SBC, INC и DEC).

Регистровые операнды записываются в инструкциях явным образом. Однако явная запись имени регистра ещё не свидетельствует об использовании регистровой адресации, поскольку в некоторых случаях применяется неявная адресация (например, в инструкциях PUSH и POP, работающих с индексными регистрами). В описании форматов кодов команд для однобайтовых регистров применяются обозначения r, r1, r2, для двухбайтовых регистров и регистровых пар – обозначение rr.

Непосредственная адресация

Операнд является частью кода команды и состоит из одного или двух байтов, следующих непосредственно за байтом кода операции. Байты 16-разрядного операнда хранятся в памяти в порядке “младший–старший”.

Операнд непосредственно записывается в мнемонике инструкции, например LD A,10h. В описании форматов кодов команд для непосредственного операнда используется обозначение n или nn (соответственно 8- и 16-разрядный операнд).

Косвенная адресация

Операнд находится в ячейке памяти, адрес которой содержится в одной из регистровых пар BC, DE или HL. Почти во всех случаях адрес может находиться только в регистровой паре HL, причём по формату команда с косвенной адресацией по этой регистровой паре не отличается от команды с регистровой адресацией (на языке ассемблера микропроцессора 8080 такой операнд даже обозначался как “регистр” M). Содержимое регистровых пар BC и DE может использоваться в качестве адресов только в нескольких инструкциях.

Косвенная адресация может использоваться также в инструкции безусловного перехода JP. В этом случае адрес перехода содержится либо в регистровой паре HL, либо в одном из индексных регистров IX или IY.

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

Абсолютная адресация

Адрес операнда является частью кода команды и занимает два байта, расположенных в порядке “младший–старший”. Он может определять как ячейку памяти, содержащую операнд для инструкции обработки данных, так и адрес следующей команды в инструкции перехода.

Адрес перехода записывается в инструкции явным образом: JP 1234h, а адрес операнда заключается в круглые скобки: LD A,(1234h). В описании форматов кодов команд для обозначения абсолютного адреса используется запись aa.

Относительная адресация

Этот вид адресации используется в некоторых командах переходов. Код команды состоит из двух байтов. В первом содержится код операции, во втором – 8-разрядное смещение в дополнительном коде. Адрес перехода получается путём прибавления смещения, расширенного до 16 разрядов, к текущему содержимому счётчика команд PC (он всегда указывает на следующую инструкцию, в данном случае следующую непосредственно за командой перехода).

Поскольку смещение имеет длину 8 разрядов, с его помощью возможно осуществить переход на 128 байтов назад или на 127 байтов вперёд относительно команды, следующей за инструкцией перехода.

Адрес перехода записывается в инструкции явным образом, при этом транслятор языка ассемблера автоматически вычисляет необходимое значение смещения: JR 8123h. В описании форматов кодов команд для смещения, используемого в относительной и индексной (см. ниже) адресации, применяется обозначение d.

Индексная адресация

Операнд располагается в памяти. Его адрес определяется сложением содержимого указанного индексного регистра (IX или IY) и 8-разрядного смещения в дополнительном коде, являющегося частью кода команды.

Используемый индексный регистр определяется первым байтом кода команды: значение 0DDh соответствует регистру IX, а значение 0FDh – регистру IY. Второй байт является кодом операции. Смещение занимает третий байт кода команды.

На языке ассемблера индексная адресация обозначается суммой индексного регистра и смещения, заключённой в круглые скобки: LD B,(IX+10h). В описании форматов кодов команд для смещения, используемого в относительной (см. выше) и индексной адресации, применяется обозначение d.

   
 
  • Добавлен: 17-08-2010, 08:19 | Просмотров: 13622

    support: admin@sdb.su