Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП по циклу ЛР ОМПТ.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
675.5 Кб
Скачать

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

Команда CALL adr безусловного вызова подпрограммы, расположенной по адресу adr, выполняется по следующей схеме:

stack(PC)

(PC)adr

На момент завершения дешифрации данной команды в счётчике команд процессора (PC) сформируется адрес команды стоящей в программе вслед за данной командой. Выполнением данной команды сначала запишется в стек этот адрес из (PC), а затем загрузкой в счётчик команд двухбайтного адреса adr из состава выполняемой команды управление процессором будет передано первой команде подпрограммы. Команда занимает в памяти 3 байта, состоит из 5 машинных циклов и требует на выполнение 17 тактов, то есть это одна из наиболее длительных по времени команд.

Команды вызова подпрограмм типа RST N, где N – номер команды (0..7), также обеспечивают безусловный вызов подпрограммы. Но при этом адрес подпрограммы фиксирован и определяется номером команды adr=N*8. Например, для команды RST 0 адрес подпрограммы будет 0000h, для RST 1 адрес подпрограммы будет 0008h, для RST 2 адрес подпрограммы будет 0010h и т.д. По формату команда однобайтная, требует на выполнение 11 тактов. Выполняются по той же схеме, что и команда CALL adr.

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

Рис. 1.1. Пример организации вызовов подпрограмм

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

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

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

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 тактов.