| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
і і і
і EXECREAD і Сегмент доступен только для чтения и выполне- і
і і ния. і
і і і
і READONLY і Сегмент доступен только для чтения. і
і і і
і READWRITE і Сегмент доступен только для чтения и записи. і
АДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Если вы выбираете один из этих атрибутов или используете
USE32, компоновщик Phar Lap предполагает, что сегмент предназна-
чен для выполнения в защищенном режиме. Если вы выбираете USE32,
но не задаете одно из этих значений, Турбо Ассемблер предполагает
использование атрибута READONLY.
Директива ENDS
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Вы можете использовать директиву ENDS для закрытия сегмента,
после чего данные в него больше включаться не будут. Директиву
ENDS следует использовать для закрытия любого сегмента, открытого
по директиве SEGMENT. Сегменты, открытые с помощью упрощенных ди-
ректив определения сегментов, не требуют директивы ENDS.
Директива ENDS имеет следующий синтаксис:
ENDS [имя]
В режиме MASM вы можете использовать следующий синтаксис:
имя ENDS
где "имя" задает имя сегмента, который должен быть закрыт. Если
Турбо Ассемблер 3.0/tasm/#1-2 = 146 =
имя не согласуется с именем текущего открытого сегмента, Турбо
Ассемблер будет выводить сообщение об ошибке. Если имя не задает-
ся, Турбо Ассемблер подразумевает текущий сегмент.
Директива GROUP
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Директива GROUP может использоваться для присваивания сег-
ментов группам. Группы позволяют вам для доступа ко всем сегмен-
там группы задавать один сегмент.
В режиме Ideal директива GROUP имеет следующий синтаксис:
GROUP имя имя_сегмента [, имя_сегмента...]
В режиме MASM вы можете использовать следующий синтаксис:
имя GROUP имя_сегмента [, имя_сегмента...]
где "имя" представляет собой имя группы, а "имя_сегмента" - это
имя сегмента, которое вы хотите присвоить группе.
Директива ASSUME
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Если вы хотите получить доступ к данным сегмента, сегментный
регистр должен загружаться корректным значением сегмента. Часто
это нужно делать вам самим. Например, для загрузки в регистр DS
адреса текущего сегмента данных дальнего типа вы можете использо-
вать команды:
MOV AX,@fardata
MOV DS,AX
Когда программа загружает в сегментный регистр значение сег-
мента, вы можете использовать этот сегментный регистр для доступа
к данным в сегменте. Это быстро утомляет, и вы начинаете забывать
каждый раз при обработке данных в памяти задавать сегментный ре-
гистр (или у вас недостаточно практики в программировании).
Чтобы указать Турбо Ассемблеру, что нужно связать сегментный
регистр с именем сегмента или группы, используйте директиву
ASSUME. Это позволяет Турбо Ассемблеру быть "достаточно проница-
тельным" и использовать при доступе к данным конкретный сегмент.
Фактически, Турбо Ассемблер использует также информацию о
связи между сегментным регистром и именем сегмента также и для
других целей: в режиме MASM значение, которое подразумевается для
регистра CS, используется для определения сегмента или группы, к
которому принадлежит метка. Таким образом, регистр CS должен кор-
ректно задаваться в директиве ASSUME, в противном случае Турбо
Ассемблер при каждом определении метки или процедуры будет сооб-
щать об ошибке.
Турбо Ассемблер 3.0/tasm/#1-2 = 147 =
Директива ASSUME имеет следующий синтаксис:
ASSUME сегм_регистр : выражение [, сегм_регистр : выражение]
или
ASSUME nothing
где "сегм_регистр" - это один из регистров CS, DS, ES или SS. Ес-
ли вы задаете процессор 80386 или 80486, то можете использовать
регистры FS и GS. "Выражение" может быть любым выражением, при
вычислении которого получается имя сегмента или группы. В против-
ном случае может использоваться ключевое слово NOTHING. Это клю-
чевое слово отменяет связь между сегментным регистром и любым
сегментом или именем группы.
Директива ASSUME NOTHING отменяет связь между всеми сегмент-
ными регистрами и сегментом или именем группы.
Вы можете использовать директиву ASSUME при модификации сег-
ментного регистра или в начале процедуры для задания в этой точке
предположений о сегментных регистрах. На практике ASSUME исполь-
зуется обычно в начале модуля и иногда внутри него. Если вы ис-
пользуете оператор MODEL, то Турбо Ассемблер назначает директиву
ASSUME по умолчанию.
Если вы не задаете в директиве ASSUME значение, то ранее за-
данное в ней значение не изменяется.
Например, в следующем фрагменте программы показано, как мож-
но загрузить текущий инициализированный сегмент данных дальнего
типа в регистр DS, обратиться через этот регистр к памяти и восс-
тановить регистр DS в значение сегмента данных:
MOV AX,@fardata
MOV DS,AX
ASSUME DS:@fardata:
MOV BX,<переменная_данных_дальнего_типа>
MOV AX,@data
MOV DS,AX
ASSUME DS:@data
Переопределение сегмента
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Компоновщик организует и упорядочивает все сегменты, опреде-
ленные в модулях программы. В общем случае компоновщих начинает
размещение сегментов в том порядке, в котором они встречаются в
модулях программы. С помощью такого механизма, как комбинирование
сегментов и назначение сегментам классов вы можете изменять этот
порядок.
Существуют также другие способы повлиять на порядок сегмен-
Турбо Ассемблер 3.0/tasm/#1-2 = 148 =
тов в конечной программе. Например, можно изменить тот порядок, в
котором сегменты встречаются в исходном модуле. Существуют также
директивы, влияющие на порядок сегментов. Ниже следует их описа-
ние.
Турбо Ассемблер 3.0/tasm/#1-2 = 149 =
Изменение упорядочивания сегментов в модуле
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Порядок сегментов в каждом модуле определяет начальное раз-
мещение сегментов в программе компоновщиком. В MASM 1.0 и 2.0
сегменты передавались компоновщику в алфавитном порядке. В Турбо
Ассемблере предусмотрены директивы (только в режиме MASM), кото-
рые позволяют воспроизвести это поведение.
Заметим, что данные директивы действуют так же, как парамет-
ры командной строки /A и /S.
Директива .ALPHA
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Директива .ALPHA определяет упорядочивание сегментов по ал-
фавиту. Данная директива сообщает Турбо Ассемблеру, что сегменты
в объектном файле нужно разместить в алфавитном порядке (в соот-
ветствии с именами сегментов). Она имеет синтаксис:
.ALPHA
Директива .SEQ
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Директива .SEQ определяет последовательное упорядочивание
сегментов и сообщает Турбо Ассемблеру, что сегменты нужно поме-
щать в объектный файл в том порядке, в котором они встречаются в
исходном файле. Поскольку это поведение предполагается Турбо Ас-
семблером по умолчанию, директиву .SEQ используют обычно только
для переопределения предыдущей директивы .ALPHA. Данная директива
имеет следующий синтаксис:
.SEQ
Директива DOSSEG: упорядочивание сегментов в порядке DOS
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Обычно компоновщик упорядочивает сегменты в последовательном
порядке - в том порядке, в котором он их обрабатывает при генера-
ции программы. Если вы включаете в любой модуль программу дирек-
тиву DOSSEG, то это указывает компоновщику, что вместо этого
упорядочивания нужно использовать порядок сегментов, принятый в
|
adfun.ru
|
|
|
|