Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МП устройства СУ / Конспект лекций (дополнительный, обновленный).doc
Скачиваний:
127
Добавлен:
19.03.2015
Размер:
552.45 Кб
Скачать

13.9.4. Команды передачи управления.

При выполнении программы содержимое счетчика команд PC непрерывным образом увеличивается, поэтому команды извлекаются из памяти и выполняются в порядке возрастания их адресов. Ход выполнения программы можно изменить, если в счетчик команд PC поместить адрес, отличающийся от адреса очередной команды. В этом случае микропроцессор перейдет к выполнению программы с места, указанного новым адресом (адресом перехода). Адрес перехода может указываться напрямую в команде в виде числа или метки, а также косвенно содержаться в регистровой паре или специальном адресном указательном регистре, указанными в команде перехода. При выполнении команды перехода адрес, указанный в команде, записывается в счетчик команд PC, причем прежнее содержимое счетчика команд теряется. Переход может быть безусловным или условным. Если безусловные переходы реализуются всегда, то условные - только при истинном значении проверяемого условия условия. Если условие не удовлетворяется, то выполняется следующая команда программы.

1. Команда JMP addr является командой безусловного перехода. Эта команда адрес addr, указанный в ней в качестве операнда, записывает в счетчик команд PC. После отработки этой команды программа начнет выполняться с нового адреса, помещенного в счетчик команд.

2. Команда J-CON addr является командой условного перехода. В качестве условий рассматриваются нулевые или единичные значения флагов ZF, СF, РF, SF и OF флагового регистра. В место сокращения -CON подставляется мнемоника конкретного условия, при котором должен произойти переход: NZ - ненулевой результат; Z - нулевой результат; NC - отсутствие переноса в результате; C - наличие переноса в результате; PO - нечетное число единиц в коде результата; PE - четное число единиц в коде результата; P - неотрицательный результат; M - отрицательный результат. Например, команда условного перехода J-CON addr записывается JNZ addr, если условие перехода заключается в том, что не был установлен флаг нуля, т.е. ZF=0 (ранее выполненная команда не дала нулевого результата). При выполнении этого условия адрес перехода, содержащийся в команде в качестве операнда запишется в счетчик команд PC и микропроцессор перейдет к выполнению программы с нового адреса. Если условие не удовлетворится, т.е. ZF=1 (предыдущий результат был равен нулю), то выполняется команда, непосредственно следующая в программе за командой JNZ addr.

Если в программе встречаются одинаковые последовательности команд, то для того, чтобы не записывать такие последовательности по несколько раз в памяти, их выделяют в подпрограммы. Переход от выполнения программы к выполнению подпрограммы производится с помощью команд вызова подпрограмм. При выполнении такой команды в счетчик команд PC также записывается адрес, который указывается в команде (адрес первой команды подпрограммы), но предварительно прежнее содержимое счетчика команд PC, т.е. адрес команды, которая следует в программе за командой вызова (адрес возврата или точка возврата из подпрограммы), запоминается в стеке.

3. Команда CALL addr является командой вызова подпрограммы. Команда записывает в счетчик команд PC адрес первой команды подпрограммы, указанный в команде, и предварительно в стек на сохранение отправляет адрес возврата в основную подпрограмму (адрес команды, следующей за командой CALL addr). При этом, поскольку в стек записывается два байта адреса, указатель стека SP в зависимости от типа микропроцессора смещается вверх или вниз на две ячейки. В некоторых микропроцессорах команды вызова подпрограмм могут быть как безусловными, так и условными.

4. Команда RET служит для возврата из подпрограммы. Она является последней командой любой подпрограммы. По этой команде адрес возврата, сохраненный ранее в стеке при уходе на подпрограмму, пересылается обратно в счетчик команд PC. При этом указатель стека SP смещается на две ячейки в обратном направлении. После возврата из подпрограммы работа программы продолжится с того места, где она была прервана обращением к подпрограмме. Поскольку в стеке реализуется принцип «последний записанный считывается первым», то в случае вызова вложенных подпрограмм во время уже выполняющихся подпрограмм (как и в случае многоуровневых прерываний), адреса возврата будут извлекаться из стека в обратном порядке по сравнению с их размещением в стеке при уходе на подпрограммы. Таким образом, работа программы микропроцессора и последовательность вызова подпрограмм и возврата из них не будут нарушены.