Группы.
Объединение программных модулей и сегментов
Псевдокоманда определения сегмента
Сегмент – именованноя облость памяти доступ к которой осуществ при измен знач сегментн регистра
В реальн реж разм сегм = 0..216-1
Имя segment атрибуты_сегмента … имя ends
Атрибуты сегмента
тип_выравнив use16/use32 тип_объед имя_класса
Все атриб кроме use использ приобъедин сегм. Для сегм стека должно быть указ имя класса ‘stack', тип обедин ‘stack'
Перед первым использ коман ассембл-у необх сообщ как будут загр сегментн регистры. Осущ при пом ком Assume SegRg: базовое значен, ….;имя сегмента
В MS Dos при загр прогр на выполн CS и SS pfuhe; операц система, а сегментн регистр данных должен настроит прораммист, за исключ программ *.com типа. В win32 настройку всез регистр производ ОС
Public список имен (опред общие имена)
EXTRN-имя : тип, (внешн имен)
Public объявл имена опред в данном модуле и доступн в друг модул
EXTRN объявл имена опред в других модул и использ в данном модуле
Процедуры (имена проц, метки) –near, far
Переменные: byte, word, dword
Константы (equ): ABSOLUTE
На языке ассемб можно объедин сегменты наход в разных модулях.
Способ объед сегмента задает с помощ опред сегментов: тип объедин и тип выравнив.
Объедин сегм имеющ одинак имена в разных модулях
Условие на объед: сумма сегм ≤ 64 кб
Public объединен сегм = сумме объединяемых
Stack –указ стека настр на разм объед сегмента
Разм объед сегм=max разм из объед сегм (для данных)
COMMON-выч выр на этапе трансл зад параграф-адрес=16-адрес выравн на гран сегмента без 4 младш нулей.
Типы выравнивания показ. Как при объедин сегм. Кажд послед сегм будет пристыков к предыдущему.(byte-2,word-4, dword-16,page-256)
Обычно атрибуты указ в одном из указ модулей. Если атриб сегм не указ, то они счит не объедин.
Можно объед раз данные водну группу. Доступ к объедин в гуппу сегм осущ при один знач сегм адр.
Имя_группы GROUP имя_сегм1,…
Упрощенная сегментация
В случ использ упрощ сегмент снач опред упрош модель памяти
.model модель_памяти
модель_пам | кол-во сегмент | |
кода | данных | |
tiny (мин) | общий | |
small (мал) | ||
medium (сред) | >1 | |
compact(компак) | >1 | |
large | >1 | >1 |
huge | >1 | >1 |
flat(плоск) | tiny (32 смещ ) |
Атрибуты сегментов по умолч в модел памят tiny и small
Сегм | имя | вырав | объед | класс | группа | |
tiny | small | |||||
.code | _text | word | public | ‘code’ | dgroup | --- |
.data | _data | word | public | ‘data’ | dgroup | dgroup |
.stack | stack | stack | para | ‘stack’ | dgroup | dgroup |
В исходном текте
.code – нач сегм кода
.data – нач сегм данных
.stack – размер стека в байтах(по умолч 1024 б)
.model small
.stack 128
.data
x db 5
y db ?
.code
start: mov ax,@data
mov ds,ax…
mov ah,4ch
int 21h
end start