Cтраница 2
Она состоит из 3 байт: 1 байт - для кода операции ( CALL) и 2 байта для указания адреса первой команды подпрограммы. [16]
Затем МП сбрасывает флажки IF и TF, выполняет загрузку в стек старого содержимого регистров F и CS, выбирает код операции первой команды подпрограммы обслуживания и вталкивает в стек прежнее значение IP. Эти действия он выполняет в указанной последовательности. После записи в стек старого содержимого IP МП возобновляет свою обычную работу. [17]
Здесь для перехода к подпрограмме использована команда BR, передающая адрес, помещенный в регистре 15, в счетчик адреса команд, передающая тем самым управление первой команде подпрограммы. [18]
Для ЭВМ Электроника 60, у которой цикл процессора равет 400 не, ожидание прерывания не превосходит 22 мкс, а время между предоставлением прерывания и выборкой первой команды подпрограммы обслуживания прерываний не превосходит 19 мкс. [20]
Это означает, что должен быть выполнен переход к подпрограмме D. Первый байт адреса первой команды подпрограммы D хранится в ячейке памяти с этим адресом. Увеличение кода 02061в на 1 дает адрес ячейки памяти, в которой хранится второй байт адреса. [21]
Другой способ обеспечения возврата в основную программу состоит в выполнении специальной команды, предназначенной для этих целей ( гл. В этом случае при переходе к первой команде подпрограммы автоматически запоминается адрес команды перехода в некотором счетчике или индекс-регистре. Тогда в ячейке 677 помещается специальная команда перехода, которая использует содержимое этого счетчика или индекс-регистра и осуществляет возврат в основную программу. Для этих целей принимается некоторое общее соглашение между лицами, составляющими подпрограммы, и лицами, использующими эти подпрограммы, относительно ячеек, отводимых специально для этих целей. Аналогичным образом можно условиться 0 том, что вычисленное значение cosx должно быть помещено в ячейку 675, и, когда управление из подпрограммы будет возвращено в основную программу, последняя должна переслать содержимое ячейки 675 в некоторую рабочую ячейку для его дальнейшего использования. Конечно, имеются и другие способы решения этих двух задач. В основной программе могла бы просто быть команда с указанием, где находится значение аргумента х, которое необходимо в подпрограмме, и адрес, куда должно быть помещено вычисленное значение cos х, а нужные команды пересылок включались бы в саму подпрограмму. В этих случаях команды основной программы, содержащие задаваемую информацию, должны использоваться в подпрограмме для модификации некоторых ее команд. [22]
Эти команды передают числа е и А. Команда ( 34) передает управление первой команде подпрограммы и команду безусловного возврата в конец этой подпрограммы. [23]
Кроме того, содержимое ячейки, номер которой указан в 1А, за - - сылается в стандартную ячейку, предназначаемую для хранения аргументов стандартной программы. При этом ячейка е номером k содержит первую команду подпрограммы и ячейка с номером k2 содержит код команды безусловного перехода и является последней командой подпрограммы. [24]
При выполнении прерывания в верхний уровень стека записывается увеличенное на единицу значение счетчика команд ( ранее записанные адреса возвратов опускаются на более нижние уровни), а первый разряд регистра EN устанавливается в О, блокируя последующие прерывания. При этом в счетчик команд автоматически заносится адрес первой команды подпрограммы обработки прерываний. Для разрешения последующих прерываний необходимо непосредственно перед командой возврата из подпрограммы обработки прерывания выполнить команду загрузки регистра режима. [25]
Порядок обращения к подпрограмме. [26] |
Правило вычислений, определяемое процедурой, представляется в машине в виде совокупности команд, образующих подпрограмму. Яр, где БП-обозначение операции безусловного перехода и ( 3 - адрес первой команды подпрограммы. После выполнения подпрограммы производится возврат на продолжение программы. Возврат из подпрограммы программируется с использованиемкоманды возврата, хранимой в ячейке у - Команда возврата является последней командой, выполняемой в программе. [27]
Необходимо отметить, что при обращении к таблице указателей сегментные регистры не используются. После установления нового содержимого регистров IP и CS микропроцессор выбирает код операции первой команды подпрограммы и затем выполняет обычные действия по заполнению очереди команд, выполнению команд и обмену данными. [28]
Соответствующие импульсы ЦУ через блок ЦУОп переключают управление командами с блока ЦУК на блок МУК, гасят код, имевшийся на блоке МУК, и передают на него по КША код с АЗБЗК. Затем код, полученный на блоке МУК, соответствующим импульсом ЦУ передается с МУК по КША и происходит выборка кода первой команды подпрограммы из ячейки ОЗУ, соответствующей переданному коду номера команды. Выбранный код команды по КШ передается в БЗК, и машина приступает к выполнению заданной подпрограммы. [29]
Для обращения к закрытой подпрограмме применяется специальный оператор. С его помощью при написании рабочей программы осуществляется связь основной программы с подпрограммой. При трансляции ассемблер определяет адрес, по которому при выполнении этой специальной команды основная программа обращается за первой командой подпрограммы. При записи тело подпрограммы выделяется двумя операторами, обозначающими ее начало и конец. Эти операторы эквивалентны псевдокомандам макрокоманды, но, в отличие от открытой подпрограммы они не включаются в основную программу. [30]