- •Федеральное агентство связи
- •Регистры общего назначения.
- •Сегментные регистры.
- •Регистры состояния и управления.
- •Формат команд.
- •Создание программы на ассемблере.
- •Отладчик Turbo Debugger.
- •Структура программы на ассемблере.
- •Методические указания по выполнению лабораторных работ.
- •Лабораторная работа №1 Изучение пакета tasm и организация ввода данных с клавиатуры.
- •Лабораторная работа №2 Система адресования и последовательность выполнения основных команд пересылки.
- •Лабораторная работа №3 Программирование арифметических операций.
- •Лабораторная работа №4 Программирование логических операций
- •Лабораторная работа №5 Запись и выполнение программ пересылки данных между информационными массивами.
- •Лабораторная работа №6 Программирование ветвящихся вычислительных процессов.
- •Лабораторная работа №7 Программирование итеративных циклических вычислительных процессов.
- •Лабораторная работа №8 Программирование и контроль регулярных циклических вычислительных процессов.
- •Лабораторная работа №9 Программа и стек.
- •Лабораторная работа № 10 Программирование вычислительных процессов с использованием стандартных подпрограмм.
Лабораторная работа №9 Программа и стек.
Цель работы.
Изучение команд обмена данными со стековой памятью и методов организации программ.
Задание.
Предварительная часть.
Изучить содержание, форму записи и последовательность выполнения команд обмена данными со стековой памятью по [1,2]. Записать мнемокод и содержание команд pop, рора, popad, popf, popfd, push, pusha, pushad, pushf, pushfd.
Разработать детальную схему алгоритма ‘‘MULT10” вычисления функции у=х*10, у<232, х<216. Число х передается программе через стек. Результат y=x*10 должен быть помещен в две переменные h и l размером в слово. В h-старшую часть результата, а в l соответственно младшую часть результата.
Оформить процесс вычисления функции у=х*10 в виде программы «MULT10». Для этого в начале программы необходимо предусмотреть команду занесения в стек переменной х. Из регистров общего назначения разрешается использовать ax/ah/al, dx/ dh/dl, bp, sp. Необходимо также предусмотреть сохранение значений в регистрах ах, dx, bp, sp т.е. после окончания вычислительного процесса эти регистры должны содержать свое первоначальное значение. Вычисление функции v=x*10 производить с помощью команд сложение и сложения с переносом. Для произвольного доступа к элементам стека использовать регистр bp.
Таблица 8
Номер бригады |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
x |
a25616 |
44b316 |
ff4316 |
b7f316 |
fadb16 |
aaaa16 |
999b16 |
d1f716 |
6345916 |
Экспериментальная часть.
2.2.1. Записать программу “MULT10” в текстовом редакторе “Блокнот”, на языке ассемблер. Исходные данные взять из таблицы 8.
2.2.2. Произвести компоновку полученной программы, т.е. создать загрузочный модуль с опциями для tasm.exe - [/zi], а для tlink.exe [/v].
2.2.3. Загрузить отладчик TD и исследовать в нем работу программы в пошаговом режиме, нажимая клавишу F7.
3. Содержание отчета.
3.1. Команды работы со стековой памятью, мнемоника, содержание операции.
3.2. Детальная схема алгоритма “MULT10”.
3.3. Текст программы на языке ассемблер.
3.4. Таблица дампа стековой памяти содержащего данные используемые программой. При записи, возврате данных из стека фиксировать изменения в таблице.
Таблица состояния регистров процессора (включая регистр флагов) на каждом шаге выполнения программы.
Выводы.
Контрольные вопросы.
Содержание и форма записи команд возврата данных из стека.
Влияют ли команды pop и push на регистр флагов?
Какие основные части содержит любая циклическая программа?
Какова очередность записи и вывода данных из стека?
Как получить доступ к произвольной ячейки стека?
Какой регистр содержит указатель вершины стека?
Как в отладчике TD просмотреть содержимое стековой памяти?
В каком регистре содержится адрес памяти начала сегмента стека?