Cтраница 2
Параметры программ, составленных на языке Паскаль и языке ассемблера. [16] |
В процессорах, не располагающих аппаратным указателем стека ( например, 9900), предусмотрены команды вызова подпрограммы, которые сохраняют адрес возврата в заданном регистре процессора. Когда используются вложенные вызовы подпрограмм, то только от программиста зависит, где хранить содержимое этого регистра - в специальных ячейках памяти или в стеке. [17]
Такой программный переход можно сделать зависимым от выполнения некоторых условий, устанавливаемых в процессе выполнения программы; это осуществляется с помощью команд условных переходов и команд вызова подпрограмм. [18]
Схема системы приоритетных прерываний с учетом приоритета. [19] |
Еще один довольно простой способ организации обслуживания прерываний-использование программы опроса, блок-схема которой представлена на рис. 12.23. При возникновении запроса на прерывание запускается программа опроса; запуск программы опроса осуществляется так же, как выполняется команда вызова подпрограммы. Единственное отличие между этим способом использования программы опроса и способом, описанным выше, заключается в том, что запуск программы опроса в данном случае происходит тогда, когда устройство, нуждающееся в обслуживании, подаст сигнал запроса на прерывание. При таком способе запуска программы опроса устройство, подавшее запрос на прерывание, будет обслужено быстрее, чем при обычном способе программного обращения к программе опроса. [20]
Большинство процессоров имеет особый регистр ( SP), указывающий стек, в котором располагаются адреса возврата. Команды вызова подпрограммы ( JSR или CALL) записывают адреса возврата в стек, а команды выхода из подпрограммы ( RTS или RET) осуществляют выборку адресов возврата из стека. [21]
При организации работы с подпрограммами для сохранения адреса возврата используется стек. Команды вызова подпрограмм CALL адрес работают следующим образом. Когда процессор считывает из памяти команду вызова подпрограммы, программный счетчик увеличивается и показывает на команду, следующую за командой вызова подпрограммы. С этой команды выполнение программы должно продолжиться после окончания работы подпрограммы. Таким образом, программный счетчик после выборки команды вызова подпрограммы содержит адрес возврата. При выполнении обращения к подпрограмме процессор сохраняет содержимое программного счетчика в стеке. Адрес, с которого начинается подпрограмма, вычисляется процессором по адресному полю команды вызова подпрограммы и помещается в программный счетчик. Процессор приступает к выполнению подпрограммы. [22]
Сегментная адресация [ Исполнительныйа9реа. [23] |
Для упрощения перехода и возврата из подпрограмм используются стековая память и ряд специальных команд. Имеются команды вызова подпрограммы и возврата из подпрограммы. Дополнительную гибкость в организации работы с подпрограммами обеспечивают оригинальные команды вызова по условию подпрограммы и возврата по условию из нее. [24]
Во многих отношениях команды вызова подпрограмм аналогичны командам перехода. При выполнении команд вызова подпрограмм по условию выясняются значения разрядов регистра состояния; в зависимости от этих значений происходит или нет вызов подпрограмм. [25]
Область сохранения различными компиляторами организуется по-разному. Например, компилятор PL / I формирует в объектном модуле команды вызова подпрограмм, которые будут резервировать область сохранения при исполнении загрузочного модуля, а компилятор ФОРТРАН организует область сохранения непосредственно внутри вызывающего объектного модуля. [26]
Область сохранения различными компиляторами организуется по-разному. Например, компилятор PL / I формирует в объектном модуле команды вызова подпрограмм, которые будут резервировать область сохранения при исполнении загрузочного модуля, а компилятор ФОРТРАН организует область сохранения непосредственно внутри вызывающего объектного модуля. [27]
Если в программе встречаются одинаковые последовательности команд, то для того чтобы не записывать такие последовательности по нескольку раз в памяти, их выделяют в подпрограммы. Переход от выполнения программы к выполнению подпрограммы производится с помощью команды вызова подпрограмм. Команды вызова подпрограмм и возврата из подпрограмм, как и команды переходов, бывают безусловными и условными. [28]
Состояние стека микропроцессора во время выполнения подпрограммы второго уровня. [29] |
В этом разделе мы будем изучать команды, позволяющие работать со стеком микропроцессора. Нам известно, что стек микропроцессора применяется либо при выполнении команд вызова подпрограмм, либо при обработке прерываний. [30]