Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров / Язык АССЕМБЛЕРА.doc
Скачиваний:
59
Добавлен:
20.03.2015
Размер:
149.5 Кб
Скачать

Переходы. Циклы

Безусловный переход (JMP)

JMP L ;следующей будет выполняться команда с меткой L

L: MOV AX, 0

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

Сравнение (compare):CMPop1,op2

Данная команда аналогична команде вычитания за одним исключением: вычисленная разность op1-op2 никуда не записывается. Поэтому единственный и главный эффект от команды сравнения – это установка флагов.

Команды условного перехода в ЯА записываются единообразно:

Jxx <метка>

где xxформируется с помощью следующих символов:

E – equal (равно)

N – not (не, отрицание)

G–greater(больше) – для чисел со знаком

L–less(меньше) – для чисел со знаком

A–above(выше, больше) - для чисел без знака

B–below(ниже, меньше) - для чисел без знака

Z–ZF= 1 (флаг нуля равен 1)

S–SF= 1 (флаг знака равен 1)

С– СF= 1 (флаг переноса равен 1)

O –OF= 1 (флаг переполнения равен 1)

P –PF= 1 (флаг паритета равен 1)

CXZ – if ( CX == 0 ) goto <метка>

Пример 1.

JNZ L ;перейти на метку L, если флаг нуля равен 0

Пример 2.Пусть X, Y и Z – переменные размером в слово. Требуется записать в Z максимальное из чисел X и Y.

;числа со знаком

MOV AX, X

CMP AX, Y ;x=y?

JGE M ;x>=y -> M

MOV AX, Y

M: MOV Z, AX

Команда LOOP.Пусть некоторую группу команд (тело цикла) надо повторитьNраз (N>0). Тогда на ЯА этот цикл можно реализовать по следующей схеме:

MOV CX, N ;N>0

L: …

… ;тело цикла

LOOP L

Замечание. Количество итераций цикла обязательно должно находиться в регистреCX.

Ввод-вывод. Прерывания

Команды DOS.

Общий формат вызова функции DOSимеет следующий вид:

MOV AH, <номер функции>

INT <номер прерывания>

Некоторые функции прерывания 21h

Завершение программы

MOV AL, <код завершения>

MOV AH, 4Ch

INT 21h

Вывод символа на экран (в текстовом режиме)

MOV DL, <код выводимого символа>

MOV AH, 2

INT 21h

Ввод символа c экрана (в текстовом режиме)

MOV AH, 1

INT 21h

MOV AL, <код введенного символа>

Вывод строки на экран (в текстовом режиме)

DS:DX := начальный адрес строки

MOV AH, 9

INT 21h

Очистка буфера ввода

MOV AL, 0

MOV AH, 0Ch

INT 21h

Ввод с клавиатуры

DS:DX := адрес буфера для записи введенной строки

MOV AH, 0Ah

INT 21h