Цель лабораторной работы: изучение структуры ассемблерной программы, освоение инструментальных средств лабораторной среды, изучение возможностей отладки программ с помощью симулятора-отладчика.
Учебная программа L_01.A85 выполняет (упрощенная схема алгоритма представлена на рис.1) следующие операции:
· инициализацию, включая инициализацию используемых приборов, переменных и буферов
· прием входной информации в формате ASCII, поступающей через порт B 8355, и запись в буфер BUF1 - блок 2;
· кодирование содержимого буфера BUF1 и перепись в буфер BUF2 - блок 3;
· вывод закодированной информации из буфера BUF2 через порт portA8355 потребителю - блок 5.
Для визуальной оценки процесса кодирования информация из буфера BUF2 повторно обрабатывается (декодируется) и записывается в BUF3 - блок 4.
Таким образом, при правильном выполнении процесса кодирования/декодирования записи в буферах BUF1 и BUF3 должны быть идентичны. Кроме того, буферы, организованные в программе, для целей визуализации перед использованием маркируются путем записи символов "1", "2", "3" во все позиции.
Структурная схема контроллера
1. Ознакомление с листингом программы (раздел 1.5.2)
Текст листинга набран с использованием различных цветов шрифта. Синий цвет использован для выделения комментариев. Зеленый – для обозначения директив, к примеру EQU, DS, DEFSEG, красный – для обозначения численных значений, к примеру адрес ячейки памяти, черный – для обозначения названий символических констант. Данные должны быть размещены в 3 буферах одинаковой длины, между которыми после некоторой обработки производятся пересылки. Неявно в процессе обработки используется еще одна область данных — стек, для которой также выделено пространство. Структура BUF1 определяется в сегменте данных DATA1, который
размещается в памяти директивой DEFSEG. В пространстве буфера под TEXTSIZE байт резервируется память (без определения начального значения). Сегмент имеет класс DATA и размещен с начального адреса памяти типа RAM. При задании символических имен, использованных при определении структуры данных, применены символические константы, определенные с помощью директив EQU. Буферы BUF2, BUF3 расположены в открытом сегменте. Аналогично может быть создан сегмент стека, который обычно размещается в старших адресах памяти типа RAM. По умолчанию транслятор для адресов ввода/вывода предоставляет сегмент IOSPACE, расположенный с нулевых
значений. В нем могут располагаться регистры БИС 8155.
2. Изучение содержимого карты памяти (раздел 1.6.2)
Содержимое карты памяти представлены в файле L_01.MAP. В карте представлены сегменты пространства портов ввода/вывода (class "I"), памяти (class "M") и символических имен-констант (class “N”). И есть сегмент нулевой длины DATA. В class "I" представлены сегменты IOSPACE, начинающегося с 0000h, и имеющего длину 0006h, PA8355SEG, начинающегося с 0008h, и имеющего длину 0004h. В class "M" представлены сегменты СODE, начинающегося с 0000h и имеющего длину 0096h, CODE2 начинающегося с 0096h и имеющего длину 0006h, DATA1, начинающегося с 0800h и имеющего длину 0061h, STACK, начинающегося с 0fe0h и заканчивающемся на ячейке с адресом 0fffh.
Далее обозначены символические имена, которые структурированы по классам с указанием к какому сегменту они относятся. К примеру в классе “I” указаны названия выводов микросхем 8155 и 8355, означающие соответственно порты входа и выхода. Сегменты объединены в 2 модуля L_01 и subr_01.
3. Исследование программы во время прохода. (раздел 2.1.2)
Была установлена динамическая точка останова на адресе PC = 0016h. После нажатия на F1, запустился проход программы до команды 0016h, и значение программного счетчика соответственно изменилось на 0016h, значение стека SP осталось 1000h, зато поменялись значения ТУ и счетчика повторений ( BC = 0000h, HL = 1000h. При просмотре дампа памяти видно, что в ячейках с адресами 0FF0h – 0FF8h записан символ ‘.’.
В итоге, очевидно, что при прогоне до заданной точки останова программа выполняла инициализацию (задается начальное значение стека, происходит настройка портов ввода\вывода) и запись области стека символами ‘.’, это сделано для визуализации области стека.
(раздел 2.1.3)Аналогично для визуализации буфера 1, буфера2, буфера3, их области расположения заполняются соответственно ‘1’, ‘2’, ‘3’. Это было проверено в ходе исследования путем настройки окна дампа памяти.
(раздел 2.1.4) Далее производится исследование цикла ввода данных. Начальное значение ТУ записи 0860h изменилось на 081dh. По мере прогона символы «1» заменялись на символы данных и менялось значение порта В (стало 73:s:01110011), теперь в буфере 1 записано «Hello my Friends 1121 ?F /This1/»
(раздел 2.1.5) далее запущен прогон программы. Произошла запись данных в буфер 3 и их декодирование. В итоге содержимое буферов BUF1 и BUF3 совпало, что видно при сравнении дампов памяти на рисунке 1.
Рисунок 1.
(раздел 2.1.6) Далее была произведена запись содержимого BUF3 в выходной файл D442.MSG. При сравнении содержимого буфера и выходного файла различий не было обнаружено за исключением 2х нулей в начале.
Изменение файла данных программы.
Файл входных данных и файл выходных данных подключаются к симулятору отладчику на стадии его загрузки. Вся настроечная информация сосредоточена в файле типа .zgr, который является текстовым и загружен в одно из окон текстового процессора UE32. Пятая строка этого файла задает имя файла, которое используется как входной файл данных. Было заменено имя исходного файла Demo.msg на Demo2.msg, и этот командный файл сохранили как l_011.zgr. После запуска отладчика. Содержимое буфера 1 (2 на рисунке 2) изменилось.
Рисунок 2
Санкт-Петербургский государственный электротехнический университет имени Ульянова-Ленина «ЛЭТИ»
Кафедра РС
Отчет по лабораторной работе № 2
Выполнил: Руско М. В.
Группа: 0106
Проверил:
Добырн В, В.
Санкт-Петербург
2013 г.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.