Команды перехода, называемые также командами ветвления, позволяют организовать в программах циклы и разветвления. Команды вызова подпрограмм дают возможность сократить объем разрабатываемых программ за счет повторного использования подпрограмм. Наличие в микропроцессоре стека с указателем стека делает возможным возврат в главную программу после выполнения подпрограммы с помощью команд возврата.
Команды перехода и вызова подпрограмм можно разделить на следующие группы:
· команды переходов (JMP, JC, JNC, JZ, JNZ, JP, JM, JPO, JPE);
· команды вызова подпрограмм (CALL, CC, CNC, CZ, CNZ, CP, CM, CPO, CPE);
· команды возврата (RET, RC, RNC, RZ, RNZ, RP, RM, RPO, RPE);
· команды рестартов (RST0, RST1, RST2, RST3, RST4, RST5, RST6, RST7);
· команда записи содержимого H-пары в программный счетчик (PCHL).
Ни одна из команд этой группы не изменяет содержимое регистра признаков F.
Формат, байтов | Время тактов | Код | Мнемо- код | Наименование команды | Описание операции | |
C3 | JMP B3B2 | Безусловный переход | В (РС)-регистр записывается адрес перехода (В3В2) | |||
DA | JC B3B2 | Переход, если перенос | Если условие верно, то в (РС)-регистр записывается адрес перехода (В3В2), иначе переход к следующей команде (РС)=(РС)+3 | |||
D2 | JNC B3B2 | Переход, если не перенос | Если условие верно, то в (РС)-регистр записывается адрес перехода (В3В2), иначе переход к следующей команде (РС)=(РС)+3 | |||
CA | JZ B3B2 | Переход, если нуль | Если условие верно, то в (РС)-регистр записывается адрес перехода (В3В2), иначе переход к следующей команде (РС)=(РС)+3 | |||
C2 | JNZ B3B2 | Переход, если не нуль | Если условие верно, то в (РС)-регистр записывается адрес перехода (В3В2), иначе переход к следующей команде (РС)=(РС)+3 | |||
F2 | JP B3B2 | Переход, если плюс | Если условие верно, то в (РС)-регистр записывается адрес перехода (В3В2), иначе переход к следующей команде (РС)=(РС)+3 | |||
FA | JM B3B2 | Переход, если минус | Если условие верно, то в (РС)-регистр записывается адрес перехода (В3В2), иначе переход к следующей команде (РС)=(РС)+3 | |||
EA | JPE B3B2 | Переход, если четно | Если условие верно, то в (РС)-регистр записывается адрес перехода (В3В2), иначе переход к следующей команде (РС)=(РС)+3 | |||
E2 | JPO B3B2 | Переход, если нечетно | Если условие верно, то в (РС)-регистр записывается адрес перехода (В3В2), иначе переход к следующей команде (РС)=(РС)+3 | |||
CD | CALL B3B2 | Безусловный вызов подпрограммы | В стеке сохраняется адрес следующей команды (РС)= (РС)+3, затем в (РС)-регистр записывается адрес вызова подпрограммы (В3В2) | |||
11/17 | DC | CC B3B2 | Вызов подпрограммы, если перенос | Если условие верно, то в стеке сохраняется адрес следующей команды (РС)=(РС)+3, затем в (РС)- регистр записывается адрес вызова подпрограммы (В3В2). Иначе переход к следующей команде (РС)=(РС)+3 | ||
11/17 | D4 | CNC B3B2 | Вызов подпрограммы, если не перенос | Если условие верно, то в стеке сохраняется адрес следующей команды (РС)=(РС)+3, затем в (РС)- регистр записывается адрес вызова подпрограммы (В3В2). Иначе переход к следующей команде (РС)=(РС)+3 | ||
11/17 | CC | CZ B3B2 | Вызов подпрограммы, если нуль | Если условие верно, то в стеке сохраняется адрес следующей команды (РС)=(РС)+3, затем в (РС)- регистр записывается адрес вызова подпрограммы (В3В2). Иначе переход к следующей команде (РС)=(РС)+3 | ||
11/17 | C4 | CNZ B3B2 | Вызов подпрограммы, если не нуль | Если условие верно, то в стеке сохраняется адрес следующей команды (РС)=(РС)+3, затем в (РС)- регистр записывается адрес вызова подпрограммы (В3В2). Иначе переход к следующей команде (РС)=(РС)+3 | ||
11/17 | F4 | CP B3B2 | Вызов подпрограммы, если плюс | Если условие верно, то в стеке сохраняется адрес следующей команды (РС)=(РС)+3, затем в (РС)- регистр записывается адрес вызова подпрограммы (В3В2). Иначе переход к следующей команде (РС)=(РС)+3 | ||
11/17 | FC | CM B3B2 | Вызов подпрограммы, если минус | Если условие верно, то в стеке сохраняется адрес следующей команды (РС)=(РС)+3, затем в (РС)- регистр записывается адрес вызова подпрограммы (В3В2). Иначе переход к следующей команде (РС)=(РС)+3 | ||
11/17 | EC | CPE B3B2 | Вызов подпрограммы, если четно | Если условие верно, то в стеке сохраняется адрес следующей команды (РС)=(РС)+3, затем в (РС)- регистр записывается адрес вызова подпрограммы (В3В2). Иначе переход к следующей команде (РС)=(РС)+3 | ||
11/17 | E4 | CPO B3B2 | Вызов подпрограммы, если нечетно | Если условие верно, то в стеке сохраняется адрес следующей команды (РС)=(РС)+3, затем в (РС)- регистр записывается адрес вызова подпрограммы (В3В2). Иначе переход к следующей команде (РС)=(РС)+3 | ||
C9 | RET | Безусловный возврат | В (РС)-регистр записывается адрес из верхушки стека | |||
5/11 | D8 | RC | Возврат, если перенос | Если условие верно, то в (РС)-регистр записывается адрес из верхушки стека. Иначе переход к следующей команде (РС)=(РС)+1 | ||
5/11 | D0 | RNC | Возврат, если не перенос | Если условие верно, то в (РС)-регистр записывается адрес из верхушки стека. Иначе переход к следующей команде (РС)=(РС)+1 | ||
5/11 | C8 | RZ | Возврат, если нуль | Если условие верно, то в (РС)-регистр записывается адрес из верхушки стека. Иначе переход к следующей команде (РС)=(РС)+1 | ||
5/11 | C0 | RNZ | Возврат, если не нуль | Если условие верно, то в (РС)-регистр записывается адрес из верхушки стека. Иначе переход к следующей команде (РС)=(РС)+1 | ||
5/11 | F0 | RP | Возврат, если плюс | Если условие верно, то в (РС)-регистр записывается адрес из верхушки стека. Иначе переход к следующей команде (РС)=(РС)+1 | ||
5/11 | F8 | RM | Возврат, если минус | Если условие верно, то в (РС)-регистр записывается адрес из верхушки стека. Иначе переход к следующей команде (РС)=(РС)+1 | ||
5/11 | E8 | RPE | Возврат, если четно | Если условие верно, то в (РС)-регистр записывается адрес из верхушки стека. Иначе переход к следующей команде (РС)=(РС)+1 | ||
5/11 | E0 | RPO | Возврат, если нечетно | Если условие верно, то в (РС)-регистр записывается адрес из верхушки стека. Иначе переход к следующей команде (РС)=(РС)+1 | ||
C7 | RST 0 | Рестарт по 0-му уровню | В стеке сохраняется адрес следующей команды (РС)= (РС)+1, затем в (РС)-регистр записывается адрес вызова подпрограммы (РС)=8*№рестарта | |||
CF | RST 1 | Рестарт по 1-му уровню | В стеке сохраняется адрес следующей команды (РС)= (РС)+1, затем в (РС)-регистр записывается адрес вызова подпрограммы (РС)=8*№рестарта | |||
D7 | RST 2 | Рестарт по 2-му уровню | В стеке сохраняется адрес следующей команды (РС)= (РС)+1, затем в (РС)-регистр записывается адрес вызова подпрограммы (РС)=8*№рестарта | |||
DF | RST 3 | Рестарт по 3-му уровню | В стеке сохраняется адрес следующей команды (РС)= (РС)+1, затем в (РС)-регистр записывается адрес вызова подпрограммы (РС)=8*№рестарта | |||
E7 | RST 4 | Рестарт по 4-му уровню | В стеке сохраняется адрес следующей команды (РС)= (РС)+1, затем в (РС)-регистр записывается адрес вызова подпрограммы (РС)=8*№рестарта | |||
EF | RST 5 | Рестарт по 5-му уровню | В стеке сохраняется адрес следующей команды (РС)= (РС)+1, затем в (РС)-регистр записывается адрес вызова подпрограммы (РС)=8*№рестарта | |||
F7 | RST 6 | Рестарт по 6-му уровню | В стеке сохраняется адрес следующей команды (РС)= (РС)+1, затем в (РС)-регистр записывается адрес вызова подпрограммы (РС)=8*№рестарта | |||
FF | RST 7 | Рестарт по 7-му уровню | В стеке сохраняется адрес следующей команды (РС)= (РС)+1, затем в (РС)-регистр записывается адрес вызова подпрограммы (РС)=8*№рестарта | |||
E9 | PCHL | Запись содержимого Н- пары регистров | В (РС)-регистр записывается содержимое (HL)-пары |