Впрограммах управления технологическими процессами всегда имеется много различных ветвей, так как ход программы продолжается в том или ином направлении в зависимости от значений параметров процесса. Изменения программы осуществляются командами переходов (разветвлений) – J(j)МР, которые составляют основу современной АСУ ТП. Выполнение команд переходов можно сравнить с точками принятия решений, и именно эта группа команд придает микропроцессорной системе черты “интеллекта “ и адаптации.
Команды переходов, не связанные с какими-либо условиями, обычно становятся громоздкими и трудно воспринимаемыми.
Трехбайтные команды перехода к подпрограмме называют вызовами – CALL. В команде перехода обязательно указывается адрес или метка перехода. При выполнении вызова необходимо запомнить текущее содержание программного счетчика, так как после выполнения подпрограммы надо вернуться к прерванной программе, а для этого надо передать адрес возврата снова в программный счетчик. Последняя функция реализуется однобайтной командой возврата RET (Return – возврат).
|
|
Таким образом, вызов одной подпрограммы и возврат из нее осуществляется сравнительно простыми средствами: шестнадцатибитным регистром для временного запоминания адреса возврата. В качестве шестнадцатиразрядного регистра может быть использован указатель стека. Команда вызова CALL фактически выполняет функции команды PUCH PS, так как она производит следующие действия:
[(SP-1 ]< .= (PCH), [(SP)-2]< .= PCL), PC< .= < .B3> . < .B2> .
Ситуация усложняется, если выполняемая подпрограмма вызывает ещё одну подпрограмму, а это вторая третью и т.д., иными словами, если организуются вложенные подпрограммы, то в этом случае необходим стек, реализованный в ОЗУ.
Трёхбайтные команды условной передачи управления, называемые также условными переходами и разветвлениями, осуществляют передачу управления только при удовлетворении некоторого условия, заданного в коде операции.
Если условие не удовлетворяется, то передачи управления не происходит, а выполняется следующая по порядку команда, т.е. в этой ситуации команда перехода эквивалентна холостой команде.
Проверяемым условием является текущее значение одного из триггеров состояния – какого именно указывается в коде операции четвертым и пятым битами. При этом могут проверяться результаты операции (нулевой или ненулевой, положительный или отрицательный, четный или нечетный, отсутствие или наличие переноса).
Предусмотрены команды переходов, осуществляющие передачу управления как по единичному, так и по нулевому значению каждого из условий. Команда JC, например, означает Jump if carry, т.е. переход, если бит переноса равен 1 (табл. 2.4). Противоположная команда обозначается JNC – Jump if not carry, т.е. перенос отсутствует (CY=0).
|
|
Число машинных тактов, требуемых для выполнения команд условных переходов, зависит от условия (значения) соответствующего триггера состояния. Если проверяемые условия не удовлетворяются, то команда выполняется в течении циклов М1, М2 и М3 выборки трехбайтной команды. Если же условие удовлетворяется, то условные переходы выполняются за пять машинных циклов и, соответственно, требуют большего числа тактов.
Таблица 2.4. Мнемоника операций
Условие | Перевод | Мнемоника | ||
Jump | Call | Return | ||
Результат не равен нулю Результат равен нулю Нет переноса Есть перенос Нечетный результат Четный результат Положительный результат Отрицательный результат | No Zero Zero No Carry Carry Parity Odd Parity Even Plus Minus | JNZ JZ JNC JC JPO JPE JP JM | CNZ CZ CNC CC CPO CPE CP CM | RNZ RZ RNC RC RPO RPE RP RM |