Лабораторная работа № 5. Использование стека и подпрограмм. Организация передачи параметров через стек

Цель работы

Цели лабораторной работы:

1) изучение принципов функционирования памяти и микропроцессора компьютера при выполнении операций со стеком для передачи параметров через стек и рекурсивными подпрограммами;

2) приобретение навыков использования команд для работы со стеком и подпрограммами для организации передачи параметров через стек;

3) получение представления об особенностях обработки данных, команд и режимах доступа к данным при организации передачи параметров в подпрограммы через стек.

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

1) Какие регистры используются при работе со стеком? Назначение регистра BP.

2) Когда передаваемые в процедуру аргументы записываются в стек? Какое место они занимают в стеке после входа в процедуру?

3) Формат процедуры при использовании передачи параметров через стек. Пролог и эпилог процедуры.

4) Какие действия выполняются в вызывающей программе после возврата из процедуры и для чего?

5) Как вычисляется адрес требуемого параметра в стеке в процедурах ближнего вызова? Как вычислить адрес аргумента в процедуре дальнего вызова?

6) Передача параметров по ссылке и ее особенности. Какой оператор используется для записи в регистр адреса данного, а не самого данного?

7) Передача параметров по значению и ее особенности.

Задание на лабораторную работу

1) Написать программу на языке ассемблера, которая использует подпрограммы и стек для передачи параметров.

1.1) В сегменте данных определить две двухбайтовые ячейки с одинаковым значением: 3h, ниже еще две двухбайтовые ячейки для сохранения результата с произвольным первоначальным значением.

1.2) В сегменте кода описать процедуру ближнего вызова, в которой содержится программа вычисления факториала числа.

1.3) Число, для которого необходимо вычислить факториал должно передаваться в качестве аргумента через стек.

1.4) В сегменте кода в основной программе выполнить дважды вызов процедуры вычисления факториала: в первом случае аргумент передается по значению (из первой ячейки), во втором случае – по ссылке (из второй ячейки).

1.5) Результаты вычисления факториала записать в соответствующие ячейки памяти, определенные в сегменте данных.

2) На основе исходной программы получить исполняемый файл. Выполнить программу по шагам с помощью отладчика TURBO DEBUGGER, описать изменение состояния регистров и ячеек памяти при выполнении программы. Обратить особое внимание на следующие моменты:

2.1) Каково содержимое стека до входа в процедуру и после?

2.2) Как изменяется содержимое стека при рекурсивных вызовах процедуры и возвратах из рекурсии?

2.3) На что указывает регистр SP после выполнения первой команды эпилога процедуры?

2.4) Каким образом в программе осуществляется передача параметра по значению и по ссылке?

2.5) Какое значение имеют ячейки памяти, отведенные под исходные данные, и почему?

 


Лабораторная работа № 6. Организация взаимодействия с устройствами компьютера. Использование портов

Цель работы

Цели лабораторной работы:

1) изучение принципов функционирования памяти и микропроцессора компьютера при выполнении операций с использованием внешних и внутренних устройств компьютера;

2) приобретение навыков использования команд и функций операционной системы для организации взаимодействия с внешними и внутренними устройствами;

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

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

1) Что такое порт?

2) Каким образом указывается, что обмен данными осуществляется через порт, а не через ячейку памяти с тем же адресом?

3) Что необходимо знать для управления устройствами с помощью портов?

4) Регистры какой размерности используются при работе с портами?

5) В каких программах возможно прямое управление устройствами в обход операционной системы?

6) Какие команды используются для обмена данными через порты?

Задание на лабораторную работу

1) Написать программу на языке ассемблера, которая позволяет получить звуковой сигнал, выдаваемый компьютером через свой внутренний динамик. Частота сигнала задается таймером.

1.1) В сегменте данных определить однобайтовую ячейку, в которой задать число повторений звукового сигнала.

1.2) В сегменте кода предварительно отключить возможность реагирования микропроцессора на прерывания командой CLI (для получения чистого звука).

1.3) Взаимодействие таймера и динамика осуществляется через порт 61H. В целях синхронизации таймера и динамика необходимо сначала отключить динамик от таймера, сбросив 0 нулевой бит порта 61H.

1.3) Подсоединить динамик к таймеру, установив нулевой бит порта 61H в единицу.

1.4) Включить звук, установив первый бит порта 61H в единицу.

1.5) Для выключения звука необходимо сбросить в 0 первый бит порта 61H и отключить динамик от таймера.

1.6) Включить возможность реагирования процессора на прерывания командой STI.

1.7) Организовать многократное звучание сигнала в соответствии с числом повторений, заданных в сегменте данных.

Примечание. Длительность звука можно задать, организовав между включением и отключением сигнала пустой цикл с определенным числом повторений, например, 100. При необходимости, длительность можно регулировать.

2) На основе исходной программы получить исполняемый файл. Выполнить программу по шагам с помощью отладчика TURBO DEBUGGER, описать изменение состояния регистров и ячеек памяти при выполнении программы. Обратить особое внимание на следующие моменты:

2.1) Какие операции используются для сброса и установки отдельных битов?

2.2) Какой регистр процессора используется в программе для взаимодействия с портом 61H?

 


Содержание отчетов по лабораторным работам

1) Титульный лист, оформленный в соответствии с приложениями А, Б или В.

2) Задание на лабораторную работу.

3) Ответы на контрольные вопросы.

4) Текст программы с пояснениями.

Список рекомендуемой литературы

1. Юров В.И. Assembler [Текст]/ В.И. Юров.- Учебник для вузов.- 2-е издание.- СПб.: Питер.- 2006.- 637 с.: ил.- ISBN: 5-94723-581-1

2. Юров В.И. Assembler. Практика [Текст]/ В.И. Юров.- Учебник для вузов.- 2-е издание.- СПб.- Питер.- 2006.- 399 с.: ил.- ISBN: 5-94723-671-0

3. Абель, П. Язык ассемблера для IBM PC и программирования [Текст]/П. Абель/ Пер. с англ. Ю.В. Сальникова.- М.: Высшая школа.-1992.-447 с., ил.


Приложение А

(обязательное)