Cтраница 1
Значение счетчика команд в данном случае не увеличивается. [1]
При обработке прерываний значение счетчика команд хранится в стековой памяти, управление программой переходит по команде JMP, формируемой транслятором. [2]
При возникновении прерывания в памяти сохраняется только значение счетчика команд ( 1C), и в этот счетчик записывается новое значение. [3]
Указание адреса не требуется, так как значение счетчика команд автоматически увеличивается на единицу после записи и декодирования команды. Тем самым счетчик команд ( BZ) уже содержит адрес операнда. При помощи команд этого вида адресации возможна быстрая загрузка регистров операндами. Прежде всего такая адресация применяется в микро - ЭВМ. [4]
Когда выполнение подпрограммы заканчивается, из стека извлекается значение счетчика команд. По завершении подпрограммы второго уровня вложения из стека изымается значение счетчика команд подпрограммы первого уровня вложения. Оно загружается в счетчик команд, после чего выполнение указанной подпрограммы может быть возобновлено, начиная с команды, которая следовала за командой ВЫЗОВ ПОДПРОГРАММЫ. Когда завершается выполнение подпрограммы первого уровня, из стека опять извлекается очередное значение счетчика команд. [6]
При отйосительной адресации исполнительный адрес операнда определяется относительно значения счетчика команд. В этом случае адрес операнда, указанный в команде, складывается с содержимым счетчика команд. При постраничной организации памяти адрес операнда команды является адресом внутри определенной страницы, а номер страницы определен счетчиком команд. Иногда для указания страниц используются специальные регистры ЦП. [7]
Модификация программы, приведенной на, после замены множества команд, предназначенных для отрицательного приращения и проверки значения счетчика, на команды вызова подпрограмм. [8] |
При выполнении команды ВОЗВРАТ ИЗ ПОДПРОГРАММЫ микропроцессор извлекает из стека значение счетчика команд, при котором произошел выход из программы предыдущего уровня, и загружает это значение в счетчик команд. Команде ВОЗВРАТ ИЗ ПОДПРОГРАММЫ ничего не сообщается относительно того, какого уровня вложения выполняется подпрограмма и сколько раз происходил вызов этой подпрограммы. [9]
При выполнении прерывания в верхний уровень стека записывается увеличенное на единицу значение счетчика команд ( ранее записанные адреса возвратов опускаются на более нижние уровни), а первый разряд регистра EN устанавливается в О, блокируя последующие прерывания. При этом в счетчик команд автоматически заносится адрес первой команды подпрограммы обработки прерываний. Для разрешения последующих прерываний необходимо непосредственно перед командой возврата из подпрограммы обработки прерывания выполнить команду загрузки регистра режима. [10]
Запросы на прерывание и адреса векторов прерываний в процессоре 6809. [11] |
При поступлении запроса на прерывание по линии FIRQ в стек записывается только значение счетчика команд и разрядов регистра состояния; при этом уменьшается время выполнения программ обработки прерывания, в которых не используются многие либо вообще все регистры. Разряд Е ( Полное состояние в стеке) в сохраняемом регистре СС содержит информацию о том, содержимое всех ли регистров было занесено в стек. [12]
Прерванная команда возвращается к тому состоянию, с которого она начиналась, и значение счетчика команд приостановленного процесса ( в стеке или в системной ячейке памяти) корректируется так, чтобы указывать на эту команду. [13]
Команды выполняются во времени последовательно, в порядке, определенном содержащейся в них информацией, либо в соответствии со значением счетчика команд. В наиболее совершенных машинах допускается возможность совмещения исполнения данной команды с выборкой из памяти следующей, но реализация этой функции происходит вне сферы деятельности программиста. [14]
Во многих процессорах предусмотрены прерывания, аналогичные прерываниям по линии FIRQ, когда при приеме запроса на прерывание в стек загружается только значение счетчика команд и разрядов состояния. Содержимое всех остальных регистров, состояние которых может быть нарушено, должно сохраняться в стековой памяти с помощью команды PUSH в начале программы обработки прерывания и восстанавливаться с помощью команды POP по ее окончании. [15]