Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 1.doc
Скачиваний:
43
Добавлен:
01.05.2014
Размер:
79.36 Кб
Скачать

CПб ГЭТУ

Кафедра А и ПУ

ЛАБОРАТОРНАЯ РАБОТА N 1

“Архитектура и система команд

процессора 8086 в реальном режиме”

ОТЧЕТ

Группа: 5325

Выполнили:

Яхнев А.Н.

Рунова О.А.

2008

Цель работы:

Изучение архитектуры и системы команд процессора 8086 с использованием отладчика программ AFDRUS.

Содержание работы:

1) Изучение функциональных возможностей отладчика AFDRUS.

2) Изучение операций пересылки данных.

3) Изучение логических операций.

4) Изучение арифметических операций.

5) Изучение команд передачи управления.

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

1. Изучение функциональных возможностей AFDRUS

- Запустить отладчик AFDRUS

1.1. Исследовать перемещение курсора по полям отладчика, поочередно нажимая функциональные клавиши F7, F8, F9,F10.

1.2. В нижнем правом угловом поле (текстовом поле ) набрать текст “ABCD 1234”, контролировать изменение состояния ячеек памяти в поле 2.

Тексту соответствует код 41 42 43 44 20 31 32 33 34. Код символа “пробел” - 20.

В поле 2 в ячейках 00, 01, 02, 03 набрать коды 35, 36, 37, 38.

Контролировать изменение содержания текстового поля – соответствие тексту: 5678 .

1.3. Изменить области отображения данных в окнах

- в окне 2 установить DS:200;

- в окне 1 установить ES: 200;

1.4. Перевести курсор в левое верхнее угловое поле ( поле регистров )

- записать в регистр BX число 2F4A

- записать в регистр ES число 2000 - контролировать изменение отображения в окне 1, объяснить почему.

При изменении регистра ES, в окне 1 отображение памяти началось с нового значения адреса, хранящегося в ES.

1.5. Установить слово флагов FLAGS равным 3453, контролировать изменения состояния флагов. Контролировать изменение отдельных флагов.

Установившиеся значения флагов:

OF DF IF SF ZF AF PF CF

0 1 0 0 1 1 0 1

OF - переполнение разрядной сетки

DF – направление обработки байтов

IF – разрешение прерываний

SF – флаг отрицательного результата

ZF – флаг нуля

PF – флаг четности

CF – флаг переноса

1.6. Нажать клавишу F4, изучить описание команд ‘M’ ‘A’ ‘R’ ‘QUIT’ ( выход из ‘HELP’ по F4 )

M n адр. Вывод окна памяти (n=1 или n=2).По умолчанию 'Сегмент тот же, что в окне. Пример: M 1 DS:1000 вывод в окно 1 сегмента DS со смещением 1000

A {адр.} Режим ассемблирования.Если адрес не указан выбирается текущая команда.Нажатие Enter - ассемблирование команды. Для пошагового выполнения, используется клавиша F1. Для перемещения по коду вверх и вниз можно использовать клавиши управления курсором.

{R} рег=знач. Установка регистра. FL=знач. устанавливает регистр флаго как 16-ти битовый регистр. Доступ к отдельным битам по их именам : OF,DF,IF,SF,ZF,AF,PF,CF.

1.7. Выполнить команды М 1 300 и М 2 200 контролировать изменения содержания окон 1 и 2. Выполнить команду BX=0423, контролировать значение регистра BХ.

Значение регистра BX изменилось на 0423.

2. Изучение команд процессора.

2.1. Команды пересылки данных, методы адресации.

Перевести курсор в поле CMD>, выполнить команду А100, набрать в поле команд ТЕСТ 1

ТЕСТ 1

MOV AX, 02

MOV CX, AX

MOV BX, 200

MOV [BX], 03

MOV [204], 02

MOV [BX+6], 04

MOV AX, BX

JMP 100

Объяснить диагностику AFDRUS.

В окне 1 установить область DS:0200 в ячейки <0200>, <0202>, <0204>, <0206> записать значение адреса ячейки. Помнить о порядке адресации байт в памяти.

Чтобы записать значение адреса 0204, необходимо ввести 0402 (порядок – с младшего байта).

Выполнить в пошаговом режиме тест 1, начиная с адреса CS:0100 ( пошаговый режим - клавиша F1).

Контролировать значения регистров AX, BX, CX и ячеек в окне 1.

MOV AX, 02

Помещает в регистр AX значение 0002.

MOV CX, AX

Копирует значение регистра AX в регистр CX.

MOV BX, 200

Помещает в регистр BX значение 0200.

MOV [BX], 03

Помещает в память по адресу, хранящемуся в BX значение 03

MOV [204], 02

Помещает в память по адресу 204 значение 02

MOV [BX+6], 04

Помещает в память по адресу, хранящемуся в BX со смещением +6 значение 04

MOV AX, BX

Копирует значение регистра BX в регистр AX.

JMP 100

Перемещение к команде по адресу 100

2.2. Начиная с адреса cs:0100 набрать текст тест 2.

ТЕСТ 2

LES BX, [202] ; загрузка регистров ES:BX

LEA DX, [200] ; загрузка исполнительного адреса

LDS BX, [200] ; загрузка регистров DS:BX

JMP 100

В ячейках окна 1 записать коды

<DS:0200> = 01

<DS:0202> = DS

<DS:0204> = 03

ТЕСТ2 начиная с адреса CS: 100, контролировать содержимое регистров DX, DX, DS, ES.

LES BX, [202] ; загрузка регистров ES:BX

Загрузка регистра BX из адреса 202 (из младшего адреса) и ES из адреса 204(старший адрес)

BX = DS, ES = 0003

LEA DX, [200] ; загрузка исполнительного адреса

LDS BX, [200] ; загрузка регистров DS:BX

Загрузка регистра BX из адреса 200 (из младшего адреса) и DS из адреса 202(старший адрес)

BX = 0001, DS = DS

JMP 100

Перемещение к команде по адресу 100

2.3. Загрузка стека

Начиная с адреса 100 набрать текст

ТЕСТ 3

PUSH BX

PUSH CX

POP DX

POP AX

JMP 100

Установить AX=1, BX=2, CX=3, DX=4, SP=10, SS=DS. Установите окно 2 памяти так, чтобы можно было наблюдать работу со стеком.

Выполнить тест в пошаговом режиме, контролировать содержимое регистров BX, DX, SP и содержимое ячеек в окне 1.

PUSH BX

Операция помещения в стек. Значение SP уменьшается на 2 (становится равным E). В память по адресу из сегмента SS со смещением 0E помещается значение регистра BX.

PUSH CX

Операция помещения в стек. Значение SP уменьшается на 2 (становится равным 0С). В память по адресу сегмента SS со смещением 0С помещается значение регистра СX.

POP DX

Операция извлечения из стека.В регистр DX помещается значение, хранящееся по адресу из сегмента SS со смещением SP (SP = 0C).. Значение SP увеличивается на 2 (становится равным 0E).

POP AX

Операция извлечения из стека.В регистр AX помещается значение, хранящееся по адресу из сегмента SS со смещением SP (SP = 0E). Значение SP увеличивается на 2 (становится равным 10).

JMP 100

Перемещение к команде по адресу 100

2.4. Логические операции.

Набрать ТЕСТ 4 с адреса CS:0100

ТЕСТ 4

AND BX, AX ; логическое умножение

OR DX, AX ; логическое сложение

NOT CX ; логическое отрицание

TEST AX, 01 ; проверка битов

JMP 100

Установить

CX=0F0F

BX=FFFF

AX=0002

DX=0004

Выполнить ТЕСТ 4 в пошаговом режиме, контролировать регистры BX, DX, CX, состояния флагов операции.

AND BX, AX ; логическое умножение

Помещает в регистр BX результат логического побитового умножения значения регистров BX и AX (0002). Флаги операции ZF,PF обнуляются.

OR DX, AX ; логическое сложение

Помещает в регистр DX результат логического побитового умножения значения регистров DX и AX (0006). Флаги операции ZF, обнуляются. Флаг PF становится равным 1, так как результат содержит четное число единиц в двоичной записи.

NOT CX ; логическое отрицание

Помещает в регистр СX результат логического побитового отрицания значения регистра СX (F0F0). Флаги операции ZF, обнуляются. Флаг PF становится равным 1, так как результат содержит четное число единиц в двоичной записи.

TEST AX, 01 ; проверка битов

TEST: действует как AND-устанавливает флаги, но не изменяет биты.

В данном случае проверка, содержит ли регистр АХ нечетный бит, если да то флаг ZF установится в 1, иначе - нет.

JMP 100

Перемещение к команде по адресу 100

2.5. Арифметические операции.

Начиная с адреса CS:0100 набрать тест 5

ТЕСТ 5

ADD AX, 3

SUB AX, 2

INC DX

DEC CX

CMP CX, 3

JMP 100

Установить AX=0; DX=5; CX=4.

Выполнить в пошаговом режиме, контролировать регистры AX, DX, CX и состояния флагов.

ADD AX, 3

Увеличивает значение регистра AX на 3. AX=0003

SUB AX, 2

Уменьшает значение регистра AX на 2. AX=0001

INC DX

Увеличивает значение регистра DX на 1. DX=0006

DEC CX

Уменьшает значение регистра CX на 1. CX=0003

CMP CX, 3

Сравнение значения регистра CX с 3. При равенстве, в регистр ZF помещается 1, в противном случае 0

JMP 100

Перемещение к команде по адресу 100

2.6. Команды передачи управления.

Набрать ТЕСТ 6 начиная с адреса CS:0100

ТЕСТ 6 :

CALL 120

ADD AX, 2

JMP 100

С адреса CS:120 набрать

ADD AX, 1

RET

Установить AX=0, выполнить тест в пошаговом режиме.

CALL 120

Вызывает команду по адресу 120, далее происходит выполнение команды ADD AX, 1 по этому адресу.

ADD AX, 1

Увеличивает значение регистра AX на 1. AX=0001

RET

Возврат к точке вызова CAL 120 (адрес CS:100).

ADD AX, 2

Увеличивает значение регистра AX на 2. AX=0003

JMP 100

Перемещение к команде по адресу 100

2.7. Операторы цикла.

Набрать ТЕСТ 7 начиная с адреса CS:0100

ТЕСТ 7 :

ADD AX, 1

LOOP 100

MOV CX, 10

JMP 100

Установить CX=5, AX=0, выполнить в пошаговом режиме.

Если программа должна выполнять определенное число циклов, команда LOOP, которая служит для этой цели, использует начальное значение в регистре CX. В каждом цикле команда LOOP автоматически уменьшает содержимое регистра CX на 1. Пока значение в CX не равно нулю, управление передается по адресу, указанному в операнде, и если в CX будет 0, управление переходит на следующую после LOOP команду.

ADD AX, 1

К значению регистра АХ добавится 1. АХ = 0001

Команда ADD AX, 1 будет выполняться 5 раз, так как в начале СХ равно 5, и кажый раз оно уменьшается на 1, т.е АХ будет в итоге равно 5, затем в регистр СХ переместится значений 10 командой MOV CX, 10

JMP 100

Перемещение к команде по адресу 100

2.8. Операторы передачи управления по условию.

Набрать ТЕСТ 8 начиная с адреса CS:0100

ТЕСТ 8 :

CMP AX , BX

JE 120

Набрать начиная с адреса CS:120

INC AX

INC BX

JMP 100

Установить BX=5, AX=5, выполнить в пошаговом режиме.

CMP AX , BX

Сравнение значений регистров AX, BX. При равенстве, в регистр ZF помещается 1, в противном случае 0

JE 120

Команда условного перехода. Переход к команде по адресу 120, если флаг ZF = 1.

Набрать начиная с адреса CS:120

INC AX

Инкрементирование значения регистра AX(увеличение на 1). AX = 0006.

INC BX

Инкрементирование значения регистра BX. BX = 0006.

JMP 100

Перемещение к команде по адресу 100

2.9. Команды управления процессором.

Набрать ТЕСТ 9 начиная с адреса CS:0100

ТЕСТ 9 :

CLC

CMC

NOP

CLC

STC

CLI

STI

JMP 100

Выполнить в пошаговом режиме.

Закончить работу с отладчиком командой QUIT.

CLC

Обнуление флага CF. CF = 0.

CMC

Инвертирование флага CF. CF = 1.

NOP

Команда ничего не делать

CLC

Обнуление флага CF. CF = 0.

STC

Присвоить флагу СF значение 1.

CLI

Обнуление флага IF. IF = 0.

STI

Присвоить флагу IF значение 1.

JMP 100

Перемещение к команде по адресу 100