Cтраница 4
Подпрограмма преобразования четырехразрядного десятичного числа в эквивалентное двоичное число. [46] |
Как в МП 8080 запоминается адрес возврата при прерывании до выполнения подпрограммы обслуживания. [47]
Подпрограмму, которая хранит свой адрес возврата, все параметры и локальные переменные в соответствии с соглашением по использованию стека можно вызывать рекурсивно без появления ошибок. Это объясняет, почему процедуры языка Паскаль могут вызывать рекурсивно друг друга, а подпрограммы языка Фортран не могут этого делать вследствие того, что в языке Фортран обычно используются назначаемые фиксированные ячейки памяти для хранения параметров. [48]
Для этого в стеке запоминается адрес возврата ( CS и IP) и содержимое регистра флагов F, а также содержимое тех регистров, которые потребуются для выполнения подпрограммы обработки прерывания. Содержимое регистров CS, IP и F запоминается и восстанавливается автоматически, а для запоминания и последующего восстановления содержимого других регистров МП должны быть предусмотрены соответствующие команды в начале и конце подпрограммы обработки прерываний. Следует отметить, что в стек включается скорректированное содержимое указателя команд IP, соответствующее адресу команды, перед которой МП начал обслуживать прерывание. Необходимость коррекции вызвана тем, что IP адресует команды с опережением из-за существования внутренней очереди команд. [49]
Программа SERV должна ( зная адрес возврата) извлечь команду, вызвавшую прерывание. Затем она должна определить, какая это команда: MUL или DIV. Команда MUL имеет код 070 в семи левых битах, за которыми следуют три бита под регистр-приемник и шесть битов под источник. Нужно также позаботиться о том, чтобы в случае какой-либо иной причины прерывания программа SERV выдавала подходящее сообщение об ошибке. Если же причиной прерывания является команда MUL или DIV, управление должно быть передано на программу соответственно умножения или деления, после завершения которых все в машине должно выглядеть в точности так же, как если бы команды выполняла аппаратура. [50]
Воздействие процедуры на стек. [51] |
Команда RET извлекает из стека адрес возврата. [52]
При этом командой КОЧИ формируется адрес возврата в основную программу при входе в подпрограмму, а командой КОВЫ - выход из подпрограммы и возврат в основную программу. [53]
Операции возврата из подпрограмм восстанавливают запомненный адрес возврата и дают возможность возвратиться к вызывающей программе и продолжить вычисления, начиная с команды, следующей за командой вызова. [54]
Команда CALL осуществляет функции запоминания адреса возврата и передачи управления процедуре. [55]
При выполнении команды из этого регистра адрес возврата передается в СчК, и исходное содержимое регистра восстанавливается из стека. [56]