Архитектура компьютера
Введение Теоретическая часть 1 Архитектура компьютера Лабораторный практикум 1 Создание программы на языке ассемблера 2 Применение функций DOS и BIOS 3 Линейные алгоритмы 4 Десятичная арифметика 5 Команды передачи управления 6 Циклы с условием 7 Циклы со счетчиком 8 Работа с массивами 9 Цепочечные команды Приложения 1 Таблица кодов символов ASCII 2 Функции DOS и BIOS Гостевая книга Лабораторная работа №5
Команды передачи управления
Вопросы для повторения:
- Какие операторы используются в языках высокого уровня на нелинейных участках программы?
- Что такое регистр флагов, флаги и для чего они используются?
- Запишите оператор выбора (case) в виде последовательности условных конструкций языка высокого уровня.
Для организации безусловного перехода используется команда
jmp <метка>
(от словаjump
- прыжок)
m1:
jmp m1
;безусловный переход на метку m1
mov dl, '$'
;данная команда не будет выполнена
mov dh, 100
;Все команды условного перехода имеют одинаковый синтаксис:
Jxx <метка>
, гдеxx
определяется условием перехода.В качестве источника условия может использоваться регистр cx, любая арифметическая или логическая команда или специальная команда сравнения
cmp
:Команда сравнения
cmp <оп1>,<оп2>
работает почти также как и команда вычитанияsub
, разница состоит лишь в том, что командаcmp
не записывает результат вычитания в первый операнд, результатом выполнения данной команды является установка флагов состояния (команды условного перехода анализируют эти флаги).Таблица 1. Перечень команд условного перехода для команды
cmp <операнд_1>,<операнд_2>
Типы операндов Команда Критерий перехода Значения флагов Любые je операнд_1 = операнд_2 zf = 1 Любые jne операнд_1<>операнд_2 zf = 0 Со знаком jl / jnge операнд_1 < операнд_2 sf <> of Со знаком jle / jng операнд_1 <= операнд_2 sf <> of or zf = 1 Со знаком jg / jnle операнд_1 > операнд_2 sf = of and zf = 0 Со знаком jge / jnl операнд_1 => операнд_2 sf = of Без знака jb / jnae операнд_1 < операнд_2 cf = 1 Без знака jbe / jna операнд_1 <= операнд_2 cf = 1 or zf=1 Без знака ja / jnbe операнд_1 > операнд_2 cf = 0 and zf = 0 Без знака jae / jnb операнд_1 => операнд_2 cf = 0 Таблица 2. Команды перехода по состоянию флагов
Команда Флаг Команда Флаг jc cf = 1 jnc cf = 0 jp pf = 1 jnp pf = 0 jz zf = 1 jnz zf = 0 js sf = 1 jns sf = 0 jo jo = 1 jno jo = 0Команда перехода по состоянию регистра cx:
jcxz <метка>
;прейти, если cx = 0Пример: С клавиатуры вводятся два символа, вывести на экран сообщение 'одинаковые', если введены два одинаковых символа, иначе вывести 'разные'.
1 data segment
; 2 mes_e db 10, 13, 'Одинаковые$' 3 mes_ne db 10, 13, 'Разные$' 4 data ends
5 6 code segment
7 start:
8 assume cs:code, ds: data
9 mov ax, data
10 mov ds, ax
11 12 mov ah, 01
;вводим первый символ и запоминаем его в bl 13 int 21h
14 mov bl, al
15 16 int 21h
;вводим второй символ 17 18 mov ah, 09
19 lea dx, mes_ne
;пусть символы неравны 20 cmp bl, al
;сравниваем их 21 jne m_ne
;если они неравны, переходим на вывод сообщения 22 lea dx, mes_e
;иначе загружаем адрес другой строки 23 m_ne:
int 21h
;и выводим 24 25 mov ax, 4c00h
26 int 21h
27 code ends
28 end start
Задания для выполнения
- Определить, ввел ли пользователь букву 'Y' или любую другую.
- Вывести два введенных с клавиатуры числа в порядке возрастания. (3 балла)
- Вывести максимальное из трёх введенных с клавиатуры чисел. (5 баллов)
Задания для самостоятельного выполнения
- С клавиатуры вводятся два числа задающие отрезок [a, b]. Определить, попадает ли третье число c в заданный отрезок. (8 баллов)
- Написать программу, которая по введенному номеру месяца выводит время года (15 баллов);
© Истомин А.С. ЗабГГПУХостинг от uCoz