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

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

Таблица 3

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

3. Выберите пункт «Emulate» в меню, чтобы перейти в режим эмуляции. Установите значение 2 ячеек памяти ОЗУ (эффективный адрес ячеек определяется содержимым регистра BX) равным DI3. Для этого нажмите в нижней части окна эмуляции кнопку «Aux» и выберите пункт «memory». В результате на экране появится диалоговое окно «Random Access Memory» (рисунок 2.3), которое позволяет отобразить в режиме «tab le» 128 байт ОЗУ в виде таблицы 8x16. Начало блока памяти определяется двумя адресами: сегментом и смещением. В данном задании адрес сегмента оставляем без изменений, изменяем только смещение на значение DI2 и нажимаем на кнопку «Update».

14

Необходимо учитывать, что число DI3 двухбайтное, поэтому оно займет две соседние ячейки ОЗУ. Причем по меньшему адресу будет располагаться младший байт числа, а по старшему - старший байт. Для изменения значения ячейки памяти необходимо щелкнуть левой кнопкой (ЛК) мыши на выбранной ячейке и ввести новое значение в шестнадцатеричном коде.

Рис. 3. Диалоговое окно для изменения содержимого ОЗУ в эмуляторе

4. Выполняем программу в пошаговом режиме, нажимая кнопку «Single Step». На каждом шаге необходимо фиксировать содержимое регистров SP, AX, DS, ES, BX, DX, CX, SS в таблице следующего вида:

Таблица 4

Изменения содержимого регистров

Номер

SP

AX

DS

BX

ES

DX

CX

SS

шага

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

15

Содержимое стека можно просмотреть двумя способа-

ми:

-в окне эмуляции в нижней части экрана нажать на кнопку «stack»;

-просмотреть содержимое памяти по адресу SSSP (как

впункте 3).

5.Сделать выводы по результатам выполнения 4 пункта работы.

6.Изменить программный код, реализующий задание 4 из лабораторной работы №1 таким образом, чтобы вычитание регистров R1 и R2 производилось при выполнении условия COND, иначе - их сложение. При этом изменение работы программы должно реализоваться за счет инвертирования флажков регистра состояния при помощи стека, которые анализирует команда условного перехода.

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

PUSHF

POP DX

XOR DX,8000h

PUSH DX

POPF

7.Выполните разработанный в пункте 6 программный код в эмуляторе Emu8086 в пошаговом режиме. При этом фиксируйте изменения в регистре флагов на каждом шаге. Сделайте выводы;

8.Создайте новый проект в Emu8086 и разработайте программный код, позволяющий обменять содержимое регистров R3 и R4, используя команды только для работы со стеком;

9.Выполните программный код, разработанный в пункте 8, в пошаговом режиме и убедитесь в его правильности;

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

держаться:

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

16

-задание;

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

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

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

1.Назначение стека микропроцессора 8086?

2.Какие регистры использует микропроцессор для определения вершины стека?

3.Где размещается стек?

4.Что означает аббревиатура LIFO?

5.Как изменится содержимое регистра SP после выполнения команды PUSH?

6.Сколько байт занимает одни элемент стека микропроцессора 8086?

7.Назначение программ-отладчиков?

17

Лабораторная работа №3 Подпрограммы и передача параметров через стек

Цель работы: изучить особенности выполнения вызова подпрограмм и передачи им параметров через стек.

Теоретические сведения

В программировании часто встречаются ситуации, когда одинаковые действия необходимо выполнять многократно в разных частях программы. При этом с целью экономии памяти компьютера не следует многократно повторять одну и ту же последовательность команд в программе - достаточно один раз написать подпрограмму (в терминах языков высокого уровня - процедуру) и обеспечить правильный вызов этой подпрограммы и возврат в точку вызова по завершению подпрограммы.

Использование подпрограмм позволяет уменьшить время разработки программ и улучшает её структуру с точки зрения её понимания и сопровождения, что особенно важно в языках высокого уровня. Подпрограмма - это последовательность команд, заканчивающаяся командой возврата, выполнение которой может быть вызвано из любого места программы любое количество раз[3].

На рисунке 4 представлена общая схема размещения программы, использующей подпрограмму. Основная программа состоит из обычных команд и оператора вызова подпрограммы Call. Команда Call передает управление заданной подпрограмме, предварительно загрузив в стек адрес возврата (если программа и подпрограмм находятся в одном сегменте, то в стек заносится значение только регистра IP, иначе - регистров CS и IP). Дальше микропроцессор выполняет команды подпрограммы. Последней командой подпрограммы должна быть команда возврата RET, осуществляющую передачу управления в точку возврата.

18

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