Скачиваний:
387
Добавлен:
22.01.2014
Размер:
3.74 Mб
Скачать

Лекция №9 основы проограммирования на языке ассемблера для мп i8086. (продолжение).

План лекции

1. Арифметические команды.

2. Логические команды.

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

4. Команды управления МП.

9.1. Арифметические команды.

МП выполняет четыре основных арифметических действия: сложение, вычитание, умножение и деление над 8- и 16-разрядными данными со знаком и без знака. Все арифметические команды влияют на флаги. Описание арифметических команд приведено в таблице 9.1.

Таблица 9.1.

Как видно из форматов команд DIV и IDIV, для выполнения операций деления необходимо преобразовать делимое:

- в случае делимого-байта (AL), преобразовать его в слово (AH:AL);

- в случае делимого-слова (АХ), преобразовать его в двойное слово (DX:AX).

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

СBW- преобразовать байт в слово;

CWD- преобразовать слово в двойное слово.

Форматы команд указаны также в таблице 9.1.

Примеры, иллюстрирующие использование арифметических команд, приведены на рис.9.1.

9.2. Логические команды.

Команды МП, реализующие логические операции, представлены в таблице 9.2.

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

директивы определения данных, команды ввода и др.

(X, Y, Z и V определены как переменные целого типа).

MOV AX,X ;умножить (Х) на Y

IMUL Y ;и запомнить произведение в ВХ:СХ

MOV CX,AX ;

MOV BX,DX ;

MOV AX,Z ;прибавить к произведению в ВХ:СХ

CWD ;расширенное со знаком (Z)

ADD CX,AX

ADC BX,DX

SUB CX,540 ;вычесть 540 из BX:CX

SBB BX,0

MOV AX,V ;вычесть (BX:CX) из (V) расширен-

CWD ;ным со знаком и разделить на (Х)

SUB AX,CX ;частное образовать в АХ

SUB DX,BX ;а остаток в DX

IDIV X

команды вывода и др.

Рис.9.1.

Таблица 9.2.

Рис.9.2.

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.б