Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 1.docx
Скачиваний:
0
Добавлен:
01.02.2023
Размер:
1.48 Mб
Скачать

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

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

BX = DS, ES = 0003

LEA DX, [200]

LDS BX, [200]

Загрузка регистра 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 (становится равным 0C). В память по адресу из сегмента SS и смещением 0C помещается значение регистра CX.

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

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

TEST AX, 01

TEST действует как AND – устанавливает флаги, но не изменяет биты. Происходит проверка: содержит ли AX нечётный бит, если «Да», то флаг 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

Уменьшает значения СX на 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, выполнить в пошаговом режиме.

Ответ:

Так как программа выполняет некоторое количество циклов, то она сперва будет добавлять в регистр AX по 1, а CX будет уменьшать на 1. Это произойдёт 5 раз, потому что на 5-й шаг CX обнулится, а AX в этот момент будет равен 5. Затем CX будет присвоено значение 10. В конце произойдёт перемещение к команде по адресу 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.

JE 120

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

INC AX

Увеличение на 1 значения AX. AX = 0006

INC BX

Увеличение на 1 значения 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

Присвоение CF значение 1. CF = 1.

CLI

Обнуление IF. IF = 0.

STI

Присвоение IF значение 1.

JMP 100

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

Зачётное задание.

Записать в AX номер дня недели, на который приходится день года записанный в регистре BX, считая что 1 января - понедельник.

mov ax, bx ; Копируем значение из BX в AX

dec ax ; Уменьшаем значение в AX на 1

mov cl, 4 ; Записываем в CL число 4

div cl ; Делим AX на CL

add ax, 5 ; Добавляем к AX число 5

  1. mov ax, bx – копируем значение из регистра BX в регистр AX. Мы хотим начать работу с значением, указанным в BX, поэтому мы копируем его в AX.

  2. dec ax – уменьшает значение в регистре AX на 1. Уменьшаем значение, так как хотим считать нумерацию дней года с 1, а не с 0.

  3. mov cl, 4 – записываем число 4 в регистр CL. Мы будем использовать это число для деления на него регистра AX. 4 – потому в месяце 4 недели.

  4. div cl – делит значение в регистре AX на значение в регистре CL. Результат деления записывается в регистр AX, а остаток от деления - в регистр AH. Так мы получим номер дня недели.

  5. add ax, 5 – добавляем 5, так как хотим, чтобы 1 января (первый день года) считался понедельником, то есть первым днем недели. Поскольку деление на 4 даст нам номер недели (то есть результат деления), то мы можем просто добавить 5, чтобы получить номер дня недели, на который приходится день года, указанный в BX.

Соседние файлы в предмете Системное программное обеспечение