Команды условных вызовов и возврата

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

Общая схема выполнения условных вызовов подпрограмм команд

CALL if cnd (вызов, если выполнено условие cnd)

Условиями могут быть выбранные состояния битов регистра признаков. Например, Z=0, Z=1, CY=0, CY=1, так далее. Для каждого из пяти битов признаков возможны по два условия. Поэтому имеется всего 10 команд условных переходов.

Общий формат мнемоник таких команд

Ccnd adr

где adr – адрес перехода для случая выполнения условия, а вместо точек добавляются символы выбранного условия:

CNZ adr – вызов, если обнаружен ненулевой результат,

CZ adr – вызов, если обнаружен нулевой результат,

CNC adr – вызов, если обнаружено отсутствие переноса,

CC adr – вызов, если обнаружен наличие переноса,

CPO adr – вызов, если обнаружено нечётное число битов “1” результата,

CPE adr – вызов, если обнаружено чётное число битов “1” результата,

CP adr – вызов, если обнаружен положительный знак результата,

CM adr – вызов, если обнаружен отрицательный знак результата.

Все команды – трёхбайтные по формату. В отличие от большинства других, эти команды могут иметь два варианта времени выполнения, в зависимости от результата анализа условия.

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

Другой вариант – когда обнаружено выполнение условия, поставленного командой. Тогда процессору потребуется выполнить в полном объёме все действия команды вызова подпрограммы, включая 2 машинных цикла записи в стек. И, в целом, тогда на команду потратится 17 тактов.

Общая схема выполнения условных возвратов из подпрограмм команд

RET if cnd (возврат, если выполнено условие cnd)

Общий формат мнемоник таких команд R.., где вместо точек добавляются символы выбранного условия:

RNZ –возврат, если обнаружен ненулевой результат,

RZ – возврат, если обнаружен нулевой результат,

RNC – возврат, если обнаружено отсутствие переноса,

RC – возврат, если обнаружен наличие переноса,

RPO – возврат, если обнаружено нечётное число битов “1” результата,

RPE – возврат, если обнаружено чётное число битов “1” результата,

RP – возврат, если обнаружен положительный знак результата,

RM – возврат, если обнаружен отрицательный знак результата.

Все команды – однобайтные по формату. В отличие от большинства других, эти команды могут иметь два варианта времени выполнения, в зависимости от результата анализа условия.

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

Другой вариант – когда обнаружено выполнение условия, поставленного командой. Тогда процессору потребуется выполнить в полном объёме все действия команды возврата из подпрограммы, включая 2 машинных цикла чтения из стека. И в целом тогда на команду потратится 10 тактов.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: