
3к5с Архитектура информационных систем / МУ ПР 5
.pdfАПРОБАЦИЯ
Министерство образования и науки Российской Федерации
Саратовский государственный технический университет
Балаковский институт техники, технологии и управления
УСЛОВНЫЕ И БЕЗУСЛОВНЫЕ ПЕРЕХОДЫ В ЯЗЫКЕ
АССЕМБЛЕРА
Методические указания к выполнению лабораторной работы
по дисциплине «Архитектура ЭВМ и систем» для студентов очного обучения специальности 230201 и направления 230400.
Одобрено
редакционно-издательским советом
Балаковского института техники,
технологии и управления
Балаково 2011
Цель работы — изучение условных и безусловных операторов перехода в языке Ассемблера.
ОСНОВНЫЕ ПОНЯТИЯ
Безусловные переходы.
Безусловный переход — это переход, который выполняется всегда.
Безусловный переход осуществляется с помощью команды JMP. У этой команды один операнд, который может быть непосредственным адресом
(меткой), регистром или ячейкой памяти, содержащей адрес. Примеры безусловных переходов:
jmp metka |
//Переход на метку |
jmp bx |
//Переход по адресу в BX |
jmp word[bx] |
//Переход по адресу, содержащемуся в памяти по адресу в |
BX |
|
Условные переходы.
Условный переход осуществляется, если выполняется определѐнное условие, заданное флагами процессора. Как вы помните, состояние флагов изменяется после выполнения арифметических, логических и некоторых других команд. Если условие не выполняется, то управление переходит к следующей команде.
Существует много команд для различных условных переходов. Также для некоторых команд есть синонимы (например, JZ и JE — это одно и то же). Для наглядности все команды условных переходов приведены в таблице
1.
Таблица 1 — Команды условных переходов.
Команда |
Переход, если |
Условие |
|
|
перехода |
|
|
|
JZ/JE |
нуль или равно |
ZF=1 |
|
|
|
JNZ/JNE |
не нуль или не равно |
ZF=0 |
|
|
|
JC/JNAE/JB |
есть переполнение/не выше и не |
CF=1 |
|
равно/ниже |
|
|
|
|
JNC/JAE/JNB |
нет переполнения/выше или равно/не |
CF=0 |
|
ниже |
|
|
|
|
JP |
число единичных бит чѐтное |
PF=1 |
|
|
|
JNP |
число единичных бит нечѐтное |
PF=0 |
|
|
|
JS |
знак равен 1 |
SF=1 |
|
|
|
JNS |
знак равен 0 |
SF=0 |
|
|
|
JO |
есть переполнение |
OF=1 |
|
|
|
JNO |
нет переполнения |
OF=0 |
|
|
|
JA/JNBE |
выше/не ниже и не равно |
CF=0 и ZF=0 |
|
|
|
JNA/JBE |
не выше/ниже или равно |
CF=1 или ZF=1 |
|
|
|
JG/JNLE |
больше/не меньше и не равно |
ZF=0 и SF=OF |
|
|
|
JGE/JNL |
больше или равно/не меньше |
SF=OF |
|
|
|
JL/JNGE |
меньше/не больше и не равно |
SF≠OF |
|
|
|
JLE/JNG |
меньше или равно/не больше |
ZF=1 или SF≠OF |
|
|
|
JCXZ |
содержимое CX равно нулю |
CX=0 |
|
|
|
У всех этих команд один операнд — имя метки для перехода. Обратите внимание, что некоторые команды применяются для без знаковых чисел, а
другие — для чисел со знаком. Сравнения «выше» и «ниже» относятся к без знаковым числам, а «больше» и «меньше» — к числам со знаком. Для без знаковых чисел признаком переполнения будет флаг CF, а
соответствующими командами перехода JC и JNC. Для чисел со знаком о переполнении можно судить по состоянию флага OF, поэтому им соответствуют команды перехода JO и JNO. Команды переходов не изменяют значения флагов.
ТЕХНОЛОГИЯ РАБОТЫ
Задание 1. Нахождение максимального из двух чисел.
В качестве примера рассмотрим небольшую программу для
нахождения максимального из двух чисел.
1 #include "iostream"
2
3void main()
4{
5 |
setlocale(LC_ALL,"rus"); |
|
6 |
int a = 7; |
//первое число |
7 |
int b = 14; |
//второе число |
8 |
int max = 0; |
//переменная для хранения |
|
максимального значения |
|
9 |
_asm |
|
10 |
{ |
|
11 |
mov ecx,a |
//в регистр ecx заносим |
|
первое число |
|
12 |
mov ebx,b |
//в регистр ebx |
|
заносим второе число |
|
13 |
cmp ecx,ebx |
//выполняем сравнение |
|
значений двух регистров |
|
14 |
jc lable |
//если значение в регистре ebx |
|
больше перепрыгиваем в метку |
|
15 |
mov max,ecx |
//заносим значение из |
|
регистра в переменную max как наибольшее |
|
16 |
jmp end |
//перепрыгиваем в |
|
конец программы |
|
17 |
lable: |
//если значение в |
|
регистре ecx больше |
|
18 |
mov max,ebx |
//заносим значение из |
|
регистра в переменную max как наибольшее |
|
19 |
end: |
//метка для выхода из |
|
блока программы сравнения |
|
20 |
} |
|
21printf("Результат: %i\n", max);
22system("pause");
23}
Задание 2. Реализуйте программу для нахождения минимального из
двух чисел.
Задание 3. Найдите максимальное их трѐх чисел.
ТРЕБОВАНИЯ БЕЗОПАСНОСТИ ТРУДА
При выполнении лабораторной работы необходимо соблюдать общие
правила техники безопасности:
использовать ПК только в соответствии с их назначением;
не размещать на корпусе ПК посторонние предметы (тетради,
книги, карандаши и т.п.);
оберегать ПК от толчков, ударов, сотрясений;
немедленно поставить в известность оператора ИВЦ об обнаружении задымления, загорания, пожара;
немедленно сообщить оператору ИВЦ обо всех неисправностях в работе ПК.
СОДЕРЖАНИЕ ОТЧЕТА
Отчѐт по лабораторной работе на листах формата А4, который должен содержать: цель работы и выполненные задания по лабораторной работе.