Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Структура исходной программы на языке ассемблера для получения исполняемой программы .ехе

Читайте также:
  1. D. Программы использования
  2. I «Волевые* метапрограммы_________________________ 161
  3. I. Офис и его структура.
  4. II. Модульное структурирование содержания образовательной программы
  5. II. Структура
  6. II. Требования к структуре образовательной программы дошкольного образования и ее объему
  7. II. Требования к структуре образовательной программы дошкольного образования и ее объему

Операционная система MS-DOS предъявляет некоторые обязательные требова­ния к структуре.ASM-программы, предназначенной для последующего создания.ЕХЕ-программы:

- программа может использовать четыре сегмента памяти, начальные адреса ко­торых должны быть загружены в регистры микропроцессора CS, SS, DS и ES, а сами сегменты в явном виде определены в программе в виде операторных скобок: имя_сегмента segment... имя_сегмента ends (версии MS-DOS 4.0 и выше допускают более простое указание сегментов в программе: имя_сегмента.);

- в программе должно быть указание, какие сегментные регистры закрепляются за используемыми сегментами памяти; при исполнении программы сегмент­ные регистры CS, SS, ES в соответствии с этими указаниями загружаются авто­матически;

- сегмент данных DS в.ЕХЕ-программе не может быть загружен автоматически, поскольку
он используется программой-загрузчиком (Link) для формирования начального адреса служебной области памяти — префикса программного сег­мента (PSP), непосредственно предшествующего любой исполняемой програм­ме. Регистр сегмента данных DS должен быть инициирован принудительно -для этого следует в самом начале исполняемой.ЕХЕ-программы записать в стек вектор-адрес возврата к служебной области PSP: содержимое регистра DS и нулевое смещение, а затем в регистр DS загрузить адрес сегмента данных ис­полняемой программы. PSP — это группа служебных слов в оперативной па­мяти, формируемая для каждой загружаемой программы пользователя и за­нимающая обычно 256 байт (100Н байт). При загрузке программы пользователя в ОЗУ автоматически формируется PSP, и ее начальный адрес записывается в регистр DS;

- обеспечение после завершения выполнения программы возврата к префиксу про­граммного сегмента; проще всего это можно сделать, оформив обращение к ис­полняемой программе в виде обращения к процедуре (главной процедуре, обяза­тельно с атрибутом far) и поместив в конце программы команду возврата ret (выход из программы можно выполнить также, используя прерывание 20Н DOS или функцию 4 С прерывания 21Н DOS, но управление при этом передается не в PSP, а непосредственно в резидентную часть программы COMMAND.COM).

Типовая структура.ASM-программы включает в себя:

1. Имя программы: TITLE prog.ASM, может присутствовать комментарий назначе­ния программы.

2. Инициализацию стековой памяти в сегменте стека:

STACKSEG segment stack

DW N dup(?); меньше N=32 слов в стеке обычно

; задавать не следует

STACKSEG ends

3. Инициализацию всех переменных в сегменте данных:

DATASEG segment

;задаются имена всех констант и переменных, их;начальные значения и резервируется память под них DATASEG ends

4. Назначение сегментных регистров в сегменте кодов:

CODESEG segment

Assume CS:codeseg, DS:dataseg, SS:stackseg

5. Организацию главной программной процедуры far:

MAIN proc far

6. Запись адреса префикса программного сегмента (PSP) в стек:

push DS

sub AX, AX

push AX

7. Инициализацию содержимого регистра сегмента данных:

mov AX, dataseg

mov DS, AX

;при указании в команде в качестве операнда символического

:имени сегмента (dataseg) происходит пересылка начального адреса этого сегмента

неверно указывать offset dataseg

8. Текст программы пользователя в сегменте кодов:

основной текст программы

9. Восстановление адреса PSP в DS:

ret


10. Тексты используемых процедур; если имеются процедуры nеаг, используемые в данной программе (например, процедуры str2bin или bin2str), то записываются тексты этих процедур.

11. Закрытие главной процедуры 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

 

В качестве иллюстративного примера для сравнения сложности программ на язы­ке ассемблера с программами на языке высокого уровня ниже приводится без по­яснений программа решения этой задачи на языке Basic:

10 print "Расчет сложных процентов"

20 Input "Введите Q, D. N". Q. D. N

30 D1=1+D/100

40 I=1

50 Q=Q*D1

60 print I, Q

70 1=1+1

80 If I<=N then 50

90 end


Дата добавления: 2015-12-07; просмотров: 75 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.009 сек.)