Turbo Assembler 3.0. Руководство пользователя

Упрощенные директивы определения сегментов и Borland C++


Директива .MODEL указывает Турбо Ассемблеру, что сегменты, создаваемые с помощью упрощенных директив определения сегментов, должны быть совместимы с выбранной моделью памяти (TINY - крохот- ной, SMALL - малой, COMPACT - компактной, MEDIUM - средней, LARGEбольшой или HUGE - громадной) и управляет назначаемым по умолчанию типом (FAR или NEAR) процедур, создаваемых по директиве PROC. Модели памяти, определенные с помощью директивы .MODEL, совместимы с моделями Borland C++ с соответствующими именами.

Наконец, упрощенные директивы определения сегментов .DATA, .CODE, .DATA?, .FARDATA, .FARDATA? и .CONST генерируют сегменты, совместимые с Borland C++.

Например, рассмотрим следующий модуль Турбо Ассемблера с именем DOTOTAL.ASM:

.MODEL SMALL ; выбрать малую модель памяти ; (ближний код и данные) .DATA ; инициализация сегмента данных, ; совместимого с Borland C++ EXTRN _Repetitions:WORD ; внешний идентификатор PUBLIC _StartingValue ; доступен для других модулей _StartValue DW 0 .DATA? ; инициализированный сегмент ; данных, совместимый с Borland C++ RunningTotal DW ? .CODE ; сегмент кода, совместимый с ; Borland C++ PUBLIC _DoTotal _DoTotal PROC ; функция (в малой модели памяти ; вызывается с помощью вызова ; ближнего типа) mov cx,[_Repetitions] ; счетчик выполнения mov ax,[_StartValue] mov [RunningTotal],ax ; задать начальное ; значение TotalLoop: inc [RunningTotal] ; RunningTotal++ loop TotalLoop mov ax,[RunningTotal] ; возвратить конечное ; значение (результат) ret _DoTotal ENDP END

Написанная на Ассемблере процедура _DoTotal при использова- нии малой модели памяти может вызываться из Borland C++ с помощью оператора:

DoTotal();

Заметим, что в процедуре DoTotal предполагается, что где-то в другой части программы определена внешняя переменная Repetitions. Аналогично, переменная StartingValue объявлена, как общедоступная, поэтому она доступна в других частях программы. Следующий модуль Borland C++ (который называется SHOWTOT.CPP) об- ращается к данным в DOTOTAL.ASM и обеспечивает для модуля DOTOTAL.ASM внешние данные:


В следующей таблице показаны директивы выводы сообщения об ошибке, которые используют выражение с идентификаторами:

Директивы генерации сообщения об ошибке Таблица 15.5 -------------------------T--------------------------------------¬ ¦Директива IFxxx ¦ Ассемблирует "тело_условия_true" если¦ +------------------------+--------------------------------------+ ¦ERRIFDEF выражение_ид ¦ при вычислении выражения получается¦ ¦ ¦ значение true. ¦ ¦ ¦ ¦ ¦.ERRDEF выражение_ид ¦ при вычислении выражения получается¦ ¦ ¦ значение true (только для режима¦ ¦ ¦ MASM). ¦ ¦ ¦ ¦ ¦ERRIFNDEF выражение_ид ¦ при вычислении выражения получается¦ ¦ ¦ значение false. ¦ ¦ ¦ ¦ ¦.ERRNDEF выражение_ид ¦ при вычислении выражения получается¦ ¦ ¦ значение false (только в режиме¦ ¦ ¦ MASM). ¦ L------------------------+---------------------------------------

Например, следующие условия генерации сообщения об ошибке эквивалентны и приводят к генерации ошибки в случае определения foo и bar:

ERRIFDEF foo AND bar ERRIFNDEF NOT ( foo AND bar ) ERRIFBDEF NOT foo OR NOT bar


Содержание раздела