logo search
Кафедра “Системы автоматического управления”

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

В группе команд передачи управления различают четыре типа команд: безусловные переходы, условные переходы, циклы и прерывания.

Команды безусловного перехода включают три мнемокода: JMP- безусловный переход; CALL- вызов подпрограммы; RET- возврат из подпрограммы. Команда JMP позволяет осуществлять безусловный переход в любую точку внутри ассемблерной вставки.

Пример использования команды:

JMP @@1 ;передача управления команде с меткой @@1

Команды условных переходов осуществляют передачу управления в зависимости от результатов предыдущих операций.

Таблица 9.3

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

Примеры использования команд условных переходов приведены на рис.9.3.

Рис.9.3.

На рис. 9.3 показан фрагмент программы, содержащей несколько команд условных переходов. В нем осуществляется переход к оператору с меткой МЕТКА1, если Х < 50. В противном случае определяется разность /X-Y/, значение которой загружается в ячейку с именем REZULT.

Организация циклов.

Циклы в Ассемблере могут быть организованы как при помощи команд условных переходов, так и специальными командами.

Рассмотрим указанные варианты. Пример организации цикла при помощи команд условных переходов с постоянной проверкой показан на рис.9.4.

Рис.9.4.

Рассмотрим далее пример организации цикла с использование специальной команды: LOOP <метка> (Рис.9.5).

Рис.9.5.

Команда LOOP управляет выполнением группы команд определенное число раз. До начала цикла в регистр СХ должно быть загружено число выполняемых циклов.

Команда LOOP находится в конце цикла, где она уменьшает значение в регистре СХ на единицу. Если число в регистре СХ не равно нулю, то команда передает управление по адресу, указанному в операнде (прибавляя к регистру IP значение операнда); в противном случае управление передается на следующую после LOOP команду (выход из цикла).

Команды прерывания -INT.

Формат команды:

INT Int_num.

Команда прерывает обработку программы, передает управление в DOS или BIOS для определенного действия и затем возвращает управление в прерванную программу для продолжения обработки.

Наиболее часто прерывания используются для выполнения операций ввода с клавиатуры и вывода на экран терминала. Для выхода из программы на обработку прерывания и для последующего возврата команда INT выполняет следующие действия:

- сохраняет в стеке регистры МП и РС;

- загружает в РС адрес первой команды процедуры, обслуживающей прерывания;

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

Мы будем рассматривать INT 16Н и INT 21H - для работы с терминалом и клавиатурой.

Клавиатура ПК содержит микропроцессор, который воспринимает каждое нажатие на клавишу и формирует соответствующий ей скан-код.

Скан-код - это однобайтовое число, младшие 7 бит которого представляют собой ASCII-код клавиши.

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

Все необходимые клавиатурные операции можно выполнить с помощью команды вызова программного прерывания INT 21H. Конкретизация действия вызываемой функции осуществляется путем загрузки в регистры центрального микропроцессора соответствующих кодов.

Рассмотрим примеры использования указанного прерывания для работы с клавиатурой.

Функция 0С прерывания 21H выполняет функцию ввода с клавиатуры, причем перед этим чистит буфер клавиатуры. Для вызова функции необходимо поместить в АН код 0СН, а в AL - 1. Фрагмент программы приведен на рис.9.6.

Рис. 9.6.

Листинг программы, использующей функцию ввода с ожиданием приведен на рис.9.7. Указанная программа выводит на экран терминала ASCII-код нажатой клавиши.

Пример.

Рис. 9.7.

Программы, работающие в реальном времени (управляющие, игровые и т.д.), часто используют клавиши для управления процессом вычислений. При этом они должны принимать символ из буфера клавиатуры без ожидания нажатия клавиши. Например, алгоритм работы управляющей программы может быть представлен в виде (Рис. 9.8.а):

Рис. 9.8.а

Рис. 9.8.б

Введенный символ с клавиатуры можно получить при помощи функции 6 прерывания 21Н. Эта функция не дает эха на экран. Перед вызовом прерывания в DL должно быть помещено 0FFH. Если символ принят, то он помещается в AL. Фрагмент программы приведен на рис. 9.8.б