Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Структура программы на языке ассемблера для создания файла EXE
Операционная система MS DOS предъявляет некоторые обязательные требования к структуре ASM-программы, предназначенной для последующего создания EXE-файла. Программа может использовать 4 сегмента памяти, начальные адреса которых должны быть загружены в регистры микропроцессора CS, SS, DS и ES, а сами сегменты в явном виде определены в программе в виде операторных скобок: имя_сегмента segment... имя_сегмента ends (версии MS DOS 4.0 и выше допускают более простое указание сегментов в программе: имя_сегмента.). В программе должно быть указание, какие сегментные регистры закрепляются за используемыми сегментами памяти; при исполнении программы сегментные регистры CS, SS, ES в соответствии с этими указаниями загружаются автоматически. Сегмент данных DS в EXE-программе не может быть загружен автоматически, поскольку он используется программным загрузчиком для формирования начального адреса служебной области памяти — префикса программного сегмента (PSP), непосредственно предшествующего любой исполняемой программе. Регистр сегмента данных DS должен быть инициирован принудительно — для этого следует в самом начале ASM-программы записать в стек вектор-адрес возврата к служебной области PSP: содержимое регистра DS и нулевое смещение, а затем в регистр DS загрузить адрес сегмента данных. PSP — это группа служебных слов в оперативной памяти, формируемая для каждой загружаемой программы пользователя и занимающая обычно 256 байтов (100h). При запуске программы пользователя в ОЗУ автоматически формируется PSP, и ее начальный адрес помещается в регистр DS. Обеспечение после завершения выполнения программы возврата к префиксу программного сегмента; проще всего это можно сделать, оформив обращение к исполняемой программе в виде обращения к процедуре (главной процедуре, обязательно с атрибутом far) и поместив в конце программы команду возврата ret (выход из программы можно выполнить также, используя прерывание 20H DOS или функцию 4Ch прерывания 21H DOS, но управление при этом передается не в PSP, а непосредственно в резидентную часть программы COMMAND.COM). Типовая структура ASM-программы включает в себя: 44. Имя программы TITLE prog.ASM Может присутствовать комментарий назначения программы. 45. Инициализацию стековой памяти в сегменте стека:
STACKSEG segment stack DW N dup(?); меньше 32 слов в стеке обычно задавать не следует STACKSEG ends 46. Инициализацию всех переменных в сегменте данных: DATASEG segment ; задаются имена всех констант и переменных, ; их начальные значения и резервируется память под них DATASEG ends 47. Назначение сегментных регистров в сегменте кодов: CODESEG segment Assume CS:codeseg, DS:dataseg, SS:stackseg 48. Организацию главной программной процедуры far: MAIN proc far 49. Запись адреса префикса программного сегмента (PSP) в стек: push DS sub AX, AX push AX 50. Инициализацию содержимого регистра сегмента данных: mov AX, dataseg mov DS, AX ; при указании в команде в качестве операнда символического ; имени сегмента (dataseg) происходит пересылка начального адреса этого сегмента — неверно указывать offset dataseg 51. Текст программы пользователя в сегменте кодов: основной текст программы 52. Восстановление адреса PSP в DS: ret 53. Тексты процедур; если имеются процедуры near, используемые в данной программе, то записываются тексты этих процедур. 54. Закрытие главной процедуры main, сегмента кодов и выход из программы: MAIN endp CODESEG ends end MAIN Итак, обобщенная структура программы: title prog.asm stackseg segment ; задание поля памяти для стека stackseg ends dataseg segment ; задание полей памяти для данных и определение всех констант и переменных dataseg ends codeseg segment assume CS:codeseg, DS:dataseg, SS:stackseg main proc far push DX sub AX, AX push AX mov AX, dataseg mov DS, AX ; основной текст программы ;... ret ; тексты ближних процедур main endp codeseg ends end main В качестве примера рассмотрим программу вычисления квадратного корня.. На рис. 19.2 приводится алгоритм решения задачи.
Рис.19.2. Алгоритм вычисления квадратного корня.
|
|||||
Последнее изменение этой страницы: 2021-11-27; просмотров: 26; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.238.76 (0.005 с.) |