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