Архитектура компьютера
Введение Теоретическая часть 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 ends5 6 code segment7 start:8 assume cs:code, ds: data9 mov ax, data10 mov ds, ax11 12 mov ah, 01;вводим первый символ и запоминаем его в bl 13 int 21h14 mov bl, al15 16 int 21h;вводим второй символ 17 18 mov ah, 0919 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, 4c00h26 int 21h27 code ends28 end start
Задания для выполнения
- Определить, ввел ли пользователь букву 'Y' или любую другую.
- Вывести два введенных с клавиатуры числа в порядке возрастания. (3 балла)
- Вывести максимальное из трёх введенных с клавиатуры чисел. (5 баллов)
Задания для самостоятельного выполнения
- С клавиатуры вводятся два числа задающие отрезок [a, b]. Определить, попадает ли третье число c в заданный отрезок. (8 баллов)
- Написать программу, которая по введенному номеру месяца выводит время года (15 баллов);
© Истомин А.С. ЗабГГПУХостинг от uCoz