Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет 1 лаба (архитектура).doc
Скачиваний:
14
Добавлен:
09.02.2015
Размер:
111.1 Кб
Скачать
  1. Текст задания:

1. Загрузить файл hello1.asm из каталога \лаборат_работы в каталог \MASM.

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

3. Протранслировать программу с помощью строки > masm имя_файла.asm c созданием объектного файла имя_файла.obj и файла диагностических сообщений (файла листинга) имя_файла.lst. Объяснить и исправить синтаксические ошибки, если они будут обнаружены транслятором и представлены в файле листинга. Повторить трансляцию программы до получения объектного файла(модуля).

4. Скомпоновать загрузочный модуль (имя_файла.exe) с помощью строки > link имя_файла.obj c созданием загрузочного модуля (имя_файла.exe) и файла карты памяти (имя_файла.map). По карте памяти оценить размещение и длину сегментов программы.

5. Выполнить программу в автоматическом режиме путем набора строки > имя_файла.exe и убедиться в ее работоспособности (результат выполнения просмотреть в режиме отображения экрана пользователя, получаемого набором клавиш ctrl^O);

6. Создать версию hello1_2 программы, дополненную еще одним оператором вывода другой строки приветствия.

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

8. Выполнить программу hello1 в пошаговом режиме под управлением отладчика: > afd имя_файла.exe с фиксацией содержимого используемых регистров и ячеек памяти до и после выполнения команды. Обычные команды выполняются по F1, а прерывания Int - по F2, чтобы не входить внутрь обработчика прерываний. Выход из отладчика - по команде Quit. Записать содержимое всех регистров процессора, включая сегментные, перед выполнением 1-ой команды. Результаты прогона программы под управлением отладчика должны быть представлены в виде, показанном на примере одной команды в табл.1, и подписаны преподавателем.

Табл.1

┌───────┬─────────────────┬─────────────┬──────────────────────────────┐

│ Адрес │Символический код│16-ричный код│ Содержимое Рег-ов и Яч.Пам. │

│команды│ команды │ команды │ до вып-я ком.│после вып.ком.│

├───────┼─────────────────┼─────────────┼───────────────┼──────────────┤

│ 0003 │ mov ds,ax │ 8E D8 │ (ax)= 2D87 │ (ax)= 2D87 │

│ │ │ │ (ds)= 2D75 │ (ds)= 2D87 │

│ │ │ │ (ip)= 0003 │ (ip)= 0005 │

└───────┴─────────────────┴─────────────┴───────────────┴──────────────┘

Часть 2.

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

2. Протранслировать программу hello2.asm с помощью транслятора masm с созданием объектного файла и файла диагностических сообщений (файла листинга). Объяснить и исправить синтаксические ошибки, если они будут обнаружены транслятором. Повторить трансляцию программы до получения объектного модуля.

3. Скомпоновать загрузочный модуль hello2.exe с помощью компоновщика Link.

4. Выполнить программу в автоматическом режиме и убедиться в ее работоспособности.

5. Выполнить программу hello2 в пошаговом режиме под управлением отладчика afd с фиксацией содержимого используемых регистров и ячеек памяти до и после выполнения команд. Записать содержимое всех регистров процессора, включая сегментные, перед выполнением 1-ой команды.

6. Результаты прогона программы под управлением отладчика должны быть подписаны преподавателем.

  1. Теория:

СЕГМЕНТЫ

Сегментом называется область, которая начинается на границе параграфа, т.е. по любому адресу, который делится на 16 без остатка. Хотя сегмент может располагаться в любом месте памяти и иметь размер до 64 Кбайт, он требует столько памяти, cколько необходимо для выполнения программы. Имеется три главных сегмента:

1. Сегмент кодов. Сегмент кодов содержит машинные команды, которые будут выполняться. Обычно первая выполняемая команда находится в начале этого сегмента и операционная система передает управление по адресу данного сегмента для выполнения программы. Регистр сегмента кодов (CS) адресует данный сегмент.

2. Сегмент данных. Сегмент данных содержит определенные данные, константы и рабочие области, необходимые программе. Регистр сегмента данных (DS) адресует данный сегмент.

3. Сегмент стека. Стек содержит адреса возврата как для программы для возврата в операционную систему, так и для вызовов подпрограмм для возврата в главную программу. Регистр сегмента стека (SS) адресует данный сегмент.

Внутри программы все адреса памяти относительны к началу сегмента. Такие адреса называются смещением от начала сегмента. Двухбайтовое смещение (16-бит) может быть в пределах от шест. 0000 до шест. FFFF или от 0 до 65535. Для обращения к любому адресу в программе, компьютер складывает адрес в регистре сегмента и смещение. Например, первый байт в сегменте кодов имеет смещение 0, второй байт - 01 и так далее до смещения 65535.

РЕГИСТРЫ

Процессоры 8086/8088 имеют 14 регистров, используемых для управления выполняющейся программой, для адресации памяти и для обеспечения арифметических вычислений. Каждый регистр имеет длину в одно слово (16 бит) и адресуется по имени. Биты регистра принято нумеровать слева направо:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]