Тема 5.2 Команды организации подпрограмм. Возврат значений. Рекурсивные подпрограммы и сопрограммы.
Тема 5. 2 Команды организации подпрограмм. Возврат значений. Рекурсивные подпрограммы и сопрограммы.
а) Вызов подпрограммы безусловный
7 0 При выполнении этой команды никаких проверок не производится, т. е. вызов подпрограммы производится в любом случае. Команда занимает три байта u выполняется за 5 машинных циклов (17 тактов). б) Условный вызов подпрограммы Переход к подпрограмме происходит только в том случае, если выполняется проверяемое условие. При этом: [SP-1] [SP-2] (PC); SP (SP) –2; PC < B3> < B2> В этом случае команда выполняется за 5 циклов (17 тактов). Если проверяемое условие не выполняется, то переход к подпрограмме не происходит и выполняется следующая команда программы с адресом PC = (PC) +3. В этом случае команда выполняется за 3 цикла (11 тактов).
7 0
Значение разрядов ССС выбирается в зависимости от проверяемого условия:
в) Возврат из подпрограммы безусловный
7 0 Команда выполняется за три машинных цикла (10 тактов). г) Возврат из подпрограммы условный
7 0
Запустите свой курс на платформе за 30 минут!
Если проверяемое условие выполняется, тоPC [SP] [SP-1]; SP (SP) + 2 и происходит выход из подпрограммы в точку, адрес которой записан в стеке. В этом случае команда выполняется за три машинных цикла (11 тактов). Если это условие не выполняется, то возврата не происходит и выполняется следующая команда подпрограммы, т. е. PC = (PC) + 1 В этом случае команда выполняется в течение одного машинного цикла (5 тактов). Значение разрядов ССС команды определяется проверяемым условием:
При выполнении команд возврата (в и г) МП извлекает из стека значение программного счетчика, при котором произошел переход из программы предыдущего уровня и загружает это значение в счетчик команд. Команде " возврат из подпрограммы" ничего не сообщается относительно того, какого уровня вложения выполняется подпрограмма и сколько раз происходил вызов этой подпрограммы. Выполняя эту команду МП просто возвращается к тому значению программного счетчика, которое было последним загружено в стек. Примеры: 0AF3) CALL BEEP BEEP: 0BC0)
0BD4) RET
0A12) CPO L1 L1: 0AFE)
0800) CP L1
L1: 0C54)
3456) CC M0 M0: 0807)
Контрольные вопросы и задания 1. Объясните назначение команд переходов. 2. В чем состоят различия в работе команд переходов и вызова подпрограмм? 3. Какую длину имеют команды вызова и возврата из подпрограмм и почему?
Запустите свой курс на платформе за 30 минут! 4. На какие группы делятся команды переходов и работы с подпрограммами? 5. Какой или какие флаги не используются в командах переходов и работы с подпрограммами? 6. Как изменяются стек и SP при выполнении команды CALL? 7. Как изменяются стек и SP при выполнении команды RET? 8. Как изменяется PC, если проверяемое условие в команде условного вызова подпрограммы не выполняется? 9. Как изменяется PC, если проверяемое условие в команде условного возврата из подпрограммы не выполняется? 10. Найдите ошибку в данной программе:
0800) CALL L0 RST1 L0: 0900) CMA PUSH PSW RET
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|