При естественной адресации адрес следующей команды получается из адреса выполняемой команды увеличением его на шаг адресации (1, 2, 4 и т.д. в зависимости от количества байт в команде). Производится эта операция путем автоматической модификации содержимого СчК после выполнения текущей команды.Для управления ходом выполнения программ и организации ветвлений в систему команд процессоров с естественной адресацией были введены команды
Рисунок 4.8- Формат команд условного и безусловного переходов
В разных машинах реализация этих команд различная, однако общий подход следующий: содержимое поля адреса перехода команды загружается в СчК, после чего процессор продолжает выполнение программы с нового адреса.
Команды безусловного перехода предписывают совершать переход по программе независимо от каких-либо условий. Существуют команды безусловного перехода по косвенному адресу. В этом случае в коде команды указывают адрес ячейки, в которой хранится адрес перехода.
При условном переходе адрес следующей команды зависит от некоторого условия, полученного в результате выполнения предыдущей. Если условие выполняется, то процессор переходит к выполнению программы по адресу, указанному в адресной части команды, если нет, то к команде, следующей непосредственно за командой условного перехода.
4.9 Процедура выполнения команд вызова подпрограмм
Другим типом команд передачи управления являются команды вызова подпрограмм. Их особенность заключается в том, что по окончанию выполнения подпрограммы они должны обеспечить возврат к выполнению программы, из которой подпрограмма была вызвана. Для этого адрес возврата должен быть запомнен, для чего в СчК формируется продвинутый адрес, который затем сохраняется в памяти (или в стеке). Для перехода к выполнению подпрограммы в СчК заносится адресная часть команды ее вызова. По окончанию выполнения подпрограммы адрес следующей команды основной программы, ранее сохраненный в стеке, вызывается из него, заносится в СчК и выполнение программы продолжается. Для организации возврата в основную программу подпрограмма должна оканчиваться командой “Возврат” (“RETURN”). Кроме нее существует также и команда “Условного возврата”.
Формат команды “Перехода к подпрограмме” приведен на рисунке 4.9.1.
Рисунок 4.9.1- Формат команды “Перехода к подпрограмме”
Процесс выполнения команд “Вызов подпрограмм” проиллюстрирован на рисунке 4.9.2. Короткий отрезок прямой на этом рисунке соответствует одной команде, длинный- переходу к выполнению подпрограммы или возврату из нее.
Рисунок 4.9.2 – Процесс выполнения команды “Вызов подпрограммы”