Материал: Методические указания к выполнению лабораторных работ по дисциплине «Аппаратные средства вычислительной техники» для студентов специальности «Компьютерная безопасность». Ермаков С.А., Остапенко А.Г

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

 

 

Окончание табл. 1

JGE

SF = OF

Больше или равно

JNL

Не меньше

 

JL

 

Меньше

SF< >OF

Не больше и не

JNGE

 

равно

 

 

JLE

ZF =1 или

Меньше или равно

JNG

(SF xor OF) = 1

Не больше

JNE

ZF = 0

Не равно

JNZ

Не ноль

 

JNO

OF = 0

Нет переполнения

JO

OF = 1

Есть переполнение

JNP

PF = 0

Нет четности

JPO

Нечетное

 

JP

PF = 1

Есть четность

JPE

Четное

 

JNS

SF = 0

Нет знака

JS

SF = 1

Есть знак

Слова «выше и ниже» в таблице относят к сравнению чисел без знака; слова «больше» и «меньше» учитывают знак.

При программировании в командах перехода обычно не используют явные значение смещения D8, а применяют метки. Метка - это идентификатор, присваиваемый первому байту команды, у которой она появляется. Наличие метки в команде не обязательно, но если она есть, то она становится символическим именем адреса данной команды.

Команды условного перехода используются для программирования выполнения различных действий в зависимости от заданного условия (условные операторы языков высокого уровня, например, оператору i f . . then .. else фактически реализуются на командах условного перехода) [3].

Пример кода, реализующего два варианта действий в зависимости от условия, приведено ниже:

4

CMP

AL,100

;устанавливаем флаги

JA

NEXT

;если AL>100, то переходим на адрес, указанный

 

 

меткой next

MOV

AH,2

; иначе умножаем содержимое регистра AL на 2

MUL

AH

 

JMP

exit

;переход на метку exit

next: ADD

AL,5

;прибавляем к содержимому AL число 5

exit:

 

 

-------------------

;другие команды

Данный код выполняет следующие действия: если значение регистра AL>100, то к нему прибавляется 5, иначе его значение умножается на 2 . Результат сохраняется в регистре AL. В коде используются две метки: next и exit.

Для сравнения чисел используется команда CMP, которая осуществляет операцию вычитания. Результат никуда не записывается, но при этом устанавливаются флаги регистра состояния.

Задачи:

1.Изучить назначение регистра флагов микропроцес-

сора (МП) 8086;

2.Используя эмулятор Emu8086, разработать программный код, позволяющий изменить определенные флаги регистра состояния (в соответствии с вариантом);

3.Сравнить команды сложения чисел ADD и ADC.

4.Разработать программный код для МП 8086, осуществляющий сложение содержимого регистров R1 и R2 при выполнении заданного условия COND, иначе - их вычитание;

5.Составить отчет по пунктам 2-4;

6.Ответить на контрольные вопросы для самопроверки.

5

Порядок выполнения работы :

1.Изучить теоретическую часть данной работы и получить представление о назначении регистра состояния и его флагах;

2.В эмуляторе Emu8086 создать новый проект, выбрав команду «New» на панели инструментов и шаблон «Bin template»;

3.В открывшемся окне после строки «add your code here» добавьте код на языке ассемблера, который будет устанавливать в «1» флаги, указанные в табл. 2;

 

 

 

 

 

 

Таблица 2

 

 

 

Варианты заданий

 

 

 

 

 

 

 

 

Номер

Флаги

R1

 

R2

R3

COND

варианта

 

 

 

 

 

 

1

CF,ZF

AX

 

BX

CX

R3=1

2

AF,OF

AL

 

AH

CH

R3>13

3

SF,PF

CL

 

DL

AL

R3<230

4

CF,OF

BL

 

AL

DH

R3≥123

5

ZF,SF

DH

 

BH

AL

R3<>112

6

AF,PF

DH

 

DL

CH

R3≤21

7

OF,PF

AH

 

CH

DL

R3>15

8

AF,ZF

AH

 

BH

BL

R3<35

9

SF,CF

AH

 

DH

DL

R3=55

10

SF,AF

AH

 

BL

DH

R3≤124

11

SF,ZF

CH

 

BH

DX

R3≥300

12

SF,PF

CL

 

BL

AX

R3<>450

13

AF,CF

CH

 

CL

BX

R3=500

14

AF,ZF

AH

 

BL

DH

R3>22

15

AF,SF

BH

 

CL

AL

R3<11

16

OF,CF

BL

 

DL

CX

R3<>600

17

OF,PF

DX

 

BX

AL

R3≤144

18

OF,ZF

AX

 

BX

DH

R3≥33

19

CF,ZF

BX

 

CX

AH

R3>43

20

CF,OF

CX

 

DX

AL

R3<22

6

4.Выполнить переход в режим эмуляции работы процессора, выбрав команду «Emulate» на панели инструментов. Отобразите на экране содержимое флагов регистра состояния, нажав на кнопку «flags» в окне «emulator:»;

5.Осуществить пошаговое выполнение разработанного кода, нажимая на кнопку «single step». Убедитесь, что в результате выполнения программы, заданные флаги устанавливаются в «1»;

6.Создайте проект, как в пункте 2, и наберите нижеследующий код:

mov

AL, 2Dh

add

AL, 0D3h

add

AL,5

Выполните программу в пошаговом режиме и запишите конечное значение регистра AL.

7. Создайте проект, как в пункте 2, и наберите нижеследующий код:

mov

AL, 2Dh

add

AL, 0D3h

adc

AL,5

Выполните программу в пошаговом режиме и запишите конечное значение регистра AL. Сравните полученные значения регистра AL в пунктах 6 и 7 и сделайте вывод.

8.Создайте новый проект, как в пункте 2, и разработайте код, осуществляющий сложение содержимого регистров R1 и R2 при выполнении условия COND, иначе - вычитание. Обозначение регистров R1 и R2 и вид условия COND представлены в таблице 2. Осуществите проверку работы программы в пошаговом режиме;

9.Оформите отчет по работе. Отчет должен содер-

жать:

-цель работы;

-задание;

-листинги разработанных программных кодов;

-вывод по работе.

7

Контрольные вопросы :

1.Назначение регистра флагов?

2.Какой флаг устанавливается в единицу, если результат последней операции равен нулю?

3.Какой флаг используется при двоично-десятичной арифметике?

4.В каком случае устанавливается флаг OF?

5.Какой флаг используется для проверки правильности полученных данных по линиям связи?

6.После выполнения каких операций изменяются флаги регистра состояния?

7.В зависимости от чего осуществляется загрузка нового адреса в регистр IP в командах условного перехода?

8.Что представляет собой метка?

9.Чем отличается команда ADD от ADC?

10.Какое арифметическое действие выполняет команда

CMP?

8

Источник: https://studfile.net/preview/16565265/