Процессор

Проверки и передача управления

Эти команды позволяют реализовать конструкции:

IF ... THEN ... ELSE
REPEAT ... UNTIL
WHILE ... DO
FOR ... DO
GOTO ...

Для выполнения этих функций в каждом процессоре есть регистр флагов (регистр состояния), разряды которого устанавливаются или сбрасываются в зависимости от свойств результата предыдущей операции. Анализируются:

  • равенство нулю;
  • знак;
  • перенос;
  • арифметическое переполнение;
  • перенос между тетрадами и др......

Команды проверки

  • TEST - проверка отдельных битов (логическим умножением).
  • CMP - сравнение операндов.

Кроме того, признаки устанавливаются после выполнения многих команд. Обратите внимание на то, что нет единых правил поведения признаков. (В процессорах фирмы Motorola при пересылке флаги "нуля" и "знака" изменяются, а в процессорах Intel - нет).

Команды ветвления по условию

B** / J*** от слов ( branch / jump). Их может быть 10...30 штук. (например, BNE - переход, если не равно 0). Набор команд ветвления обсуждается при рассмотрении системы команд процессоров х86.

Адресация в командах ветвления может быть разного типа:

  • а) полный адрес перехода;
  • б) относительная (смещение);
  • в) пропуск команды.

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

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

JMP Адресация делается такой, чтобы можно было "прыгнуть" в любое место программной памяти ("длинная" адресация).

Команда организации цикла

Позволяет организовать в программе структуры FOR ... DO более простым способом, чем с помощью команд ветвления.

LOOP*

Команда обращения к подпрограмме (вызов процедуры)

JSR, JMS, CALL

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

При обращении / возврате надо обеспечить:

  • а) передачу управления в любое место памяти, поэтому "длинная" адресация;
  • б) возврат в то место, откуда был вызов (т.е. место вызова должно автоматически запоминаться);
  • в) запоминание промежуточных результатов, имеющихся к моменту вызова (содержимое регистров процессора, а, при рекурсивном вызове, процедуры, - надо запоминать и промежуточные результаты работы самой процедуры). Для запоминания чаще всего используется стек (участок ОЗУ или специальное ОЗУ со стековой адресацией). Часть вышеперечисленной информации запоминается автоматически при выполнении команды CALL, а сохранение оставшегося - дело программиста.

 

Яндекс.Метрика