Микропроцессор Z80 -основные характеристики

         

Операции переходов


JP nn                               JR d

---------¬ --------¬ --------¬      ---------¬ --------¬

¦11000011¦ ¦   n   ¦ ¦   n   ¦      ¦00011000¦ ¦  d-2  ¦

L--------- L-------- L--------      L--------- L--------

JP cc,nn                            DJNZ d

---T---T---¬ --------¬ --------¬    ---------¬ --------¬

¦11¦cc ¦010¦ ¦   n   ¦ ¦   n   ¦    ¦00010000¦ ¦  d-2  ¦

L--+---+---- L-------- L--------    L--------- L--------

JP (HL)       JP (IX)                  JP (IY)

---------¬    ---------¬ ---------¬    ---------¬ ---------¬

¦11101001¦    ¦11011101¦ ¦11101001¦    ¦11111101¦ ¦11101001¦

L---------    L--------- L---------    L--------- L---------

JR C,d                  JR NC,d

---------¬ --------¬    ---------¬ --------¬

¦00111000¦ ¦  d-2  ¦    ¦00110000¦ ¦  d-2  ¦

L--------- L--------    L--------- L--------



JR Z,d                  JR NZ,d

---------¬ --------¬    ---------¬ --------¬

¦00101000¦ ¦  d-2  ¦    ¦00100000¦ ¦  d-2  ¦

L--------- L--------    L--------- L--------

CALL nn                           RET           RET cc

---------¬ --------¬ --------¬    ---------¬    ---T---T---¬

¦11001101¦ ¦   n   ¦ ¦   n   ¦    ¦11001001¦    ¦11¦cc ¦000¦

L--------- L-------- L--------    L---------    L--+---+----

CALL cc,nn

---T---T---¬ --------¬ --------¬

¦11¦cc ¦100¦ ¦   n   ¦ ¦   n   ¦

L--+---+---- L-------- L--------

RETI                     RETN                     RST x

---------¬ ---------¬    ---------¬ ---------¬    ---T---T---¬

¦11101101¦ ¦01001101¦    ¦11001001¦ ¦01000101¦    ¦11¦ x ¦111¦

L--------- L---------    L--------- L---------    L--+---+----

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

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


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

Инструкция RET производит безусловный или условный возврат из подпрограммы; адрес возврата извлекается из вершины стека.

Обозначение

Код

Условие

NZ

000

не нуль (Z=0)

Z

001

нуль (Z=1)

NC

010

нет переноса (C=0)

C

011

есть перенос (C=1)

PO

100

нечётность (P/V=0)

PE

101

чётность (P/V=1)

P

110

плюс (S=0)

M

111

минус (S=1)

Все инструкции условных переходов имеют своим первым (а для RET – единственным) операндом код условия, обозначаемый в форматах инструкций буквами cc. Для инструкций относительного перехода JR возможны переходы по состоянию флажка Z (JR NZ и JR Z) и флажка C (JR NC и JR C), при этом условие перехода определяется кодом операции. В остальных инструкциях (JP, CALL и RET) набор условий перехода более широкий; он кодируется тремя разрядами кода команды, как показано в приведённой таблице.

Инструкция DJNZ облегчает организацию циклов по счётчику. Она уменьшает содержимое регистра B на единицу и, если результат отличен от нуля, производит переход на указанный адрес. Для определения адреса перехода используется относительная адресация: код команды содержит 8-разрядное смещение d относительно адреса инструкции, следующей за командой DJNZ, рассматриваемое как число со знаком.

Инструкции RETI и RETN предназначены для завершения программ обработки прерываний; первая используется в обработчиках маскируемых прерываний, возникающих по запросам внешних устройств, а вторая – в обработчике немаскируемых прерываний. Обе инструкции извлекают из вершины двухбайтовый адрес возврата и заносят его в счётчик команд.

Команда RETI никаких дополнительных действий в процессоре не производит, но “родные” микросхемы, предназначенные для совместной работы с микропроцессором Z80, распознают её машинный код (анализируя состояние шины данных в процессе выборки команды и отслеживая появление байтов 0EDh и 4Dh, составляющих код инструкции RETI) и благодаря этому определяют, что обработка прерывания завершена.


При использовании “чужих” микросхем (например, входящих в микропроцессорный набор фирмы Intel) приходится либо создавать дополнительные схемы, “отлавливающие” выполнение инструкции RETI, либо информировать устройство об окончании обработки прерывания программно, как это обычно делается в вычислительных системах на базе микропроцессора Intel 8080.

Инструкция RETN, помимо занесения в счётчик команд адреса возврата, устанавливает флажок IFF1 в соответствии с текущим состоянием флажка IFF2, т.е. восстанавливает состояние разрешения или запрещения маскируемых прерываний на момент возникновения немаскируемого прерывания.

Инструкции RST обеспечивают переход к одной из восьми подпрограмм, первые инструкции которых располагаются соответственно по адресам 0000h, 0008h, 0010h, 0018h, 0020h, 0028h, 0030h и 0038h. В стек заносится адрес возврата, то есть адрес команды, следующей непосредственно за инструкцией RST, после чего производится переход на начало соответствующей подпрограммы.

Ни одна из инструкций перехода не оказывает влияния на состояние флажков.


Содержание раздела