Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ntjhbz_igjhs.docx
Скачиваний:
22
Добавлен:
17.09.2019
Размер:
82.25 Кб
Скачать

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

26) Логика и организация пpогpамм. Упрощенные директивы управления сегментами. Модели памяти.

Чтобы правильно писать программы необходимо знать наиболее сложный аспект программирования – управление сегментами. Сегменты разделяются на 2 вида: упрощенные и стандартные.

DOSSEG

.MODEL SMALL

.STACK 200h

.DATA

var1 db 0

var2 dw 0

.CODE

start

END

DOSSEG – используется для группировки сегментов в соответсвии с соглашением фирм Borland и Microsoft.

MODEL

"Ближний код" предусматривает ,что переходы в программе осуществляются с помощью загрузки одного регистра IP, а "дальний код" предполагает, что переходы осуществляются при загрузке CS:IP.

Для данных термин FAR означает использование данных по полному адресу с использованием сегмента данных и сегмент смещения. Термин NEAR предполагает выборку данных, используя только 16-тиразрядное смещение.

FAR ES:[BX]

NEAR [BX]

Существуют следующие модели памяти:

TINY – крошечная. И код программы, и данные размещаются внутри одного и того же сегмента

(64 К). Код и данные имеют ближний тип.

SMALL малая. Данные в одном сегменте (64 К), а код – в другом. Код и данные имеют ближний тип.

COMPACT – компактная. Код помещается в один сегмент, данные могут превышать размер сегмента. Код ближнего типа, данные – дальнего.

MEDIA средняя. Код может превышать размер сегмента. Код- дальний, данные – ближний.

LARGE – большая. И код, и данные превышают размер сегмента, оба дальнего типа.

HUGE – огромная. И код, и данные не имеют ограничений, имеют дальний тип.

.STACK директивы, определяющие начало соответствующего

DATA сегмента.

.CODE

END (без .) [метка начала программы] необязательный элемент.

27,28) Стандартные и упрощенные директивы определения сегментов. Модели памяти.

СТАНДАРТНЫЕ ДИРЕКТИВЫ УПРАВЛЕНИЯ СЕГМЕНТАМИ

DGROUP GROUP DATA1 STACK1

ASSUME CS: TEXT1, DS:TEXT2, SS: STACK1

STACK1 SEGMENT PARA STACK "STACK"

db 200h

STACK2 ENDS

_DATA1 SEGMENT WORD PUBLIC "DATA"

var1 db 0

var2db 0

_DATA1 ENDS

_TEXT1 SEGMENT WORD PUBLIC "CODE

start

… сама программа

_TEXT1 ENDS

END start

Количество сегментов одного типа в программе со стандартными директивами управления сегментами (СДУС) моет быть несколько и определяется размерами программы и данных.

Директива <имя> SEGMENT определяет начало сегмента.

<имя> ENDS – конец сегмента

Директива SEGMENT имеет следующий синтаксис:

<имя> SEGMENT [<тип выравнивания>][<тип связи>][<тип класса>].

1. Тип выравнивания показывает компоновщику, с какой границы начинается сегмент.

PAGE – все границы начинаются с адресов, кратных 256 хххх00 - обязательно последний байт нулевой

PARA (параграф) – кратно 16 ххххх0.

WORD – кратно 2 xxxxxEh.

BYTE – кратно 1 xxxxx.

2. Тип связи – сообщает компоновщику, как образуются друг относительно друга сегменты одного класса.

PUBLIC сегменты, имеющие общее имя и общее имя класса, располагаются в памяти одним непрерывным блоком и для всех сегментов существуют один базовый адрес.

STACK – аналогично PUBLIC, но для стековых сегментов.

COMMON – сегменты, имеющие общее имя и общее имя класса, располагаются в памяти, прерывая друг друга. Общий размер равен размеру наибольшего из сегментов.

MEMORY – сегменты с таким именем располагаются в области старших адресов памяти может быть только один сегмент MEMORY.

AT[адрес] – сегмент располагается по указанному адресу, тип выравнивания по умолчанию PARA.

Пример: DOSSEG SEGMENT AT [0B800h]

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]