Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод указан АРХИТЕКТУРА ЭВМ Майстренко .doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
3.38 Mб
Скачать

Контрольные вопросы

1. Перечислить все этапы формирования программы.

  1. Пояснить, как используется транслятор МАSМ.

  2. Пояснить, как осуществляется компоновка объектного модуля.

  3. Пояснить понятие «листинг».

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

исполняемой программы .ехе

Студент должен

знать:

- требова­ния к структуре .АSМ-программы;

- обобщенную структуру программы

уметь:

- составлять .АSМ-программы.

Требова­ния к структуре .АSМ-программы. Типовая структура .АSМ-

программы. Обобщенная структура программы.

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

- программа может использовать четыре сегмента памяти, начальные адреса

ко­торых должны быть загружены в регистры микропроцессора СS, SS, DS и ЕS, а

сами сегменты в явном виде определены в программе в виде операторных скобок:

имя сегмента segment …имя сегмента ends ... (версии МS-DOS 4.0 и выше

допускают более простое указание сегментов в программе: имя_сегмента.);

- в программе должно быть указание, какие сегментные регистры закрепляются за

используемыми сегментами памяти; при исполнении программы сегмент­ные

регистры СS,SS, ЕS в соответствии с этими указаниями загружаются

автоматически;

- сегмент данных DS в .ЕХЕ-программе не может быть загружен автоматически,

поскольку он используется программой-загрузчиком (Link) для формирования

начального адреса служебной области памяти — префикса программного сег­мента

(РSР), непосредственно предшествующего любой исполняемой програм­ме.

Регистр сегмента данных DS должен быть инициирован принудительно — для

этого следует в самом начале исполняемой .ЕХЕ-программы записать в стек

вектор-адрес возврата к служебной области PSP: содержимое регистра DS и

нулевое смешение, а затем в регистр DS загрузить адрес сегмента данных

исполняемой программы. PSP — это группа служебных слов в оперативной

памяти, формируемая для каждой загружаемой программы пользователя и

занимающая обычно 256 байт. При загрузке программы пользователя в ОЗУ

автоматически формируется PSP, и ее начальный адрес записывается в регистр DS;

- обеспечение после завершения выполнения программы возврата к префиксу

про­граммного сегмента; проще всего это можно сделать, оформив обращение к

ис­полняемой программе в виде обращения к процедуре (главной процедуре, обяза­тельно с атрибутом far) и поместив в конце программы команду возврата ret.

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

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

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

STACKSEG segment stack

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

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

STACKSEG ends

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

DATASEG segment

: задаются имена всех констант и переменных, их

: начальные значения и резервируется память под них

DATAGE ends

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

CODESEG segment

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

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

MAIN proc far

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

push DS

sub AX, AX

push AX

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

mov AX, dataseg

mov DS, AX

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

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

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

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

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

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

ret

10. Тексты используемых процедур; если имеются процедуры near, используемые в данной программе (например, процедуры 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