|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Тема: «Разработка и отладка программы с использованием подпрограмм и
Методические указания по выполнению лабораторной работы № 14. Тема: «Разработка и отладка программы с использованием подпрограмм и команд работы со стеком »
Цель работы: получить практические навыки работы со стеком. Оборудование: методические рекомендации по выполнению работы, ПК, программа-отладчик AFD.
Краткие теоретические сведения. Стек – это область памяти, специально выделяемая для временного хранения данных программы. Для стека в структуре программы предусмотрен отдельный сегмент. Для работы со стеком предназначены три регистра: - ss – сегментный регистр стека; - sp/esp – регистр указателя стека; - bp/ebp – регистр указателя базы стека. Размер стека зависит от режима работы микропроцессора и ограничивается 64 Кбайт. В каждый момент времени доступен только один стек, адрес сегмента которого содержится в регистре ss. Этот стек называется текущим. Для того чтобы обратиться к другому стеку (“переключить стек”), необходимо загрузить в регистр ss другой адрес. Регистр ss автоматически используется процессором для выполнения всех команд, работающих со стеком. Регистр esp/sp всегда указывает на вершину стека, то есть содержит смещение, по которому в стек был занесен последний элемент. Команды работы со стеком неявно изменяют этот регистр так, чтобы он указывал всегда на последний записанный в стек элемент. Если стек пуст, то значение esp равно адресу последнего байта сегмента, выделенного под стек. При занесении элемента в стек процессор уменьшает значение регистра esp, а затем записывает элемент по адресу новой вершины. При извлечении данных из стека процессор копирует элемент, расположенный по адресу вершины, а затем увеличивает значение регистра указателя стека esp. Таким образом, получается, что стек растет вниз, в сторону уменьшения адресов. Работает стек по принципу: «Первый вошел – последний вышел». Для организации работы со стеком существуют специальные команды записи и чтения. push < источник> – запись значения источник в вершину стека. pop < назначение> – запись значения из вершины стека по месту, указанному операндом < назначение>. Значение при этом “снимается” с вершины стека.
Методика выполнения работы. 1. Запустить отладчик. Набрать А 100. Ввести программу записи содержимого регистров в стек: PUSH AX PUSH [10] PUSH [SI] INT3 2. Для выхода из ассемблирования нажать Ctrl+Enter. Записать в регистры и ячейки исходные данные согласно варианта (таблица 1). Посмотреть начальное значение регистра SP. Таблица 1.
Будьте внимательны, первая программа связана со второй (п. 4).
3. Набрать D 100, выполнить программу в пошаговом режиме F2. Убедиться, что после выполнения каждой команды содержимое SP уменьшается на 2, т. к. стек работает со словами и меньший байт записывается по меньшему адресу. Содержимое регистров при этом не изменяется. Заполнить таблицу 1.
4. Очистить содержимое регистров АХ, ВХ, СХ, DX (записать 0). Значение регистра SP не изменять. Отладчик не закрывать! Ниже, после первой программы ввести программу, которая выталкивает из стека содержимое регистров. Учитывая принцип работы стека, вводимая программа будет иметь вид: РОР DX РОР CX РОР BX РОР AX INT3 Выполнить программу в пошаговом режиме F2, заполнить таблицу 2. Таблица 2.
5. Исследовать выполнение команды PUSHA, которая записывает содержимое всех регистров МП в стек (таблица 3). Набрать А 100 и программу: PUSHA INT3 Записать в регистры значения из таблицы 3. Записать начальные значения регистров SP и BP. Набрать D 100, выполнить программу в пошаговом режиме (F2). Будьте внимательны, третья программа связана с четвертой (п. 6).
Таблица 3.
6. Исследовать выполнение команды РОРА, которая выталкивает из стека содержимое всех регистров. Очистить регистры, набрать А 100 и программу: РОРА INT3 Таблица 4.
7. Набрать D 100, выполнить программу в пошаговом режиме (F2), заполнить таблицу 4.
8. Исследовать выполнение команды PUSHF, которая размещает в вершине стека содержимое регистра флагов. Набрать А 100 и программу: PUSHF INT3
9. Набрать D 100, выполнить программу. Записать содержимое 2-х ячеек вершины стека (смотрите содержимое ячейки памяти, адрес которой указан в регистре SP) и сравнить результат со значениями флажков. Формат регистра флажков имеет следующий вид:
10. Пример использования стека. Дан массив (см. таблицы 4, 5), состоящий из 10 байт, записанных с адреса со смещением 0010. Используя стек можно переписать элементы массива в обратном порядке (вместо имен меток писать адреса перехода в командах loop). Выполнение программы клавиша F1 (таблица 6).
Таблица 4 – Текст программы
Таблица 5 – Исходные данные
Таблица 6.
11. Сделать вывод о проделанной работе. Ответить на контрольные вопросы. Составить отчет.
Отчет должен содержать: 1. Номер, название и цель работы. Номер варианта. 2. Заполненные таблицы 1–4, 6; значение флажков п. 9. 4. Ответы на контрольные вопросы. Вывод о проделанной работе.
Контрольные вопросы: 1. Как производится запись числа в стек? 2. Как выполняется чтение числа из стека? 3. Какие функции выполняет стек? 4. Какая команда используется для записи числа в стек? 5. Какая команда используется для записи содержимого всех регистров МП в стек?
Литература 1. Майко Г. В. Ассемблер для IBM PC: - М.: «Бизнес-Информ», «Сирин», 1999г. – 212с. 2. Юров В., Хорошенко С. Аssembler: учебный курс – СПб: Питер Ком, 1999г. – 672 с.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|