Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 97; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.007 с.) |