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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Цель работы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


5. задания к практическим занятиям

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

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

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

В ходе практического занятия студенты выполняют соответствующие задания. В соответствии с заданием создаётся программа на языке ассемблера, исходный текст которой формируется в любом текстовом редакторе, например, Блокноте. Затем после получения исполняемого файла осуществляется выполнение программы на виртуальной машине DOSBox (см. раздел 3). Возникшие при выполнении задания вопросы решаются с преподавателем в течение аудиторного занятия.

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

1. Текст исходной программы на языке ассемблера с комментариями в соответствии с заданием.

2. Краткие письменные ответы на контрольные вопросы практического занятия.



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 102; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.134.102.182 (0.006 с.)