Лабораторная работа n 4. 'assembler
Часть 1. Этапы формирования ассемблерной программы
Цель цикла работ - ознакомиться: сэлементамипрограммированияна языкеассемблера ПК, со структурой исполняемых .ЕХЕ машинных программ, спроцессами ассемблирования и создания исполняемой машиннойпрограммы,с отладкой программ в среде отладчикаDEBUG, получить навыки работына профессиональной ПК . Изучить взаимодействие компонентов ПК при исполнении машинной программы и процедур прерывания. Познакомиться с процедурами машинного перевода ASCII-кодов в двоичные коды и обратно.
Необходимые ресурсы:
· Оборудование: IBM PC совместимая ПК.
· Программное обеспечение: MS DOS, транслятор-компилятор MASM; EDIT NC или иной текстовый редактор, формирующий файлы с расширением .TXT; загрузчик программ LINK; отладчик программ DEBUG.
Порядок выполнения работ
1. Ознакомиться с теоретическими вопросами выполнения заданий лабораторной работы: сэлементамипрограммированияна языкеассемблера ПК, с системой прерываний ПК и использованием прерываний в ассемблере, со структурой исполняемых .ЕХЕ машинных программ, спроцессами ассемблирования и создания исполнимой машиннойпрограммы
2. Выполнить задания.
3. Ознакомить преподавателя с результатами работы. Ее завершение по разрешению преподавателя . Получение задания на следующую работу.
Перечень заданий
1. Ознакомиться с элементами программирования дляПК на языкеассемблера ( включая : структуру иназначениерегистровойпамятиМП, способы адресации ячеек основной памяти, основныепрерыванияBIOSи DOS, используемые при работе с клавиатурой, дисплеемидисковойпамятью).
2. Ознакомиться с процессами ассемблирования, редактирования связей и создания исполняемых машинных программ с расширением .ЕХЕ.
Этапы формирования программы
1. Составление программы и ее ввод под каким-нибудь именем на диск (дискету).
Привводепрограммы используется какой-либо текстовой редактор,например редактор NC
2. Трансляция (ассемблирование) программы.
При использовании транслятора MASM вводится:
MASM c:prog.asm или просто MASM.
Появится запрос:
Surce filename [.asm]:
; указать путь к файлу и имя файла
; (если оно не было указано ранее).
Object filename [prog.obj]:
; если имя объектной программы
; (объектного модуля) другое, то
; следует его указать, иначе нажать
; клавишу ENTER (RETURN).
Source listing [nul.lst]:
; если нужен листинг программы в
; машинных кодах, ввести имя
; дисковода, где его формировать,
; иначе - ENTER.
Cross-reference [nul.crf]: ; если нужен листинг перекрестных
; ссылок программы, ввести имя
; дисковода, иначе - ENTER.
Альтернативный вариант вызова ассемблера:
MASM [c:]prog, c:, c:, c:
Примечание:
ЛИСТИНГ - распечатка, файл для распечатки. Листинг программы содержит программу исходную и в машинных кодах, атакжеобнаруженныепри трансляции ошибки в программе; листинг перекрестныхссылокпоказываетименапеременных и номера строк программы, где эти переменные используются.
3. Компоновка объектного модуля (загрузка и редактирование связей).
Вводится:
LINK c:prog.obj ;(или просто LINK)
Появится запрос:
Object modules [.obj]
; указать имя файла .obj, если оно не ; было указано ранее.
Run file [prog.exe]
; если имя исполняемой программы другое,
; то следует его ввести, иначе - ENTER.
List file [nul.map]; следуетввести CON.
Libraries [ .lib]
; обычно - ENTER (если при редактировании
; дополнительных библиотек связей не
; требуется).
Альтернативный вариант вызова загрузчика:
LINK [c:]prog.obj, c:, con
Примечание.
.map-файл содержит таблицу имен и размер сегментов, атакже ошибки, обнаруженные при загрузке; ввод CON означает требование вывода их на экран дисплея.
4. Отладка программы (если есть необходимость). Можно использовать отладчик Debug. Вызов отладчика Debug:
DEBUG c:prog.exe.
5. Выполнение программы.
При наличии приглашения к работе MS DOS ввести имя программы:
c:prog[.exe]
Структура исходной программы на языке ассемблера для получения исполняемой программы.exe.
Операционнаясистема MS DOS предъявляет некоторые обязательные требованияк структуре .ASM-программы, предназначенной для последующего создания .EXE-программы:
· программа может использовать 4 сегмента памяти, начальные адресакоторыхдолжны быть загружены в регистры микропроцессора: CS, SS, DS и ES, а сами сегменты в явном виде определены в программе в видеоператорныхскобок:имя_сегментаsegment ... имя_сегмента ends(весии MS DOS 4.0 и выше допускают болеепростоеуказание сегментов в программе: имя_сегмента);
· впрограммедолжнобытьуказание: какие сегментные регистры закрепляютсязаиспользуемымисегментами памяти; при исполнении программысегментныерегистрыCS, SS, ES в соответствии с этими указаниями загружаются автоматически;
· сегмент данных DS в .EXE-программе не может быть загружен авто матически, поскольку он используется программой-загрузчиком (Link) для формирования начального адреса служебной области памяти - префикса программного сегмента (PSP), непосредственно предшествующего любойисполняемойпрограмме.
Регистр сегментаданныхDSдолженбыть инициирован принудительно – для этого следует в самом начале исполняемой .EXE-программы записать в стеквектор-адресвозвратакслужебной области PSP: содержимое регистраDSинулевоесмещение, а затем в регистр DS загрузить адрес сегмента данных исполняемой программы.
Примечание. PSP - группа служебных словвоперативнойпамяти,формируемаядля каждой загружаемой программыпользователяи занимающая обычно 256 байт (100Н байт). При загрузке программы пользователя в ОЗУ автоматически формируетсяPSP,и ее начальный адрес записывается в регистр DS.
Обеспечитьпосле завершения выполнения программы возврат к префиксупрограммного сегмента, оформив обращение к исполняемой программе в виде обращения к процедуре (главной процедуре, обязательно с атрибутом far) и поместив в конце программы команду возврата ret (выход из программы можно выполнитьтакже используя прерывание 20H DOS или функцию 4C прерывания 21H DOS, но управление при этом передается не вPSP, а непосредственно в резидентную часть программы COMMAND.COM).