Команды управления выполнением программы

Команды безусловной и условной передачи управления

Как уже говорилось выше, формирование при выполнении программы адреса следующей команды с помощью регистра — счетчика команд позволяет автоматизировать последовательную выборку составляющих программу команд без необходимости каким-либо образом указывать в команде местоположение команды, которую надо выбирать после нее.

Этот механизм, однако, работает только при условии строго последовательного размещения составляющих программу команд в ячейках памяти ЭВМ.

Очевидно, что рамки этого жесткого условия существенно ограничивают возможности программирования.

В реальных алгоритмах решения задач возникают ситуации, когда требуется переходить к выполнению команды, расположенной не в следующей по порядку ячейке памяти, а в какой- либо иной ячейке адресного пространства памяти ЭВМ.

Так как процессор всегда выбирает следующую команду из ячейки, адрес которой находится в данный момент в регистре — счетчике команд, то для реализации такого перехода к выполнению команды, расположенной в произвольной, а не в следующей ячейке памяти, необходим механизм, который позволял бы при выполнении программы принудительно корректировать содержимое регистра — счетчика команд требуемым для реализуемого алгоритма образом.

Именно команды передачи управления позволяют путем осуществления соответствующего изменения содержимого регистра — счетчика команд процессора вместо тривиальной последовательной выборки команд из памяти реализовать переходы в произвольные, нужные нам точки программы.

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

Такие условия выполнения или невыполнения перехода по адресу той или иной команды в ЭВМ связаны с результатом выполнения процессором команды, предшествующей команде условного перехода. Например, команда ВЕТВЛЕНИЕ, ЕСЛИ РЕЗУЛЬТАТ ОПЕРАЦИИ РАВЕН НУЛЮ.

Команды безусловных и условных переходов позволяют обеспечивать возможность реализации таких важнейших конструкций программирования, как, например, циклы.

Очевидно, что для реализации такого перехода адрес ячейки памяти, в которой находится нужная команда (адрес перехода), должен каким-либо образом задаваться в такой команде. Как видно из вышесказанного, действием, совершаемым этими командами, является принудительное изменение содержимого регистра — счетчика команд процессора в соответствии со значением задаваемого в команде тем или иным образом адреса перехода к другой команде программы.

При указании места перехода возможно использование двух способов: в первом случае указывается абсолютный адрес ячейки, на который следует осуществить переход, во втором — указывается величина смещения адреса перехода относительно текущего значения счетчика команд, то есть относительно адреса самой команды перехода. Первый способ обеспечивает возможность передачи управления в любую точку адресного пространства ЭВМ, но требует больше места для размещения команды (вместо одной — две ячейки памяти) и больше времени на ее выполнение. Поэтому в системе команд такой способ задания адреса перехода используется в одной команде безусловного перехода.

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

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

В системе команд ЭВМ существует целый набор разнообразных команд условных ветвлений. Это команды, осуществляющие переход в случае выполнения того или иного условия, связанного с результатом выполнения команды, предшествующей команде перехода, например когда результат предыдущей операции равен нулю, больше нуля, больше или равен нулю, меньше нуля и т. д.

Учитывая сказанное, является важным прояснение вопроса, связанного с механизмом осуществления процессором проверки выполнения/невыполнения заданного условия по результату выполнения предыдущей команды. Каким образом в процессоре осуществляется анализ результата предыдущей операции при выполнении команд условных переходов?

Для этого вспомним, что после выполнения процессором каждой команды в зависимости от значения ее результата устанавливаются в соответствующие состояния разряды-признаки (флаги) Z, N, V и С регистра состояния процессора. Например, после выполнения команды СРАВНЕНИЕ ДВУХ ОПЕРАНДОВ (СМР) по состоянию флажков регистра состояния процессора можно определить соотношение величин сравниваемых операндов: равны, не равны, больше, меньше и т. д.

Таким образом, при выполнении команд условных ветвлений устройство управления процессора на самом деле не обращается к самому результату предыдущей команды, а анализирует состояние флажков регистра состояния процессора, точнее соответствие их состояния задаваемому командой условию.

В случае выполнения заданного условия устройство управления осуществляет модификацию содержимого регистра — счетчика команд на величину задаваемого в команде смещения (положительного или отрицательного).

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

Большое количество разнообразных команд условных ветвлений позволяет обрабатывать переходы по всем возможным условиям, касающимся результата предыдущей операции: рав- но/не равно (нулю), болыне/меныие, не больше, не меньше и т. д.

Контрольные вопросы

  • 1. Команды безусловной и условной передачи управления (безусловного и условных переходов), их назначение, какие элементы процессора используются при их выполнении и каким образом.
  • 2. Каким образом реализуется переход программы к команде, размещенной по произвольному адресу?
  • 3. Какую роль при выполнении команд условных ветвлений играет регистр состояния процессора?

Глава 10

ПОДПРОГРАММЫ.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >