Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
27.11.2024
Размер:
260.1 Кб
Скачать

АПРОБАЦИЯ

Министерство образования и науки Российской Федерации

Саратовский государственный технический университет

Балаковский институт техники, технологии и управления

УСЛОВНЫЕ И БЕЗУСЛОВНЫЕ ПЕРЕХОДЫ В ЯЗЫКЕ

АССЕМБЛЕРА

Методические указания к выполнению лабораторной работы

по дисциплине «Архитектура ЭВМ и систем» для студентов очного обучения специальности 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, который должен содержать: цель работы и выполненные задания по лабораторной работе.

Соседние файлы в папке 3к5с Архитектура информационных систем