Выражения и операнды
Основное различие между выражениями режима Ideal и режима MASM состоит в функции, которую выполняют квадратные скобки. В режиме Ideal квадратные скобки всегда относятся к содержимому заключаемой в них величины. Квадратные скобки никогда не приводят в подразумеваемому сложению. Однако многие стандартные конструкции MASM в режиме Idealе не допускаются.
В режиме Ideal квадратные скобки должны использоваться для получения содержимого элемента. Например:
mov ax,wordptr
приводит к выводу предупреждающего сообщения, если вы пытаетесь загрузить указатель (wordptr) в регистр (AX). Корректной будет следующая форма:
mov ax,[wordptr]
Здесь ясно, что вы загружаете содержимое ячейки, адресуемой с помощью wordptr (в текущем сегменте данных DS) в регистр AX.
Если вы хотите сослаться на смещение идентификатора в сегменте, то вы должны явно использовать операцию OFFSET, например:
mov ax,OFFSET wordptr
Операции
Изменения, внесенные в операции выражений в режиме 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 (слово), а не DWORD (двойное слово). Это позволяет вам определить в нижнюю и верхнюю границу в виде двух констант размером в слово, что устраняет необходимость преобразования операнда в DWORD явным образом (с помощью DWORD PTR). В режиме MASM вы должны записывать:
BOUNDS DW 1,4 ; нижняя и верхняя границы BOUND DWORD PTR BOUNDS ; требуется в режиме MASM
Однако в режиме Ideal требуется только записать:
BOUNDS DW 1,4 ; нижняя и верхняя границы BOUND [BOUNDS] ; допускается в режиме Ideal
1 2 3 4 5 6 7
8 8 8
| |