adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
. ; режиме Ideal
MASM ; возвращение в режим MASM
Func2 ENDP ; имя опять требуется указывать
; перед ключевым словом
CODE ENDS ; здесь также требуется имя
Как вы можете заметить, в режиме Ideal ключевые слова дирек-
тив (например, PROC или SEGMENT) указываются перед соответствую-
щими именами идентификаторов, то есть в порядке, обратном тому,
который принят в MASM. Кроме того имеется возможность повторить
имя процедуры или сегмента после директив ENDP или ENDS. Добавле-
ние этого имени идентифицирует сегмент или процедуру, которая за-
канчивается, и делает программу более понятной. Это хороший прак-
тический прием, особенно в программах, содержащих несколько
вложенных процедур и сегментов. Однако указывать имя идентифика-
тора после ENDP или ENDS необязательно.
Турбо Ассемблер 3.0/tasm/#1-2 = 58 =
Отличия режима Ideal и режима MASM
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В данном разделе мы опишем основные различия между режимом
Ideal и режимом MASM. Если вы знакомы с MASM, то можете поэкспе-
риментировать с отдельными средствами, преобразуя небольшие части
имеющихся программ в режим Ideal. Более подробно об отличиях ре-
жимов рассказывается в Главе 5 "Использование выражений и значе-
ний идентификаторов".
Турбо Ассемблер 3.0/tasm/#1-2 = 59 =
Выражения и операнды
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Основное различие между выражениями режима Ideal и режима
MASM состоит в функции, которую выполняют квадратные скобки. В
режиме Ideal квадратные скобки всегда относятся к содержимому
заключаемой в них величины. Квадратные скобки никогда не приводят
в подразумеваемому сложению. Однако многие стандартные конструк-
ции MASM в режиме Idealе не допускаются.
В режиме Ideal квадратные скобки должны использоваться для
получения содержимого элемента. Например:
mov ax,wordptr
приводит к выводу предупреждающего сообщения, если вы пытаетесь
загрузить указатель (wordptr) в регистр (AX). Корректной будет
следующая форма:
mov ax,[wordptr]
Здесь ясно, что вы загружаете содержимое ячейки, адресуемой
с помощью wordptr (в текущем сегменте данных DS) в регистр AX.
Если вы хотите сослаться на смещение идентификатора в сег-
менте, то вы должны явно использовать операцию OFFSET, например:
mov ax,OFFSET wordptr
Турбо Ассемблер 3.0/tasm/#1-2 = 60 =
Операции
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Изменения, внесенные в операции выражений в режиме Ideal,
позволяют повысить мощность и гибкость некоторых операций, оста-
вив без изменения общее поведение выражений. Для того, чтобы со-
действовать некоторым комбинациям операций, изменен порядок стар-
шинства некоторых операций.
Аккуратно задавайте точку (.) в элементах структуры, на ко-
торые вы ссылаетесь. Операция точки для элементов структур в ре-
жиме Ideal является более строгой. Выражение слева от точки долж-
но представлять собой имя элемента структуры. Приведем примеры
загрузки регистров значениями конкретных элементов структур:
; Опишем переменные с помощью структурных типов
S_Stuff SomeStuff <>
O_Stuff OtherStuff <>
mov ax,[S_Stuff.Amount] ; загрузить значение размером в
; слово
mov bl,[O_Stuff.Amount] ; загрузить значение размером в
; байт
Подавление корректировок
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В режиме Ideal Турбо Ассемблер не генерирует сегментных кор-
ректировок для частных сегментов (private), которые выравниваются
на границу страницы или параграфа. Так как компоновщик не требует
подобных корректировок, при ассемблировании программ в режиме
Ideal может быть получен объектный код меньшего объема, компонов-
ку которых компоновщик выполняет более быстро, чем компоновку
объектных файлов, сгенерированных в режиме MASM. Далее показыва-
ется, каким образом такие корректировки производятся в режиме
MASM (но не в режиме IDEAL):
SEGMENT DATA PRIVATE PARA
VAR1 DB 0
VAR2 DW 0
ENDS
SEGMENT CODE
ASSUME ds:DATA
mov ax,VAR2 ; корректировок не требуется
ENDS
Примечание: Это различие не влияет на код, который вы
пишете. Здесь об этом упоминается только для вашего сведе-
ния.
Операнд инструкции BOUND
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В инструкции BOUND требуется указывать операнд типа WORD
Турбо Ассемблер 3.0/tasm/#1-2 = 61 =
(слово), а не DWORD (двойное слово). Это позволяет вам определить
в нижнюю и верхнюю границу в виде двух констант размером в слово,
что устраняет необходимость преобразования операнда в DWORD явным
образом (с помощью DWORD PTR). В режиме MASM вы должны записы-
вать:
BOUNDS DW 1,4 ; нижняя и верхняя границы
BOUND DWORD PTR BOUNDS ; требуется в режиме MASM
Однако в режиме Ideal требуется только записать:
BOUNDS DW 1,4 ; нижняя и верхняя границы
BOUND [BOUNDS] ; допускается в
; режиме Ideal
Сегменты и группы
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Способ, с помощью которого Турбо Ассемблер обрабатывает в
режиме Ideal сегменты и группы, может внести большое различие в
формирование и выполнение программ. Как и большинству людей, вам,
вероятно, не захочется ломать голову над ошибками, возникающими
из-за взаимодействия сегментов и групп.
Большинство трудностей в этом процессе возникает из-за про-
извольного характера предположений в MASM (и следовательно Турбо
Ассемблером в режиме MASM) о ссылках на данные или код в группах.
К счастью, режим Ideal сглаживает некоторые наиболее явные проб-
лемы, которые могут вызвать директивы определения сегментов и
групп в MASM. Об этом мы и расскажем далее.
Доступ к данным в сегменте, принадлежащем группе
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В режиме Ideal любой элемент данных в сегменте, являющемся
частью группы, рассматривается строго как элемент группы, а не
сегмента. В Турбо Ассемблере для распознавания элемента данных,
как элемента сегмента, нужно использовать явное переопределение
сегмента.
В режиме MASM это интерпретируется по-другому. Иногда иден-
тификаторы считается частью сегмента, а не частью группы. В част-
ности, в режиме MASM идентификатор интерпретируется, как часть
сегмента, когда он используется, как указатель на выделенные дан-
ные. Это может вызвать путаницу, так как когда вы непосредственно
обращаетесь к данным без операции OFFSET, MASM некорректно гене-
рирует ссылку на сегмент вместо ссылки на группу.
Пример поможет нам пояснить, как легко можно нажить неприят-
ности из-за специфики адресации в MASM. Рассмотрим следующую не-
полную программу MASM, в которой описываются три сегмента данных:
dseg1 SEGMENT para public 'data'
Турбо Ассемблер 3.0/tasm/#1-2 = 62 =
v1 db 0
dseg1 ENDS
dseg2 SEGMENT para public 'data'
v2 db 0
dseg2 ENDS
dseg3 SEGMENT para public 'data'
v3 db 0
dseg3 ENDS
DGROUP GROUP dseg1,dseg2,dseg3
cseg SEGMENT para public 'code'
ASSUME cs:cseg,ds:DGROUP
start:
mov ax,OFFSET v1
mov bx,OFFSET v2
mov cx,OFFSET v3
cseg ENDS
|
adfun.ru
|
|
|
|