ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 4

                                    Выбирайте                                  
         =================================================================

                              Авторский коллектив "*.*"
                             под руководством Орлова С.Б.



                            ПРОГРАММА-СПРАВОЧНИК по системе
                        программирования ТУРБО АССЕМБЛЕР 2.0

                              СПРАВОЧНОЕ РУКОВОДСТВО

                                 #4/5 (Главы 1-3)




                                 г.Москва, 1990 г.

         =================================================================

                                   Оглавление                                  
         TASM2 #4-5/Док                = 1 =

         Введение........................................................9
         Требования к аппаратным и программным средствам.................9
         О данном руководстве...........................................10
         Национальные соглашения........................................10
         Глава 1. Предопределенные идентификаторы.......................12
           $............................................................13
           @code........................................................13
           @CodeSize....................................................14
           @Cрu.........................................................14
           curseg.......................................................15
           @data........................................................16
           @DataSize....................................................17
           ??date.......................................................17
           @fardata.....................................................18
           @fardata?....................................................18
           @FileName....................................................19
           ??filename...................................................19
           @Model.......................................................20
           @Startuр.....................................................20
           ??Time.......................................................21
           ??Version....................................................21
           @WordSize....................................................22
         Глава 2. Операторы.............................................23
           Арифметическая точность......................................23
           Таблица 2.1:   Приоритеты операторов для режима MASM.........25
           Таблица 2.2: Приоритеты операторов для режима Ideal..........25
           ()...........................................................26
           *............................................................26
           + (бинарный).................................................27
           + (унарный)..................................................27
           - (бинарный).................................................28
           - (унарный)..................................................29
           . ...........................................................29
           /............................................................30
           :............................................................31
           ?............................................................31
           [ ] оператор.................................................32
           AND..........................................................34
           BYTE.........................................................34
           CODEPTR......................................................35
           DATAPTR......................................................36
           DUP..........................................................36
           DWORD........................................................37
           EQ...........................................................38
           FAR..........................................................38
           FWORD........................................................40

         TASM2 #4-5/Док                = 2 =

           GE...........................................................40
           GT...........................................................41
           HIGH.........................................................42
           LARGE........................................................43
           LE...........................................................44
           LENGTH.......................................................45
           LOW..........................................................45
           LT...........................................................46
           MASK.........................................................48
           MOD..........................................................48
           NE...........................................................50
           NEAR.........................................................50
           NOT..........................................................52
           OFFSET.......................................................52
           OR...........................................................54
           PROC.........................................................54
           PTR..........................................................56
           PWORD........................................................58
           QWORD........................................................58
           SEG..........................................................59
           SHL..........................................................59
           SHORT........................................................60
           SHR..........................................................60
           SIZE.........................................................61
           SMALL........................................................61
           SYMTYPE......................................................63
           TBYTE........................................................63
           THIS.........................................................64
           .TYPE........................................................65
           TYPE.........................................................66
           UNCNOWN......................................................67
           WIDTH........................................................69
           WORD.........................................................70
           XOR..........................................................70
           Специальные макро операторы..................................72
           &............................................................72
           <>...........................................................74
           !............................................................75
           %............................................................75
           ;;...........................................................76
         Глава 3. Директивы.............................................77
           Samрle Directive  (Образец директивы)........................79
           .186.........................................................79
           .286.........................................................80
           .286C........................................................80
           .286P........................................................81

         TASM2 #4-5/Док                = 3 =

           .287.........................................................81
           .386.........................................................83
           .386C........................................................83
           .386P........................................................84
           .387.........................................................84
           8086.........................................................85
           .8087........................................................85
           :............................................................86
           =............................................................87
           ALIGN........................................................89
           .ALPHA.......................................................90
           ARG..........................................................91
           ASSUME.......................................................94
           %BIN.........................................................95
           CATSTR.......................................................96
           .CODE........................................................96
           CODESEG......................................................98
           COMM.........................................................98
           COMMENT.....................................................101
           %CONDS......................................................101
           .CONST......................................................102
           CONST.......................................................103
           .CREF.......................................................103
           %CREF.......................................................104
           %CREFALL....................................................104
           %CREFREF....................................................105
           %CREFUREF...................................................106
           %CTLS.......................................................106
           .DATA.......................................................108
           .DATA?......................................................109
           DATASEG.....................................................111
           DB..........................................................111
           DD..........................................................113
           %DEPTH......................................................115
           DF..........................................................115
           DISPLAY.....................................................116
           DOSSEG......................................................118
           DP..........................................................119
           DQ..........................................................120
           DT..........................................................121
           DW..........................................................122
           ELSE........................................................123
           ELSEIF......................................................124
           EMUL........................................................124
           END.........................................................126
           ENDIF.......................................................126

         TASM2 #4-5/Док                = 4 =

           ENDM........................................................127
           ENDP........................................................128
           ENDS........................................................129
           EQU.........................................................130
           .ERR........................................................131
           ERR.........................................................131
           .ERR1.......................................................132
           .ERR2.......................................................132
           .ERRB.......................................................133
           .ERRDEF.....................................................134
           .ERRDIF.....................................................134
           .ERRDIFI....................................................135
           .ERRE.......................................................136
           .ERRIDN.....................................................136
           .ERRIDNI....................................................138
           ERRIF.......................................................139
           ERRIF1......................................................139
           ERRIF2......................................................139
           ERRIFB......................................................140
           ERRIFDEF....................................................140
           ERRIFDIF....................................................140
           ERRIFDIFI...................................................140
           ERRIFE......................................................140
           ERRIFIDN....................................................141
           ERRIFIDNI...................................................141
           ERRIFNB.....................................................141
           ERRIFNDEF...................................................141
           .ERRNB......................................................143
           .ERRNDEF....................................................143
           .ERRNZ......................................................144
           EVEN........................................................144
           EVENDATA....................................................145
           EXITM.......................................................146
           EXTRN.......................................................146
           .FARDATA....................................................149
           .FARDATA?...................................................150
           FARDATA.....................................................151
           GLOBAL......................................................151
           GROUP.......................................................153
           IDEAL.......................................................154
           IF..........................................................155
           IF1.........................................................155
           IF2.........................................................156
           IFB.........................................................157
           IFDEF.......................................................158
           IFDIF,IFDIFI................................................158

         TASM2 #4-5/Док                = 5 =

           IFE.........................................................159
           IFIDN,IFIDNI................................................160
           IFNB........................................................161
           IFNDEF......................................................161
           %INCL.......................................................163
           INCLUDE.....................................................163
           INCLUDELIB..................................................164
           INSTR.......................................................165
           IRP.........................................................165
           IRPC........................................................166
           JUMPS.......................................................167
           LABEL.......................................................167
           .LALL.......................................................168
           .LFCOND.....................................................170
           %LINUM......................................................170
           %LIST.......................................................171
           .LIST.......................................................171
           LOCAL.......................................................172
           LOCALS......................................................175
           MACRO.......................................................177
           %MACS.......................................................178
           MASM........................................................179
           MASM51......................................................179
           .MODEL......................................................181
           ТАБЛИЦА 3.1 Модель Tiny.....................................184
           ТАБЛИЦА 3.2 Модель Small....................................184
           ТАБЛИЦА 3.3 Модель Medium...................................184
           ТАБЛИЦА 3.4 Модель Compact..................................185
           ТАБЛИЦА 3.5 Модель Huge и Large.............................185
           ТАБЛИЦА 3.6 Модель TPASCAL..................................185
           MODEL.......................................................186
           MULTERRS....................................................186
           NAME........................................................187
           %NEWPAGE....................................................188
           %NOCONDS....................................................188
           %NOCREF.....................................................189
           %NOCTLS.....................................................189
           NOEMUL......................................................191
           %NOINCL.....................................................191
           NOJUMPS.....................................................193
           %NOLIST.....................................................193
           NOLOCALS....................................................194
           %NOMACS.....................................................194
           NOMASM51....................................................195
           NOMULTERRS..................................................195
           %NOSYMS.....................................................197

         TASM2 #4-5/Док                = 6 =

           %NOTRUNC....................................................197
           %NOWARN.....................................................198
           ORG.........................................................198
           %OUT........................................................200
           P186........................................................200
           P286........................................................201
           P286N.......................................................201
           P286P.......................................................201
           P287........................................................202
           P386........................................................202
           P386N.......................................................202
           P386P.......................................................203
           P387........................................................203
           P8086.......................................................203
           P8087.......................................................204
           PAGE........................................................204
           %PAGESIZE...................................................205
           %PCNT.......................................................206
           PNO87.......................................................206
           %POPLCTL....................................................207
           PROC........................................................207
           PUBLIC......................................................212
           PUBLICDLL...................................................213
           PURGE.......................................................214
           %PUSHLCTL...................................................215
           QUIRKS......................................................216
           .RADIX......................................................216
           RADIX.......................................................217
           RECORD......................................................217
           REPT........................................................219
           .SALL.......................................................220
           SEGMENT.....................................................220
           .SEQ........................................................224
           .SFCOND.....................................................225
           SIZESTR.....................................................225
           .STACK......................................................226
           STACK.......................................................226
           .STARTUP....................................................227
           STARTUPCODE.................................................227
           STRUC.......................................................228
           SUBSTR......................................................230
           SUBTTL......................................................230
           %SUBTTL.....................................................232
           %SYMS.......................................................232
           %TABSIZE....................................................233
           %TEXT.......................................................233

         TASM2 #4-5/Док                = 7 =

           .TFCOND.....................................................234
           TITLE.......................................................234
           %TITLE......................................................235
           %TRUNC......................................................235
           UDATASEG....................................................236
           UFARDATA....................................................236
           UNION.......................................................237
           USES........................................................239
           WARN........................................................240
           .XALL.......................................................241
           .XCREF......................................................241
           .XLIST......................................................241

         TASM2 #4-5/Док                = 8 =

         =================================================================

                              Авторский коллектив "*.*"
                             под руководством Орлова С.Б.



                            ПРОГРАММА-СПРАВОЧНИК по системе
                        программирования ТУРБО АССЕМБЛЕР 2.0

                              СПРАВОЧНОЕ РУКОВОДСТВО

                                 #4/5 (Главы 1-3)




                                 г.Москва, 1990 г.

         =================================================================

         TASM2 #4-5/Док                = 9 =

                                                                               
                   Введение
         -----------------------------------------------------------------

              Эта книга является второй из двух книг, сопровождающих пакет
         Турбо ассемблера. Сейчас, когда вы наверняка прочитали вниматель-
         но первое руководство (User's Guide),  вы захотите ознакомиться с
         данным руководством для получения дополнительной информации.

              Reference Guide является как  раз  тем,  что  дает  наиболее
         конкретное представление о Турбо ассемблере. Если вы все еще нуж-
         даетесь в изучении языка ассемблера, вернитесь к User's Guide для
         более глубокого изучения некоторых вопросов.
                                                                               
                   Требования к аппаратным и программным средствам
         -----------------------------------------------------------------

              Турбо ассемблер может использоваться на компьютерах  семейс-
         тва IBM PC,  включающего XT,  AT и PS/2,  а также на компьютерах,
         полностью совместимых с ними.  Турбо ассемблер требует MS DOS 2.0
         и более поздние версии, а также не менее 256К оперативной памяти.
              Турбо ассемблер может генерировать код для процессоров 8086,
         80186,  80286  и 80386.  Он также может генерировать инструкции с
         плавающей точкой для арифметических сопроцессоров 8087,  80287  и
         80387.



         TASM2 #4-5/Док               = 10 =

                                       О данном руководстве                    
         -----------------------------------------------------------------

              В данном руководстве мы обсудим следующие вопросы.

         Глава 1 :       "Предопределенные идентификаторы" знакомит вас  с
                          равенствами в Турбо ассемблере.

         Глава 2 :       "Операторы" описывает различные  операторы  Турбо
                         ассемблера.

         Глава 3 :       "Директивы" предоставляет  в  алфавитном  порядке
                         подробную  информацию о всех директивах Турбо ас-
                         семблера.

         Приложение А:   "Синтаксис Турбо ассемблера" иллюстрирует выраже-
                         ния Турбо ассемблера в модифицированной форме Бе-
                         куса-Наура (для двух режимов - MASM и Ideal).

         Приложение В:   "Совместимость с другим средствами" содержит раз-
                         личия между MASM и режимом MASM Турбо ассемблера.

         Приложение С:   "Основные   моменты  Турбо  ассемблера",  которые
                         отличают его от MASM.

         Приложение D:   "Утилиты Турбо   ассемблера"  описывает три  ути-
                         литы, которые поставляются в данном пакете: MAKE,
                         TLINK,TLIB.  Информация об утилитах GREP, OBJXREF
                         и TCREF содержится в файлах на ваших дистрибутив-
                         ных дисках.

         Приложение Е:   "Сообщение об  ошибках в Турбо ассемблере" описы-
                         вает все сообщения об ошибках,  которые могут вы-
                         даваться при использовании Турбо ассемблера:  ин-
                         формационные  сообщения,  сообщения  о  фатальных
                         ошибках, предупреждающие сообщения и сообщения об
                         ошибках.
                                     Национальные соглашения                   
         -----------------------------------------------------------------


              Когда мы  говорим  о  IBM  PC  или  совместимых  с ними,  мы
         подразумеваем,  что в данных компьютерах используются чипы  8088,
         8086,  80186,80286  и 80386 (все эти чипы имеют общее обозначение
         80х86).  При ссылках на PC-DOS,  DOS или MS DOS  мы  имеем  ввиду

         TASM2 #4-5/Док               = 11 =

         операционную систему версии 2.0 или более позднюю.

              Данное описание выполнено при помощи профессионального текс-
         тового редактора.  Для выделения в тексте используются  различные
         шрифты, которые имеют следующее применение:

         Italics   В тексте  данным шрифтом изображаются метки, переменные
                   и массивы.

         Boldface  Данный шрифт  используется  в  тексте   для   директив,
                   инструкций, идентификаторов  и операторов,  а также для
                   параметров командной строки.

         Caрitals  В тексте заглавные буквы используются  для  изображения
                   инструкций, директив, регистров и операторов.

         Monosрace Данный  тип используется для отображения кода и текста,
                   которые появляются на вашем экране, а также любого тес-
                   та,  который вы должны ввести для ассемблирования, ком-
                   поновки и запуска программы.

         Keycaрs   Данный тип шрифта используется в тексте для обозначения
                   клавиши на вашей клавиатуре.  Он часто используется при
                   описании клавиши, которую вы должны нажать для выполне-
                   ния определенной функции. Например:"Нажмите Enter после
                   ввода имени вашей программы".





         TASM2 #4-5/Док               = 12 =

                            Глава 1. Предопределенные идентификаторы.          
         -----------------------------------------------------------------

              Турбо ассемблер  содержит ряд предопределенных идентификато-
         ров, которые вы можете использовать в ваших программах. Эти иден-
         тификаторы могут  иметь различные значения в разных местах вашего
         исходного файла. Они являются сходными с символами равенства, ко-
         торыми  вы устанавливаете,  используя директивы EQU.  Когда Турбо
         ассемблер встречает в вашем исходном файле один из этих идентифи-
         каторов, он заменяется его текущим значением.

              Некоторые из  этих  идентификаторов  могут  иметь  строковые
         (текстовые) значения,  некоторые - числовые,  остальные -  другие
         имена.  Строковые значения могут быть использованы в любом месте,
         где вы захотите использовать строку символов.  Например, для ини-
         циализации последовательности байтов данных используется директи-
         ва DB:

                            NOW DB ??time

              Числовые предопределенные значения могут быть использованы в
         любом месте, где вы хотите использовать числа:

                            IF ??version GT 100h

              Значения, содержащие другие имена, становятся синонимами для
         представленных   ими  значений,  позволяя  вам  использовать  имя
         предопределенного идентификаторов  в  любом месте,  где вы должны
         использовать простое имя:

                            ASSUME cs:@code

              Все предопределенные идентификаторы могут быть  использованы
         в режимах MASM и Ideal.

              Если вы при ассемблировании используете в  командной  строке
         параметр  /ML,  то  вы должны использовать имена предопределенных
         идентификаторов именно так,  как они описаны на следующих страни-
         цах.

              Следующее правило  применяется  для  имен   предопределенных
         идентификаторов, начинающихся  со  знака @:  Первая буква каждого
         слова,  которое составляет часть символьного имени, является бук-
         вой верхнего регистра, а следующие - нижнего. Например:

                            @CurSeg

         TASM2 #4-5/Док               = 13 =

                            @FileName
                            @WordSize

              Исключение составляют переопределения идентификаторов, кото-
         рые указывают на сегменты.  Имя сегмента,  начинающееся с символа
         @, должно состоять из букв нижнего регистра. Например:

                         @curseg
                         @fardata

              Символы, которые начинаются  с  двух  знаков  вопроса  (??),
         должны содержать только буквы нижнего регистра.

                         ??data
                         ??version

                                                                               
         $
         -----------------------------------------------------------------

         Назначение:     Операнд счетчика положения.

         Замечания:      Этот специальный символ представляет счетчик  по-
                         ложения. Счетчик положение - это текущее смещение
                         в текущем сегменте  в  процессе  ассемблирования.
                         (Этот  операнд имеет тот же атрибут,  что и метка
                         near "ближняя").

                         Счетчик положения представляет собой адрес, кото-
                         рый увеличивается так, что соответствует текущему
                         адресу так,  как если бы каждый оператор в исход-
                         ном файле уже оттранслировался.

         Пример:         helрMessage  DB  'This is helр for the рrogram'
                         helрlength   =  $ - helрMessage

                         После ассемблирования этих двух строк идентифика-
                         тор helрlength будет равен длине данной строки.

                                                                               
         @code
         -----------------------------------------------------------------

         Назначение:     Значение имени для сегмента .CODE

         Замечания:      При использовании   упрощенных  директив  сегмен-

         TASM2 #4-5/Док               = 14 =

                         тирования (.MODEL и т.п.) данное значение  позво-
                         ляет вам  использовать  в выражениях имя сегмента
                         кода, подобно ASSUME.

         Пример:         .DATA
                         mov ax,@code
                         mov ds,ax
                         ASSUME ds:@code
                                                                               
         @CodeSize
         -----------------------------------------------------------------

         Назначение:     Числовое значение, указывающее на тип памяти кода

         Замечания:      @CodeSize устанавливается в 0 для малой уплотнен-
                         ной памяти с ближними указателями кода,  и  уста-
                         навливается  в 1 для всех других типов с дальними
                         ссылками. Вы можете использовать данный идентифи-
                         катор для указания типа ссылок кода в зависимости
                         от типа памяти.

         Пример:            IF @CodeSize EQ 0
                         PROCPTR DW PROC1 ; ближняя ссылка на процедуру
                            ELSE
                         PROCPTR DD PROC1 ; дальняя ссылка на процедуру
                            ENDIF
                                          @Cрu                                 
         -----------------------------------------------------------------

         Назначение:     Возвращает числовое  значение,содержащее информа-
                         цию о типе процессора

         Замечания:      В возвращаемом значении  @Cрu кодируется тип про-
                         цессора

                         -------------------------------------------------
                         Бит            Описание
                         -------------------------------------------------
                         0   8086  инструкции возможны
                         1   80186 инструкции возможны
                         2   80286 инструкции возможны
                         3   80386 инструкции возможны
                         7   Привилегированные инструкции возможны
                             (80286 и 80386)
                         8   8087  инструкции  арифметического  процессора

         TASM2 #4-5/Док               = 15 =

                         10  80287 инструкции  арифметического  процессора
                         11  80387 инструкции  арифметического  процессора

                         Биты, не указанные в таблице, зарезервированы для
                         будущего  использования.  При  использовании @Cрu
                         эти биты маскируются и таким образом  ваша  прог-
                         рамма  останется  совместимой с будущими версиями
                         Турбо ассемблера.

                         Семейство процессоров,  начиная с 8086,  является
                         совместимым снизу  вверх.  Если  вы  задаете  тип
                         процессора директивой,  подобной.286, данные типы
                         процессоров (8086, 80186) также становятся допус-
                         тимыми автоматически.

         Примечание:     Данное значение  содержит  информацию  только   о
                         процессоре, который был вами определен в процессе
                         ассемблирования директивой .286 и  ей  подобными.
                         Во  время  выполнения вашей программы тип процес-
                         сора не индицируется.

         Пример:         IPUSH=@Cрu AND 2 ; позволяет выполнить рush
                                          ;для 186 и выше
                         IF IPUSH
                         PUSH 1234
                         ELSE
                           mov ax,1234
                           рush ax
                         ENDIF
                                                                               
         curseg
         -----------------------------------------------------------------

         Назначение:     Значение имени для текущего сегмента

         Замечания:      @curseg повсюду изменяет компоновку для отображе-
                         ния текущего имени сегмента.  Вы это  обычно  ис-
                         пользуете  после  применения  директив упрощенной
                         сегментации (.MODEL и т.п.)  Используйте  @curseg
                         для генерации параметров ASSUME,  блокировки сег-
                         мента или других параметров,  которые  необходимы
                         для использования текущего имени сегмента

         Пример:         .CODE
                         ASSUME CS:@curseg


         TASM2 #4-5/Док               = 16 =

                                                                               
         @data
         -----------------------------------------------------------------

         Назначение:     Значение для группового имени ближних данных

         Замечания:      При использовании директив упрощенной сегментации
                         данное значение позволяет вам использовать  груп-
                         повое имя, включающее все ближние сегменты данных
                         (.DATA,  .CONST,  .STACK) в выражениях, таких как
                         ASSUME и блокировках сегмента.

         Пример:         .CODE
                         mov ax,@data
                         mov ds,ax
                         ASSUME DS:@data



         TASM2 #4-5/Док               = 17 =

                                                                               
         @DataSize
         -----------------------------------------------------------------

         Назначение:     Числовое значение, указывающее на тип памяти дан-
                         ных

         Замечания:      @DataSize устанавливается в 0 для крошечной,  ма-
                         лой  и средней памяти с ближними указателями дан-
                         ных, в 1 для большой и уплотненной памяти с даль-
                         ними  указателями  данных,  в 2 для очень большой
                         памяти.

                         Вы можете использовать данный  идентификатор  для
                         указания типа ссылок данных в зависимости от типа
                         памяти

         Пример:         IF @DataSize EQ 1
                           lea si,Dataрtr
                           mov al,[BYTE PTR si]
                         ELSE
                         les si,Dataрtr
                         mov al,[BYTE PTR ES:SI]
                         ENDIF
                                                                               
         ??date
         -----------------------------------------------------------------

         Назначение:     Строковое значение для текущей даты

         Замечания:      ??data является текстовым значением, представляю-
                         щим текущую  дату.  Точный формат строки для даты
                         для разных стран определяется с помощью DOS

         См.также        ??Time

         Пример:         ASMTIME DB ??data ; строка из 8 байт




         TASM2 #4-5/Док               = 18 =

                                                                               
         @fardata
         -----------------------------------------------------------------

         Назначение:     Значение для инициализированного  имени  сегмента
                         данных с дальним указателем

         Замечания:      При использовании директив упрощенной сегментации
                         (.MODEL и т.п.) данное значение позволяет вам ис-
                         пользовать  имя инициализированного сегмента дан-
                         ных (.FARDATA)  в  таких  выражениях как ASSUME и
                         блокировках сегмента

         Пример:         mov ax,@fardata
                         mov ds,ax
                         ASSUME DS:@fardata

                                                                               
         @fardata?
         -----------------------------------------------------------------

         Назначение:     Значение  для  инициализированного имени сегмента
                         данных с дальним указанием

         Замечания:      При использовании директив упрощенной сегментации
                         (.MODEL и т.п.) данное значение позволяет вам ис-
                         пользовать имя  инициализированного сегмента дан-
                         ных (.FARDATA?) в таких выражениях как  ASSUME  и
                         блокировках сегмента

         Пример:         mov ax,@fardata?
                         mov ds,ax
                         ASSUME DS:@fardata?




         TASM2 #4-5/Док               = 19 =

                                                                               
         @FileName
         -----------------------------------------------------------------

         Назначение:     Значение имени для текущего ассемблируемого файла

         См.также:       ??FileName

                                                                               
         ??filename
         -----------------------------------------------------------------

         Назначение:     Строковое значение имени для текущего ассемблиру-
                         емого файла

         Замечания:      ??filename  определяет  восьмисимвольную  строку,
                         представляющую имя   файла  для  ассемблирования.
                         Если имя файла занимает меньше  восьми  символов,
                         то оно будет дополнено пробелами

         Пример:         SRCNAME DB ??filename ; всегда 8 байт



         TASM2 #4-5/Док               = 20 =

                                                                               
         @Model
         -----------------------------------------------------------------

         Назначение:     Цифровое значение, которое указывает на текущую
                         модель.

         Замечания:      @Model возвращает целое значение, указывающее на
                         следующие модели.
                          1 - TINY    (крошечная)
                          2 - SMALL   (маленькая)
                          3 - COMPACT (компактная)
                          4 - MEDIUM  (средняя)
                          5 - LARGE   (большая)
                          6 - HUGE    (огромная)

         См. также:      .MODEL, MODEL
                                                                               
         @Startuр
         -----------------------------------------------------------------

         Назначение:     Метка, указывающая на начало исполняемого кода.

         Замечания:      @Startuр - это ближняя метка, определенная дирек-
                         тивами .STARTUP или STARTUPCODE, которые указыва-
                         ют начало исполняемого кода, созданного этими ди-
                         рективами.

         См. также:      .STARTUP, STARTUPCODE




         TASM2 #4-5/Док               = 21 =

                                                                               
         ??Time
         -----------------------------------------------------------------

         Назначение:     Строковое  значение  для  текущего времени ??Time
                         является текстовым значением,  представляющим те-
                         кущее  время.  Точный  формат  строки для времени
                         определяется для разных стран с помощью DOS

         См.также:       ??Data

         Пример:         ASMTIME DB ??Time ; строка из 8 символов

                                       ??Version                               
         -----------------------------------------------------------------

         Назначение:     Числовое значение для данной версии Турбо ассемб-
                         лера

         Замечания:      Старший байт является главным номером  версии,  а
                         младший - второстепенным номером версии. Например
                         V2.1 будет представлено как 201h.

                         ??Version позволяет вам создавать исходные файлы,
                         которые могут использовать частности той или иной
                         версии Турбо ассемблера.

                         Данная величина также  позволяет  вашим  исходным
                         файлам  узнавать,  были  они ассемблированы с по-
                         мощью MASM или Турбо  ассемблером.  ??Version  не
                         определяется посредством MASM.

         Пример:         IFDEF ??Version
                         ; текст программы на Турбо ассемблере
                         ENDIF




         TASM2 #4-5/Док               = 22 =

                                                                               
         @WordSize
         -----------------------------------------------------------------

         Назначение:     Числовое значение,  сообщающее 16- или 32-битовые
                         сегменты.

         Замечания:      @WordSize возвращает 2  в  случае,  если  текущий
                         сегмент  является  16-битовым  сегментом  или 4 в
                         случае, если он является 32-битовым.

         Пример:         IF @WordSize EQ 4
                         mov esр,0100h
                         ELSE
                         mov sр,0100h
                         ENDIF





         TASM2 #4-5/Док               = 23 =

                                                                               
                  Глава 2. Операторы
         -----------------------------------------------------------------

              Операторы позволяют  вам  формировать комплексные выражения,
         которые могут быть использованы в качестве операндов в инструкци-
         ях или директивах.  Операторы производят действия над такими опе-
         рандами как, например, имена программных идентификатор и значения
         констант.  Турбо  ассемблер  при ассемблировании вашего исходного
         файла изменяет выражение, подставляя вместо выражения вычисленное
         значение. Таким образом, вы можете использовать выражение для вы-
         числения значения,  зависящего от других значений,  которые могут
         изменяться при модификации вами исходного файла.

              В данной главе детально описываются операторы Турбо  ассемб-
         лера.

                                     Арифметическая точность                   
         ----------------------------------------------------------------

              Турбо ассемблер использует 16- или 32- разрядную арифметику,
         зависящую от того, использовали ли вы директивы .386 и . 386P для
         процессора 80386.  При ассемблировании кода процессора 80386  или
         режима Ideal,  некоторые выражения будут иметь результат отличный
         от того, если  бы  они  были  выполнены  в  16-битовом  режиме.

         Например:

                         DW (1000h*1000h)/1000h

              В 32-битовом  режиме генерирует слово 1000h,  а в 16-битовом
         режиме - 0.  В 16-битовом режиме при выполнении умножения возник-
         нет  переполнение  и  при  этом  сохранятся только младшие 16 бит
         результата.

              Турбо ассемблер при вычислении выражений использует  следую-
         щие правила:

              - Оператор  с  более  высоким приоритетом выполняется раньше
                оператора с более низким.
              - Операторы с равными приоритетами выполняются слева направо
                их записи в выражении.
              - Если выражение содержит другое выражение, взятое в скобки,
                то выражение в скобках вычисляется в первую  очередь, т.к.
                выражение в скобках имеет наивысший приоритет.


         TASM2 #4-5/Док               = 24 =

              Pежимы Ideal и MASM имеют различные приоритеты для некоторых
         операторов.  Следующие две таблицы показывают уровни  приоритетов
         операторов в этих режимах.  В первой строке каждой таблицы приве-
         дены операторы,  имеющие наивысший приоритет,  а операторы в пос-
         ледней  строке  имеют  наинизший  приоритет.  В  одной строке все
         операторы имеют одинаковый приоритет.




         TASM2 #4-5/Док               = 25 =

                                                                               
         Таблица 2.1:   Приоритеты операторов для режима MASM
         -----------------------------------------------------------------

                         <>, (), [], LENGTH, MASK, SIZE, WIDTH
                         .( выбор элемента структуры )
                         HIGH, LOW
                         +, - (унарные)
                         :(блокировка сегмента)
                         OFFSET, PTR, SEQ, THIS, TYPE
                         *, /, MOD, SHL, SHR
                         +, - (бинарные)
                         EQ, GE, GI, LE, LT, NE
                         NOT
                         AND
                         OR, XOR
                         LARGE, SHORT, SMALL, .TYPE
         -----------------------------------------------------------------

                                                                               
         Таблица 2.2: Приоритеты операторов для режима Ideal.
         -----------------------------------------------------------------

                         (), [], LENGTH, MASK, OFFSET, SEQ, SIZE, WIDTH
                         HIGH, LOW
                         +, - (унарные)
                         *, /, MOD, SHL, SHR
                         +, - (бинарные)
                         EQ, GE, GT, LE, LT, NE
                         NOT
                         AND
                         OR, XOR
                         :(блокировка сегмента)
                         .(выбор элемента структуры)
                         HIGH (перед ссылкой),LARGE, LOW (перед ссылкой),
                           PTR, SHORT, SMALL, SYMTYPE
         -----------------------------------------------------------------

              Операторы, входящие  в  выражение,  перечислены в алфавитном
              порядке.




         TASM2 #4-5/Док               = 26 =

                                                                               
         ()
         -----------------------------------------------------------------
         Назначение:     Отмечаем выражение для первоочередного вычисления

         Режим:          MASM, Ideal

         Синтаксис:      (выражение)

         Замечания:      Скобки применяются для изменения нормальных прио-
                         ритетов операторов при вычислениях. Любое выраже-
                         ние,  заключенное вами в скобки,  будет вычислено
                         до выполнения операторов, стоящих перед или после
                         скобок.

         См.также:       +, -, *, /, MOD, SHL, SHR

         Пример:         (3 + 4) * 5 ; равно 35
                         3 + 4 * 5   ; равно 23
                                                                               
         *
         -----------------------------------------------------------------

         Назначение:     Умножает два целочисленных выражения

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1*выражение 2

         Замечания:      выражение 1 и выражение 2 должны быть  преобразо-
                         ваны в целочисленные константы

         См.также:       +, -, /, MOD, SHL, SHR

         Пример:         SCREENSIZE=25*80; количество   символов  на
                                         ;экране



         TASM2 #4-5/Док               = 27 =

                                                                               
         + (бинарный)
         -----------------------------------------------------------------

         Назначение:     Складывает два выражения

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 + выражение 2

         Замечания:      Одно из "выражение 1" или  "выражение  2"  должно
                         быть преобразовано в целочисленную константу. Од-
                         но выражение может быть преобразовано в адрес.

         См.также:       -, +, /, MOD, SHL, SHR

         Пример:         X DW 4DVP(?);
                         XPTR DW X+4 ; третье слово в буфере
                                                                               
         + (унарный)
         -----------------------------------------------------------------

         Назначение:     Показывает положительное число.

         Режим:          MASM, Ideal

         Синтаксис:      + выражение

         Замечания:      Данный оператор не имеет действия.  Он может быть
                         использован для  указания,  что  константа  имеет
                         именно положительное значение.

         См.также:       -, *, /, MOD, SHL, SHR

         Пример:         FOO DB +4; избыточный +



         TASM2 #4-5/Док               = 28 =

                                      - (бинарный)                             
         -----------------------------------------------------------------

         Назначение:     Вычитает два выражения.

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 - выражение 2

         Замечания:      При вычитании вы можете пользоваться тремя комби-
                         нациями операндов:

                         - выражение 1 и  выражение  2  могут  быть  цело-
                           численными константами

                         - выражение 1 и выражение 2 могут быть как полны-
                           ми (длинными)  адресами,  так  и  оба  адресами
                           внутри одного и того же сегмента. При вычитании
                           двух адресов результатом является константа.  В
                           режиме Ideal проверка выражения 1 и выражения 2
                           на соответствие проводится более строго,  чем в
                           режиме MASM

                         - выражение 1 может быть адресом, а выражение 2 -
                           константой. Результатом является адрес

         См.также:       +, *, /, MOD, SHL, SHR

         Пример:         DATA     SEGMEHT
                                  DW ?
                         XYZ      EQU 10
                         VAL1     DW XYZ-1    ; константа 9
                         VAL2     DW ?
                         VISIZE   DW VAL2-VAL1; константа 2
                         VIBEFORE DW VAL1-2   ; указатель на DW
                                              ;    перед VAL1
                         DATA     ENDS



         TASM2 #4-5/Док               = 29 =

                                                                               
         - (унарный)
         -----------------------------------------------------------------

         Назначение:     Изменяет знак выражения.

         Режим:          MASM, Ideal

         Синтаксис:      - выражение

         Замечания:      Выражение должно быть преобразовано  в константу.
                         Если выражение является положительным, то резуль-
                         татом будет отрицательное число той  же величины.
                         Если выражение является отрицательным, то резуль-
                         татом будет положительное число.

         См.также:       +, *, /, MOD, SHL, SHR

         Пример:         LOWTEMP DB -10
                                           .                                   
         -----------------------------------------------------------------

         Назначение:     Выбирает элемент структуры.

         Режим:          MASM, Ideal

         Синтаксис:      memрtr.fieldname

         Замечания:      В режиме MASM,  memрtr может быть любой  операнд,
                         ссылающийся на участок в памяти,  а fieldname мо-
                         жет быть именем любого элемента  любой  структуры
                         или даже постоянным выражением. Если memрtr явля-
                         ется  именем  структуры   (подобно   XINST),   то
                         fieldname  должен  быть элементом этой структуры.
                         Действие данного оператора во  многом  похоже  на
                         оператор  +.:  он  складывает  смещение fieldname
                         внутри структуры с адресом памяти для  memрtr, но
                         также предоставляет размер имени поля.

                         В режиме   Ideal   его  действия  являются  более
                         строгими.  memрtr должен быть преобразован в ука-
                         затель на структуру, а fieldname должен быть эле-
                         ментом данной структуры.  Это позволяет вам иметь
                         различные структуры с одним и тем же именем поля,
                         но различные смещение и размер.  Если  вы  хотите
                         использовать базовый и/или индексный регистры для

         TASM2 #4-5/Док               = 30 =

                         memрtr,  вы  должны  предварительно  указать  имя
                         структуры, к которой вы хотите получить доступ.

         См.также:       STRUC

         Пример:         X STRUC
                         MEMBER1 DB ?
                         MEMBER2 DW ?
                         X ENDS
                         XINST X <>

                         ;MASM режим
                           mov [вх].Member2,1
                         ;Ideal режим
                           mov [(X PTRвх).Member2],1
                                                                               
         /
         -----------------------------------------------------------------

         Назначение:     Деление двух целочисленных операндов.

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 / выражение 2

                         выражение 1 и выражение 2 должны быть  преобразо-
                         ваны в целочисленные константы. Результатом явля-
                         ется деление выражения 1 на выражение 2, получен-
                         ный  остаток  отбрасывается.  Вы  можете получить
                         остаток, используя оператор MOD с теми же операн-
                         дами, заменив им оператор /.

         См.также:       +, -, *, MOD, SHL, SHR

         Пример:         X = 55 / 10    ; =5(целочисленное деление)



         TASM2 #4-5/Док               = 31 =

                                           :                                   
         -----------------------------------------------------------------

         Назначение:     Генерирует сегмент или групповое блокирование.

         Режим:          MASM, Ideal

         Синтаксис:      segorgrouр:exрression

         Замечания:       Двоеточие  (:)  вызывает  генерацию  адреса  для
                         exрression соответственно  определенному сегменту
                         или  группе.  Это вы используете для того,  чтобы
                         заставить ассемблер применить иное средство  дос-
                         тупа  к  exрression,  нежели заранее заложенный в
                         него метод.

                         Вы можете определить seqorgrouр несколькими путя-
                         ми:
                         -как сегментный регистр :  CS, DS, ES или SS (или
                          FS, если для 80386 процессора были применены ди-
                          рективы P386 или P386N);
                         -как имя    сегмента,   определенное   директивой
                          SEGMENT;
                         -как групповое   имя,   определенное   директивой
                          GROUP;
                         -как выражение в операторе SEG

                         exрression может  быть константой или выражением,
                         являющимся ссылкой на память.

         Пример:             mov cl,es:[Si+4]
                         PTR DD DGROUP:MEMVAR
                                           ?                                   
         -----------------------------------------------------------------

         Назначение:     Инициализирует неопределенные данные.

         Режим:          MASM, Ideal

         Синтаксис:      Dx ?

         Замечания:      Dx ссылается на данные,  размещенные  директивами
                         DB,  DD и т.д.  Используйте ?, когда хотите заре-
                         зервировать место для данных,  но не хотите точно
                         определить их значение.

         TASM2 #4-5/Док               = 32 =


                         Вы должны использовать ?, когда массив данных был
                         инициализирован  вашей программой перед тем,  как
                         его использовать.  Использование ? предпочтитель-
                         нее,  чем использование 0, т.к. метод инициализа-
                         ции в вашем исходном тексте становится более оче-
                         видным и явным.

                         При использовании ? только как значение в выраже-
                         нии DVP или вне выражения DVP,  объектный код  не
                         генерируется.   Если   вы  используете  ?  внутри
                         выражения DVP,  которое содержит инициализирован-
                         ные значения, он будет воспринят как 0.

         См.также:       DUP

         Пример:         MyByt DB 20 DUP (?); располагает  неопре-
                                            ; деленный массив
                                      [ ] оператор                             
         -----------------------------------------------------------------

         Назначение:     Определяет сложение  или  операнд  индексирования
                         памяти.

         Режим:          MASM, Ideal

         Синтаксис:      [выражение 1] [выражение 2]

         Замечания:      Этот  оператор ведет себя совершенно по-разному в
                         режимах MASM и Ideal

                         В режиме MASM он  может  выступать  как  оператор
                         сложения,  просто прибавляя выражение 1 к выраже-
                         нию 2.  Те же ограничения накладываются на комби-
                         нацию операндов,  например, выражение 1 и выраже-
                         ние 2 одновременно не могут быть адресами. [] мо-
                         жет  индицировать регистр для косвенного указания
                         на операнды в памяти,  используя регистры BX, BP,
                         SI и DI.  Регистры при косвенной адресации должны
                         быть  заключены  в  [].  Смещение  при  косвенной
                         адресации может находиться как внутри,  так и вне
                         скобок ([]).

                         В режиме Ideal,  [] означает "ссылку на  память".
                         Любой  операнд,  адресующий  память,  должен быть

         TASM2 #4-5/Док               = 33 =

                         заключен  в  скобки.  Это  обеспечивает  ясность,
                         предсказуемость и недвусмысленность при определе-
                         нии является ли операнд явным  значением  или  же
                         ссылкой на память

         См.также:       +

         Пример:            ;режим MASM
                          mov al,BYTE PTR ES:[BX]
                          mov al,CS:10h
                         ;режим Ideal
                          mov al,[BYTE PTR ES:BX]
                          mov al,[CS:10h]



         TASM2 #4-5/Док               = 34 =

                                                                               
         AND
         -----------------------------------------------------------------

         Назначение:     Побитно выполняет логическое "И"

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 AND выражение 2

         Замечания:      Выполняет побитное логическое "И" выражения  1  и
                         выражения 2. Результатом в любом разряде будет 1,
                         если оба выражения в данном разряде имеют 1 и 0 в
                         любом другом случае

         См.также:       NOT, OR, XOR

         Пример:         mov al,11110000 AND 10100000;   результат
                                                     ;    10100000

                                          BYTE                                 
         -----------------------------------------------------------------

         Назначение:     Задает размер для выражения в один байт

         Режим:          Ideal

         Синтаксис:      BYTE выражение

         Замечания:      Выражение должно быть адресом.  Результатом явля-
                         ется выражение, которое указывает на тот же адрес
                         в памяти,  но всегда имеет размер BYTE, не считая
                         действительного размера выражения.

                         Обычно вы используете данный оператор для опреде-
                         ления размера выражения опережающей  ссылки,  или
                         для точного определения размера регистра входяще-
                         го  в  выражение,  для  которого  размер  не  был
                         определен

                         В режиме  MASM  для  выполнения  этой  функции вы
                         должны использовать директиву PTR с  предшествую-
                         щим ему BYTE

         См.также:       PTR


         TASM2 #4-5/Док               = 35 =

         Пример:         mov [BYTE BX],1; непосредственно передаваемый
                                        ; байт
                         mov [BYTE X],1 ; опережающая ссылка
                         X   DB 0
                                                                               
         CODEPTR
         -----------------------------------------------------------------

         Назначение:     Возвращает установленный по умолчанию размер
                         адреса процедуры.

         Режим:          Ideal

         Синтаксис:      CODEPTR выражение

         Замечания:      CODEPTR  возвращает  установленный  по  умолчанию
                         размер адреса процедуры, в зависимости от текущей
                         модели памяти (WORD для  моделей  с  кодом  NEAR;
                         DWORD  для  моделей  с кодом FAR).  CODEPTR может
                         использоваться где бы ни использовался DATAPTR.

         См.также:       DATAPTR



         TASM2 #4-5/Док               = 36 =

                                                                               
         DATAPTR
         -----------------------------------------------------------------

         Назначение:     Назначает выражению размер, зависящий от модели.

         Режим:          Ideal

         Синтаксис:      DATAPTR выражение

         Замечания:      Объявляет  выражение ближним или дальним указате-
                         лем в зависимости от выбранной модели памяти.

         См.также:       CODEPTR, PTR, UNKNOWN

         Пример:         mov [DATAPTR bx],1

                                          DUP                                  
         -----------------------------------------------------------------

         Назначение:     Повторяет размещение данных

         Режим:          MASM, Ideal

         Синтаксис:      count DUP(выражение 1,[выражение]...)

         Замечания:      count определяет количество  раз,  которое  будут
                         повторены данные, определенные выражением. Опера-
                         тор DUP ставится после одной из директив размеще-
                         ния данных (DB, DW и т.п.)

                         Каждое выражение является инициализированным зна-
                         чением определенного типа данных и следует за DUP

                         Вы можете снова использовать оператор  DVP внутри
                         выражения и иметь до 17 уровней вложенности

                         Вы всегда  должны  значение  выражения помещать в
                         скобки ()

         Пример:         WRDBUF DW 40 DVP(1)      ;инициализируется
                                                  ;40 слов со значе-
                                                  ;нием 1
                         SQUARE DB 4 DVP(4DVP(0)) ;массив 4х4 со
                                                  ;значением 0


         TASM2 #4-5/Док               = 37 =

                                         DWORD                                 
         -----------------------------------------------------------------

         Назначение:     Задает размер для выражения в двойное слово

         Режим:          Ideal

         Синтаксис:      DWORD выражение

         Замечания:      Выражение должно быть адресом.  Результатом явля-
                         ется выражение, которое указывает на тот же адрес
                         в памяти и всегда имеет размер DWORD, невзирая на
                         действительный формат выражения.

                         Обычно вы используете данный оператор для опреде-
                         ления размера выражения опережающей ссылки.

                         В режиме MASM  для  выполнения  этой  функции  вы
                         должны  использовать директиву PTR с предшествую-
                         щим ему DWORD.

         См.также:       PTR

         Пример:         CALL DWORD FPTR
                         X    DD MYFUNC



         TASM2 #4-5/Док               = 38 =

                                           EQ                                  
         -----------------------------------------------------------------

         Назначение:     Возвращает значение "истина", если выражения рав-
                         ны

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 EQ выражение 2

         Замечания:      Выражение 1 и выражение 2 оба должны быть  приве-
                         дены  в константы.  EQ возвращает значение "исти-
                         на"(-1),  если оба выражения равны между собой  и
                         значение "ложь"(0), если они имеют различные зна-
                         чения.

                         EQ считает, что выражение 1 и выражение 2 являют-
                         ся  32-разрядными  числами  со знаком,  у которых
                         старший бит  является  знаковым.  Таким  образом,
                         выражение  -1 EQ 0FFFFFFFFh имеет значение "исти-
                         на".

         См.также:       NE, LT, LE, GT, GE

         Пример:         ALIE = 4 EQ 3      ; =0 (ложь)
                         ATRUTH = 6 EQ 6    ; =1(истина)
                                          FAR                                  
         -----------------------------------------------------------------

         Назначение:     Задает выражение для дальней ссылки

         Режим:          Ideal

         Синтаксис:      FAR выражение

         Замечания:      Выражение должно быть адресом.  Результатом явля-
                         ется выражение,  указывающее на адрес в памяти  и
                         является дальней ссылкой, содержащей базовый сег-
                         мент и  смещение  независимо  от  реального  типа
                         выражения.

                         Вы обычно используете этот  оператор  для  вызова
                         процедуры или перехода по опережающей метке,  ко-
                         торая объявляется как FAR в исходном файле.


         TASM2 #4-5/Док               = 39 =

                         В режиме MASM  для  выполнения  этой  функции  вы
                         должны  использовать директиву PTR с предшествую-
                         щим ему FAR.

         См.также:       NEAR

         Пример:             CALL FAR ABC  ; дальняя ссылка
                         ABC PROC FAR



         TASM2 #4-5/Док               = 40 =

                                         FWORD                                 
         -----------------------------------------------------------------

         Назначение:     Задает выражение,  представляющее собой 32- бито-
                         вую дальнюю ссылку

         Режим:          Ideal

         Синтаксис:      FWORD выражение

         Замечания:      Выражение должно быть адресом.  Результатом явля-
                         ется выражение,  которое указывает на адрес в па-
                         мяти,  но  всегда  имеет размер FWORD,  не считая
                         действительного размера выражения.

                         Обычно вы используете данный оператор для опреде-
                         ления  размера  выражения  опережающей ссылки или
                         для точного определения размера регистра,  входя-
                         щего  в  выражение,  для  которого  размер не был
                         определен.

                         В режиме MASM  для  выполнения  этой  функции  вы
                         должны  использовать директиву PTR c предшествую-
                         щим ему FWORD

         См.также:       PTR, PWORD

         Пример:         .386
                         CALL fword [вх]  ;дальний косвенный
                                          ; 48-битный вызов
                         jmр  fword funcр ;опережающая ссылка
                         funcр DF myрroc  ;косвенный указатель на рroc

                                           GE                                  
         -----------------------------------------------------------------

         Назначение:     Возвращает значение "истина" в случае,  если одно
                         выражение больше другого

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 GE выражение 2

         Замечания:      Выражение 1 и выражение 2 должны быть приведены в
                         константы.  GE возвращает значение  "истина"(-1),

         TASM2 #4-5/Док               = 41 =

                         если  выражение 1 больше или равно выражению 2, и
                         возвращает значение "ложь"(0), если оно меньше.

                         GE считает, что выражение 1 и выражение 2 являют-
                         ся  33-разрядными  числами  со знаком,  у которых
                         старший бит  является  знаковым.  Таким  образом,
                         выражение 1 GE -1 имеет значение "истина", 1 GE 0
                         FFFFFFFFh - значение "ложь".

         См.также:       EQ, GT, LE, LT, NE

         Пример:         TROOTH = 5 GE 5
                         AFIB   = 5 GE 6
                                           GT                                  
         -----------------------------------------------------------------

         Назначение:     Возвращает значение "истина" в случае,  если одно
                         выражение больше другого

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 GT выражение 2

         Замечания:      Выражение 1 и выражение 2 должны быть приведены в
                         константы.  GT  возвращает значение "истина"(-1),
                         если выражение 1 больше выражения 2, и возвращает
                         значение "ложь"(0), если оно меньше или равно.

                         GT считает, что выражение 1 и выражение 2 являют-
                         ся 33-разрядными числами  со  знаком,  у  которых
                         старший  бит  является  знаковым.  Таким образом,
                         выражение 1 GT -1 имеет значение "истина", а 1 GT
                         0FFFFFFFFh - значение "ложь".

         См.также:       EQ, GE, LE, LT, NE

         Пример:         AFACT = 10 GT 9
                         NOTSO = 10 GT 11



         TASM2 #4-5/Док               = 42 =

                                          HIGH                                 
         -----------------------------------------------------------------

         Назначение:     Возвращает старшую часть выражения

         Режим:          MASM, Ideal

         Синтаксис:      HIGH выражение

                         Только в режиме Ideal:
                         тип HIGH выражение

         Замечания:      HIGH возвращает старшие  8 бит выражения, которые
                         должны быть преобразованы в константу.

                         В режиме Ideal HIGH в сочетании  с  LOW  являются
                         полным  механизмом  для выделения отдельных полей
                         данных.  Тип определяет размер поля для выделения
                         из выражения и может быть любым из обычно опреде-
                         ленных размеров (BYTE,  WORD,  DWORD и  т.д.).  В
                         выражении  вы  можете  применять  более  чем один
                         оператор HIGH или LOW;  например, байтовый адрес-
                         ный  указатель  на  третий  байт  двойного  слова
                         DBLVAL:

                         BYTE LOW WORD HIGH DBLVAL

         См.также:       LOW

         Пример:         ; режимы MASM и Ideal
                          MAGIC EQU 1234h
                          mov cl,HIGH MAGIC
                         ; только режим Ideal
                          BIG DD 12345678h
                          mov al,WORD HIGH BIG     ;загружает 1234h



         TASM2 #4-5/Док               = 43 =

                                         LARGE                                 
         -----------------------------------------------------------------

         Назначение:     Устанавливает формат смещения выражения 32 бита

         Режим:          MASM, Ideal (только режимы 386)

         Синтаксис:      LARGE выражение

         Замечания:       Выражение  является любым выражением или операн-
                         дом,  которое преобразуется  с  помощью  LARGE  в
                         32-битовое  смещение.  Вы  обычно используете это
                         для  устранения  двусмысленности,   связанной   с
                         форматом.  Например:  если  вы  при наличии 80386
                         процессора используете директиву P386, то код мо-
                         жет быть интерпретирован как дальний вызов с сег-
                         ментом и 16-битовым смещением,  так и ближним вы-
                         зовом, использующим 32-битовое смещение:

                          jmр [DWORD PTR ABC]

                         Данную двусмысленность  вы можете устранить,  ис-
                         пользуя директиву LARGE :

                          jmр LARGE [DWORD PTR ABC] ;32-битовое
                                                    ;смещение при
                                                    ;ближнем вызове

                         В данном примере LARGE стоит вне скобок, и в этом
                         случае  из  памяти считается двойное слово.  Если
                         LARGE  размещается  внутри  скобок,  то  это  ин-
                         терпретируется как формат адреса, по которому чи-
                         тается операнд, но не как формат самого операнда,
                         читаемого из памяти. Например, данный код означа-
                         ет, что XYZ является 4-байтовым указателем

                         jmр LARGE [LARGE DWORD PTR XYZ]

                         Трактует это как 32-битовое смещение и  при  этом
                         JMP  косвенно через адрес читает непосредственный
                         адрес для JMP, являющийся 32-битовым смещением.

                         Комбинацией операторов LARGE и SMALL, включая или
                         вынося  их  за  скобки,  вы можете получать любые
                         комбинации косвенных JMP и CALL от 16- или 32-би-
                         тового сегмента до 16 или 32-битового сегмента.

         TASM2 #4-5/Док               = 44 =


                         Также вы можете использовать LARGE для того, что-
                         бы избежать ошибочных присвоений  при  доступе  к
                         переменным с опережающей ссылкой :

                         mov ax,[LARGE FOOBAR]  ;FOOBAR находится в
                                                ;сегменте USE32

         См.также:       SMALL
                                           LE                                  
         -----------------------------------------------------------------

         Назначение:     Возвращает значение "истина" в случае,  если одно
                         выражение меньше или равно другому

         Режим:          MASM, Ideal

         Синтаксис:      Выражение 1 LE выражение 2

         Замечания:      Выражение  1 и выражение 2 оба должны быть приве-
                         дены в константы.  LE возвращает значение  "исти-
                         на"(-1),   если  выражение  1  меньше  или  равно
                         выражению 2,  и возвращает значение "ложь",  если
                         оно больше.

                         LE считает, что выражение 1 и выражение 2 являют-
                         ся 33-разрядными числами  со  знаком,  у  которых
                         старший  бит  является  знаковым.  Таким образом,
                         выражение 1 LE -1 имеет значение "ложь", а 1 LE 0
                         FFFFFFFFh - значение "истина".

         См.также:       EQ, GE, GT, LT, NE

         Пример:         YUP = 5 LT 6          ;истина = -1




         TASM2 #4-5/Док               = 45 =

                                         LENGTH                                
         -----------------------------------------------------------------

         Назначение:     Возвращает  количество размещенных элементов дан-
                         ных

         Режим:          MASM, Ideal

         Синтаксис:      LENGTH имя

         Замечания:      Имя является идентификатором, указывающим на раз-
                         мещенные данные  посредством  одной  из  директив
                         размещения данных (DB, DD и т.д.). LENGTH возвра-
                         щает количество повторяемых  в  имени  элементов.
                         Если  имя  не  было объявлено с помощью оператора
                         DUP, то всегда возвращается 1.

                         LENGTH возвращает  1  также  в случае,  когда имя
                         ссылается  на  данные,  которые   вы   разместили
                         посредством выделения их запятыми.

         См.также:       SIZE, TYPE

         Пример:         MSG     DB "Hello"
                         array   DW 10 DUP(0)
                         numbrs  DD 1,2,3,4
                         var     DQ ?
                         lmsg    =LEHGTH MSG   ;=1 не использовалась DUP
                         larray  =LENGTH ARRAY ;=10
                         lnumbrs =LENGTH NUMBRS;=1,не использовалась DUP
                         lvar    =LENGTH VAR   ;=1,не использовалась DUP

                                          LOW                                  
         -----------------------------------------------------------------

         Назначение:     Возвращает младшую часть выражения

         Режим:          MASM, Ideal

         Синтаксис:      LOW выражение

                         Только в режиме Ideal:
                         тип LOW выражение

         Замечания:      LOW возвращает младшие 8 бит  выражения,  которые

         TASM2 #4-5/Док               = 46 =

                         должны быть преобразованы в константу.

                         В режиме  Ideal  LOW  в сочетании с HIGH являются
                         полным механизмом для выделения  отдельных  полей
                         данных.  Тип определяет размер поля для выделения
                         из выражения и может быть любым из обычно опреде-
                         ленных  размеров (BYTE,  WORD,  DWORD и т.д.).  В
                         выражении вы  можете  применять  более  чем  один
                         оператор LOW или HIGH; например:

                         BYTE LOW WORD HIGH DBLVAL

                         Это является   байтовым  адресным  указателем  на
                         третий байт двойного слова DBLVAL.

         См.также:       HIGH

         Пример:         ;режимы MASM и Ideal
                         MAGIC EQU 1234h
                         mov bl,LOW MAGIC
                         ;только режим Ideal
                         BIG DD 12345678h
                         mov al,WORD LOW BIG;загружает 5678h

                                           LT                                  
         -----------------------------------------------------------------

         Назначение:     Возвращает значение "истина", если одно выражение
                         меньше второго

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 LT выражение 2

         Замечания:      Выражение 1 и выражение 2 оба должны быть  приве-
                         дены  в константы.  LT возвращает значение "исти-
                         на"(-1),  если выражение 1 меньше,  чем выражение
                         2,  и  возвращает  значение  "ложь"(0),  если оно
                         больше или равно.

                         LT считает, что выражение 1 и выражение 2 являют-

         TASM2 #4-5/Док               = 47 =

                         ся  33-разрядными  числами  со знаком,  у которых
                         старший разряд является знаковым.  Таким образом,
                         1 LT -1 имеет значение "ложь",  а 1 LT 0FFFFFFFFh
                         - значение "истина".

         См.также:       EQ, GE, GT, LE, NE

         Пример:         JA = 3 LT 4             ; истина =-1




         TASM2 #4-5/Док               = 48 =

                                          MASK                                 
         -----------------------------------------------------------------

         Назначение:     Возвращает битовую маску поля записи

         Режим:          MASM, Ideal

         Синтаксис:      MASK recordfieldname (поле имени записи)
                         MASK record (запись)

         Замечания:      recorfieldname  является именем любого поля имени
                         в заранее заданной записи. MASK возвращает значе-
                         ние  битов соответствующих позиций в записи,  ко-
                         торые занимает recordfieldname.

                         record является именем ранее определенной записи.
                         MASK  возвращает значение битов,  соответствующих
                         всем полям в записи.

                         Вы можете использовать MASK для выделения индиви-
                         дуального  поля в записи посредством AND значения
                         маски и всей записи.

         См.также:       WIDTH

         Пример:         STAT    RECORD A:3,B:4,C:5
                         NEWSTAT STAT <0,2,1>
                         mov al,NEWSTAT   ;получает запись
                         and al,MASK B    ;выделяет B
                         mov al,STAT      ;получает маску для всей
                                          ;записи

                                                                               
         MOD
         -----------------------------------------------------------------

         Назначение:     Возвращает  остаток   (модуль)  от  деления  двух
                         выражений

         Режим:          MASM, Ideal

         Синтаксис:      выражение1 MOD выражение 2

         Замечания:      Выражение  1 и выражение 2 оба должны быть приве-

         TASM2 #4-5/Док               = 49 =

                         дены в целочисленные константы. Результатом явля-
                         ется  остаток от деления выражения 1 на выражение
                         2.

         См.также:       +, -, *, /, SHL, SHR

         Пример:         REMAINS=17/5; =2




         TASM2 #4-5/Док               = 50 =

                                           NE                                  
         -----------------------------------------------------------------

         Назначение:     Возвращает значение  "истина"  в   случае,   если
                         выражения не равны между собой

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 NE выражение 2

         Замечания:      Выражение  1 и выражение 2 должны быть оба приве-
                         дены в константы.  NE возвращает значение  "исти-
                         на"(-1),  если  выражения  не равны между собой и
                         значение "ложь"(0) - в случае, если они равны.

                         NE считает, что выражение 1 и выражение 2 являют-
                         ся  32-разрядными  числами  со знаком,  у которых
                         старший бит  является  знаковым.  Таким  образом,
                         выражение -1 NE 0FFFFFFFFh имеет значение "ложь".

         См.также:       EQ, GE, GT, LE, LT

         Пример:         aint =10 NE 10        ; ложь =0

                                          NEAR                                 
         -----------------------------------------------------------------

         Назначение:     Задает выражение для ближней ссылки

         Режим:          Ideal

         Синтаксис:      NEAR выражение

         Замечания:      Выражение должно быть адресом.  Результатом явля-
                         ется выражение,  указывающее на адрес в памяти  и
                         является ближней ссылкой,  содержащей только сме-
                         щение без базового сегмента, независимо от реаль-
                         ного типа выражения.

                         Вы обычно используете данный оператор для дальне-
                         го вызова процедуры или перехода по дальней  мет-
                         ке,  используя  ближний  тип вызова или перехода.
                         Смотрите часть примера для типичного сценария.

                         В режиме MASM  для  выполнения  этой  функции  вы

         TASM2 #4-5/Док               = 51 =

                         должны  использовать директиву PTR с предшествую-
                         щей ей NEAR.

         См.также:       FAR

         Пример:         farр PROC FAR
                          ;тело процедуры
                         farр ENDP
                          ;все еще в том же сегменте
                         рush cs
                         CALL NEAR farр        ;быстрее/короче, чем
                                               ;дальний вызов




         TASM2 #4-5/Док               = 52 =

                                                                               
         NOT
         -----------------------------------------------------------------

         Назначение:     Инвертирование

         Режим:          MASM, Ideal

         Синтаксис:      NOT выражение

         Замечания:      NOT инвертирует в выражении все биты,  заменяя  0
                         на 1 и 1 на 0

         См.также:       AND, OR, XOR

         Пример:         mov al,NOT 11110011b;загружается 00001100b



         TASM2 #4-5/Док               = 53 =

                                         OFFSET                                
         -----------------------------------------------------------------

         Назначение:     Возвращает смещение в пределах сегмента

         Режим:          MASM, Ideal

         Синтаксис:      OFFSET выражение

         Замечания:      Выражение может быть любым выражением или операн-
                         дом,  который указывает на место в памяти. OFFSET
                         автоматически  возвращает значение смещения отно-
                         сительно начала области,  указанной базовым  сег-
                         ментом. Если вы используете директивы сегментации
                         и вам  необходимо  смещение  относительно  начала
                         группы,  а  не сегмента,  вы должны точно указать
                         группу как часть выражения. Например:

                         mov si,OFFSET BUFFER

                         это не то же самое, что

                         mov si,OFFSET DGROUP:BUFFER

                         если только сегмент,  содержащий BUFFER, не явля-
                         ется первым сегментом в DGROUP

         См.также:       SEG

         Пример:         .DATA
                         msg DB"начальный анализ"
                         .CODE
                         mov si,OFFSET MSG         ;адрес MSG


         TASM2 #4-5/Док               = 54 =

                                                                               
         OR
         -----------------------------------------------------------------

         Назначение:     Логическое "ИЛИ"

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 OR выражение 2

         Замечания:      Выполняет побитное логическое "ИЛИ" выражения 1 и
                         выражения 2. Результатом в любом разряде будет 1,
                         если в данном разряде одного из выражений  или  в
                         обоих присутствует 1 и 0 во всех других случаях

         См.также:       AND, NOT, XOR

         Пример:         mov al,11110000b OR 10101010b ;загружается
                                                       ;11111010b

                                          PROC                                 
         -----------------------------------------------------------------

         Назначение:     Задает выражение,  являющееся ближним или дальним
                         указателем на код

         Режим:          Ideal

         Синтаксис:      PROC выражение

         Замечания:      Выражение должно быть адресом.  Результатом явля-
                         ется выражение,  указывающее на адрес в памяти  и
                         являющееся  ближним  или  дальним указателем,  не
                         взирая на действительный тип выражения.  Если  вы
                         определили  тип памяти TINY,  SMALL или COMPACT в
                         директиве .MODEL, то  ссылка  будет  ближней.   В
                         других случаях ссылка будет дальней.

                         Вы обычно используете PROC для вызова или перехо-
                         да к опережающе объявленной функции при использо-
                         вании директив упрощенной сегментации.

                         В режиме  MASM  для  выполнения  этой  функции вы
                         должны использовать директиву PTR с  предшествую-
                         щей ей PROC


         TASM2 #4-5/Док               = 55 =

         См.также:       NEAR, FAR

         Пример:         .MODEL LARGE
                         .CODE
                         CALL PROC TEST1
                         TEST1 PROC       ;действует дальний вызов,
                                          ;обусловленный указанием
                                          ;типом памяти LARGE




         TASM2 #4-5/Док               = 56 =

                                          PTR                                  
         -----------------------------------------------------------------

         Назначение:     Задает выражение, имеющее особый размер

         Режим:          MASM, Ideal

         Синтаксис:      tyрe PTR exрression

         Замечания:      exрression(выражение) должно  быть  адресом.  Ре-
                         зультатом  является  выражение,  указывающее   на
                         адрес в памяти и всегда имеющее формат tyрe, нев-
                         зирая на действительный размер выражения.

                         Обычно вы используете данный оператор для опреде-
                         ления  формата  опережающе объявленного выражения
                         или для точного задания формата выражения, задан-
                         ного  косвенно  и  формат  которого не может быть
                         определен.

                         tyрe должен принимать одно из следующих значений:

                         - UNKNOWN, BYTE,  WORD, DWORD, FWORD, PWORD,
                         QWORD, TBYTE, DATAPTR, CODEPTR или имя структуры
                         -для данных

                         - SHORT, PROC, NEAR, FAR-для кода

                         В режиме Ideal вы не нуждаетесь  в  использовании
                         оператора  PTR.  Вы  можете  указывать exрression
                         сразу же после tyрe.

                         В режиме MASM tyрe может быть одной из следующих
                         цифр:

                         - Для данных:

                         0 = UNKNOWN              6 = PWORD
                         1 = BYTE                 8 = QWORD
                         2 = WORD                10 = TBYTE
                         4 = DWORD

                         - Для кода:

                         0FFFFh = NEAR           0FFFEh = FAR


         TASM2 #4-5/Док               = 57 =

                         Соответственно, в  режиме MASM следующие ключевые
                         слова имеют такие значения:

                         - Для данных:

                         UNKNOWN = 0            QWORD = 8
                         BYTE = 1               TBYTE = 10
                         WORD = 2               DATAPTR = 2 или 4
                         DWORD = 4         (в зависимости от MODEL)
                         PWORD = 6              CODEPTR = 2 или 4
                         FWORD = 6         (в зависимости от MODEL)

                         - Для кода:
                         NEAR = 0FFFFh       PROC = 0FFFFh или 0FFFEh
                         FAR = 0FFFEh      (в зависимости от MODEL)

         См.также:       BYTE, WORD,  DWORD,  QWORD,  FWORD, PWORD,
                         TBYTE, NEAR, FAR, PROC

         Пример:         mov BYTE PTR[SI],10
                         fld qword PTR val
                         val DQ 1234.5678




         TASM2 #4-5/Док               = 58 =

                                                                               
         PWORD
         -----------------------------------------------------------------

         Назначение:     Задает  выражение  формата  32-разрядная  дальняя
                         ссылка

         Режим:          MASM, Ideal

         См.также:       FWORD

                                         QWORD                                 
         -----------------------------------------------------------------

         Назначение:     Задает выражение формата четыре слова

         Режим:          Ideal

         Синтаксис:      QWORD выражение

         Замечания:      Выражение должно быть адресом.  Результатом явля-
                         ется  выражение,  указывающее  на  адрес памяти и
                         всегда имеющее формат QWORD,  не взирая на  дейс-
                         твительный формат выражения.

                         Обычно вы   используете   QWORD  для  определения
                         формата опережающе объявленного выражения или для
                         точного  задания формата выражения заданного кос-
                         венно и формат которого не может  быть определен.

                         В режиме MASM  для  выполнения  этой  функции  вы
                         должны  использовать директиву PTR с предшествую-
                         щей ей QWORD

         См.также:       PTR

         Пример:         fadd [QWORD BX]
                         fsubр [QWORD X]
                         .DATA
                         X DQ 1.234




         TASM2 #4-5/Док               = 59 =

                                          SEG                                  
         -----------------------------------------------------------------

         Назначение:     Возвращает сегмент адреса выражения

         Режим:          MASM, Ideal

         Синтаксис:      SEG выражение

         Замечания:      Выражение может быть любым выражением или операн-
                         дом, которое  ссылается  на  место  в памяти. SEG
                         возвращает константу,  которая представляет  сег-
                         ментную часть адреса места в памяти

         См.также:       OFFSET

         Пример:         .DATA
                         temр DW 0
                         .CODE
                         mov ax,SEG temр
                         mov ds,ax           ;установка сегментного
                                             ;регистра
                         ASSUME DS:SEG TEMP  ;сообщение об этом
                                             ;ассемблеру

                                                                               
         SHL
         -----------------------------------------------------------------

         Назначение:     Сдвигает значение выражение влево

         Режим:          MASM, Ideal

         Синтаксис:      выражение SHL число

         Замечания:      Выражение и число  должны  быть  преобразованы  в
                         константы.  SHL  выполняет логический сдвиг битов
                         выражения  влево.  Значение  битов,   появившихся
                         справа, равно 0, а биты, сдвинутые за левый край-
                         теряются.

         См.также:       SHR

         Пример:         mov al,00000011b SHL 3   ;загружается
                                                  ;00011000b


         TASM2 #4-5/Док               = 60 =

                                         SHORT                                 
         -----------------------------------------------------------------

         Назначение:     Задает выражение,  являющееся коротким указателем
                         на код

         Режим:          MASM, Ideal

         Синтаксис:      SHORT выражение

         Замечания:      Выражение ссылается на адрес в  текущем  сегменте
                         кода.   SHORT  сообщает  ассемблеру  о  том,  что
                         выражение лежит в пределах с -128 до 127 байт от-
                         носительно  текущего  адреса кода,  что позволяет
                         ассемблеру генерировать инструкцию короткого JMP.

                         Вам необходимо использовать SHORT только в случае
                         опережающей ссылки инструкции JMP.Турбо ассемблер
                         автоматически  генерирует  инструкцию   короткого
                         перехода  в  случае,  если  ему  уже известен тип
                         ссылки, задаваемый выражением.

         См.также:       NEAR, FAR

         Пример:         jmр SHORT DONE   ;генерируется инструкция
                                          ;короткого перехода   длиной  не
                                          я4;я0более 128 байт от данного места
                         DONE:

                                                                               
         SHR
         -----------------------------------------------------------------

         Назначение:     Сдвигает значение выражения вправо

         Режим:          MASM, Ideal

         Синтаксис:      выражение SHR число

         Замечания:      Выражение и число  должны  быть  преобразованы  в
                         константы.  SHR  выполняет логический сдвиг битов
                         выражения  вправо.  Значение  битов,  появившихся
                         слева, равно 0, а биты, сдвинутые за правый край-
                         теряются

         Пример:         mov al,80h SHR 2     ;загружается 20h

         TASM2 #4-5/Док               = 61 =

                                          SIZE                                 
         -----------------------------------------------------------------

         Назначение:     Возвращает размер размещенных данных

         Режим:          MASM, Ideal

         Синтаксис:      SIZE имя

         Замечания:      Имя является идентификатором, ссылающимся на дан-
                         ные,  размещенные  одной  из  директив размещения
                         данных (DB, DD и т.д.). В режиме MASM, SIZE возв-
                         ращает значение LENGTH,  умноженное на TYPE. Поэ-
                         тому это не следует брать в расчет многих данных,
                         и не расчитывать группу операторов DUP.

                         В режиме Ideal,  SIZE сообщает  общее  количество
                         байт данных в DUP.  Для получения количества байт
                         DUP используйте LENGTH.

         См.также:       LENGTH, TYPE

         Пример:         msg     DB     "Hello"
                         array   DW     10 DUP(4 DUP(1),0)
                         numbrs  DD     1,2,3,4
                         var     DQ     ?
                         ;режим MASM
                         smsg   =SIZE msg   ;1, строка имеет длину 1
                         sarray =SIZE array ;=20,10 DUP двойное слово
                         snumbrs=SIZE numbrs;4, длина=1,DD=4 байта
                         svar   =SIZE var   ;=8,1 элемент,DQ=8 байт

                         ;режим Ideal
                         smsg   =SIZE msg   ;1,строка имеет длину 1
                         sarray =SIZE array ;=20,10 DUP двойное слово
                         snumbrs=SIZE numbrs;4,длина=1,DD=4 байта
                         svar   =SIZE var   ;=8,1 элемент,DQ=8 байт

                                         SMALL                                 
         -----------------------------------------------------------------

         Назначение:     Устанавливает формат смещения выражения 16 бит

         Режим:          MASM, Ideal( только для кодов 386)


         TASM2 #4-5/Док               = 62 =

         Синтаксис:      SMALL выражение

         Замечания:      Выражение является любым выражением  или  операн-
                         дом. SMALL преобразует его в 16-битовое смещение.
                         Это вы обычно используете для устранения двусмыс-
                         ленности, связанной с форматом. Например, если вы
                         при наличии 80386 процессора используете директи-
                         ву P386

                         jmр [DWORD PTR ABC]

                         может быть  интерпретировано  как дальний вызов с
                         сегментом и 16-битовым смещением,  так и  ближним
                         вызовом, использующим 32-битовое смещение. Данную
                         двусмысленность вы  можете  устранить,  используя
                         директиву SMALL:

                         jmр SMALL [DWORD PTR ABC] ;16-битовое сме-
                                                   ;щение при даль-
                                                   ;нем вызове

                         В этом  примере  SMALL  стоит вне скобок и в этом
                         случае из памяти  читается  двойное  слово.  Если
                         SMALL  размещается  внутри  скобок,  то  это  ин-
                         терпретируется как формат адреса, по которому чи-
                         тается операнд, но не как формат самого операнда,
                         читаемого из памяти. Например :

                         CODE SEGMENT USE32
                         jmр  SMALL [SMALL DWORD PTR XYZ]

                         означает, что XYZ является 4-байтовым указателем,
                         трактуемым как 16-битовое смещение и сегмент, при
                         этом  jmр  косвенно через адрес читает непосредс-
                         твенный адрес для jmр, являющийся 16-битовым сме-
                         щением.

                         Комбинацией операторов LARGE и SMALL, включая или
                         вынося их за скобки,  вы  можете  получать  любые
                         комбинации косвенных JMP и CALL от 16- или 32-би-
                         тового сегмента до 16- или  32-битового сегмента.
                         LARGE и SMALL могут также использоваться вместе с
                         другими двусмысленными инструкциями, такими как
                         LIDT и LGDT

         См.также:       LARGE

         TASM2 #4-5/Док               = 63 =

                                                                               
         SYMTYPE
         -----------------------------------------------------------------

         Назначение:     Возвращает байт описания идентификатора

         Режим:          Ideal

         Синтаксис:      SYMTYPE  выражение

         Замечания:      Функция  SYMTYPE я4 я0оченья4 я0 похожая4 я0 на .TYPE, но с
                         одним отличием: я4 я0еслия4 я0 в я4 я0выражениия4 я0 встретится
                         неопределенный идентификатор,  SYMTYPE   выдаст
                         ошибку в отличие от .TYPE.

         См.также:       .TYPE

                                         TBYTE                                 
         -----------------------------------------------------------------

         Назначение:     Задает выражение размером в 10 байт

         Режим:          Ideal

         Синтаксис:      TBYTE выражение

         Замечания:      Выражение должно быть адресом.  Результатом явля-
                         ется выражение,  которое указывает на адрес в па-
                         мяти и всегда имеет  размер  TBYTE,  невзирая  на
                         действительный формат выражения.

                         Вы обычно   используете   TBYTE  для  определения
                         формат опережающе объявленного выражения  или для
                         точного задания формата выражения, заданного кос-
                         венно и формат которого не может  быть определен.

                         В режиме MASM  для  выполнения  этой  функции  вы
                         должны  использовать директиву PTR с предшествую-
                         щим ему TBYTE

         См.также:       PTR

         Пример:         fid [TBYTE BX]
                         fst [TBYTE X]
                         X   DT    0


         TASM2 #4-5/Док               = 64 =

                                          THIS                                 
         -----------------------------------------------------------------

         Назначение:     Создает операнд,  адресом которого является теку-
                         щий сегмент и значение счетчика

         Режим:          MASM, Ideal

         Синтаксис:      THIS тип

         Замечания:      Тип описывает формат операнда и указывает, ссыла-
                         ется ли он на код или  данные.  Тип  может  иметь
                         следующие значения:

                         - NEAR,  FAR  или PROC (Proc является обычной ди-
                           рективой,  в то время как NEAR и FAR зависят от
                           типа используемой памяти, установленного дирек-
                           тивой MODEL)
                         - BYTE,  WORD,  DWORD, FWORD, PWORD, QWORD, TBYTE
                           или структурное имя

                         Данный оператор вы обычно используете в конструк-
                         ции с EQU и =

         Пример:         рtr1  EQU THIS WORD
                         рtr2  LABEL WORD




         TASM2 #4-5/Док               = 65 =

                                         .TYPE                                 
         -----------------------------------------------------------------

         Назначение:     Возвращает байт, описывающий идентификатор

         Режим:          MASM

         Синтаксис:      .TYPE имя

         Замечания:      Имя -  идентефикатор,  который может определяться
                         либо нет в исходном файле. .TYPE возвращает байт,
                         который описывает идентификатор со следующими по-
                         лями:

                         ----------------------------------------------
                          Бит            Описание
                         ----------------------------------------------
                           0  относительный идентификатор программы
                           1  относительный идентификатор данных
                           2  константа
                           3  режим прямой адресации
                           4  является регистром
                           5  идентификатор является определенным
                           7  идентификатор является внешним
                         ----------------------------------------------

                         Если биты 2 и 3 оба равны 0, то выражение исполь-
                         зует косвенный регистр (подобно BX и т.д.).

                         Если TYPE возвращает 0, то выражение содержит не-
                         определенный идентификатор.

                         TYPE обычно используется в макросах для определе-
                         ния  способа обработки различных типов аргументов

         См.также:       SYMTYPE

         Пример:         IF (.TYPE ABC) AND 3    ;это относительный
                                                 ;сегмент
                         ASSUME DS:SEG ABC
                         mov ax,SEG ABC
                         mov ds,ax
                         ENDIF




         TASM2 #4-5/Док               = 66 =

                                          TYPE                                 
         -----------------------------------------------------------------

         Назначение:     Возвращает число,  определяющее  размер  или  тип
                         идентификатора

         Режим:          MASM, Ideal

         Синтаксис:      TYPE exрression

         Замечания:      TYPE возвращает одно из следующих значений, зави-
                         сящее от типа выражения:

                            BYTE      1
                            WORD      2
                            DWORD     4
                            FWORD     6
                            PWORD     6
                            QWORD     8
                            TBYTE     10
                            NEAR      0FFFFh
                            FAR       0FFFEh
                            constant  0
                            structure количество байт в структуре

         См.также:       LENGTH, SIZE

         Пример:         bvar   DB 1
                         darray DD 10DUP(1)
                         X STRUC
                           DW ?
                           DT ?
                         X ENDS
                         fр EQU THIS FAR
                         tbvar=TYPE bvar    ;=1
                         tdarray=TYPE darray;=4
                         tx   =TYPE x       ;=12
                         tfр  =TYPE fр      ;0FFFEh




         TASM2 #4-5/Док               = 67 =

                                        UNCNOWN                                
         -----------------------------------------------------------------

         Назначение:     Удаляет информацию о типе выражения

         Режим:          Ideal

         Синтаксис:      UNCNOWN выражение

         Замечания:      Выражение является адресом.  Результатом является
                         то  же  самое  выражение,  но  с  удаленным типом
                         (BYTE, WORD и т.д.).

                         Используйте UNCNOWN для точного  указания размера
                         всякий  раз,  когда  вам  необходимо сослаться на
                         местоположение.  Это  полезно,  если  вы   хотите
                         обращаться  с местоположением как с типом объеди-
                         нения, позволяющим сохранять многие различные ти-
                         пы данных.

                         Вы также  можете  использовать  адрес  с размером
                         UNCNOWN почти так же, как если бы вы использовали
                         косвенно-регистровую  ссылку на память для одного
                         операнда и связывали размер  операции,  используя
                         регистр   для  другого  операнда.  Определяя  имя
                         UNCNOWN, вы можете использовать его точно так же,
                         как  безымянное  выражение  регистра,  такого как
                         [BX].

                         Для выполнения данной функции в режиме  MASM  вам
                         необходимо использовать директиву PTR c последую-
                         щим типом BYTE.

         См.также:       PTR


         TASM2 #4-5/Док               = 68 =

         Пример:           .DATA
                         workbuf DT  0
                         workрtr EQU UNCNOWN WORCBUF ;безымянный
                                                     ;указатель
                           .CODE
                         ;Пример 1
                         mov [BYTE PTR WORKPTR],1    ;сохраняет байт
                         fstр [QWORD PTR WORKPTR]    ;сохраняет QWORD
                         mov [WORKPTR],1             ;ошибка - нет
                                                     ;типа
                         ;Пример 2
                         mov al,[WORKPTR]            ;не выполняется
                         mov ax,[WORKPTR]            ;


         TASM2 #4-5/Док               = 69 =

                                         WIDTH                                 
         -----------------------------------------------------------------

         Назначение:     Возвращает ширину поля записи в битах

         Режим:          MASM, Ideal

         Синтаксис:      WIDTH recordfieldname
                         WIDTH record

         Замечания:      recordfieldname является именем любого поля ранее
                         определенной  записи. WIDTH возвращает количество
                         битов, занимаемых recordfieldname в записи.

                         record -  имя  ранее  определенной записи.

                         WIDTH возвращает общее количество битов, занимае-
                         мых всеми полями данной записи

         См.также:       MASK

         Пример:         ;MACRO определяет  максимальное   значение
                         ;для поля А
                         maxval MACRO FIELDNAME
                         value=2
                           REPT WIDTH FIELDNAME-1
                         value=value+2
                           ENDM
                         value=value-1
                           ENDM




         TASM2 #4-5/Док               = 70 =

                                          WORD                                 
         -----------------------------------------------------------------

         Назначение:     Задает выражение длиной в слово

         Режим:          Ideal

         Синтаксис:      WORD выражение

         Замечания:      Выражение должно быть адресом.  Результатом явля-
                         ется выражение,  указывающее на адрес в памяти  и
                         всегда имеет размер WORD,  независимо от действи-
                         тельного размера выражения.

                         Вы обычно используете WORD для определения форма-
                         та опережающе объявленного выражения или для точ-
                         ного задания формата выражения, заданного косвен-
                         но и формат которого не может быть определен.

                         В режиме  MASM  для  выполнения  этой  функции вы
                         должны использовать директиву PTR с  предшествую-
                         щим ему WORD.

         См.также:       PTR

         Пример:         mov [WORD BX],1
                         mov [WORD X],1
                         X DW 0



         TASM2 #4-5/Док               = 71 =

                                                                               
         XOR
         -----------------------------------------------------------------

         Назначение:     Логическое исключающее ИЛИ

         Режим:          MASM, Ideal

         Синтаксис:      выражение 1 XOR выражение 2

         Замечания:      Выполняет  побитное  логическое  исключающее  ИЛИ
                         выражения 1 и выражения 2.  Результатом  в  любом
                         разряде будет 1,  если в данном разряде одного из
                         выражений - 1,  а другого - 0, и 0 во всех других
                         случаях

         См.также:       AND, NOT, OR

         Пример:         mov al,11110000b XOR 11000011;AL=00110011b





         TASM2 #4-5/Док               = 72 =

                                   Специальные макро операторы                 
         -----------------------------------------------------------------


              Специальные макро    операторы   используются   при   вызове
         макросов, внутри макросов и при определении повторяющихся блоков.
         Также  они  могут  использоваться с аргументами условных директив
         ассемблера.

              Далее приведено   краткое   описание    специальных    макро
         операторов:

                         &     оператор заменитель

                         <>    оператор текстовой строки

                         !     оператор символьных кавычек

                         %     оператор преобразования выражения

                         ;;    подавление комментария

              Данные операторы  позволяют вам модифицировать имена иденти-
         фикаторов и отдельные идентификаторы,  что дает  вам  возможность
         либо удалять специальное значение из идентификатора,  либо управ-
         лять при вычислении аргумента.

                                           &                                   
         -----------------------------------------------------------------

         Назначение:     Оператор заменитель

         Режим:          MASM, Ideal

         Синтаксис:      & имя

         Замечания:      Имя - значение  действительного  параметра  макро
                         вызова или повторяющийся блок.  Во многих случаях
                         параметр заменитель является автоматическим  и вы
                         не должны использовать данный оператор. Вы должны
                         использовать данный оператор при желании вставить
                         заменитель  символьной строки,  взятой в кавычки,
                         или при желании "собрать" вместе идентификатор из
                         одного и  более  параметров или несколько опреде-
                         ленных мдентификаторов.  В этом случае &  не  до-

         TASM2 #4-5/Док               = 73 =

                         пускает интерпретацию символов как одного имени

         Пример:         MAKEMSG MACRO NAME,NUM
                         MSG&NUM: DB '&NAME'
                         ENDM

                         Если вызвать данный макро следующим образом:

                         MAKEMSG 9,<Введите значение:>

                         то:

                         MSG9  DB 'Введите значение:'




         TASM2 #4-5/Док               = 74 =

                                           <>                                  
         -----------------------------------------------------------------

         Назначение:     Оператор текстовой строки

         Режим:          MASM< Ideal

         Синтаксис:      <текст>

         Замечания:      Текст  трактуется  как  отдельный  макро или пов-
                         торяемый параметр, даже если он содержит запятые,
                         пробелы или табуляции, которыми обычно разделяют-
                         ся параметры.  Используйте данный оператор, когда
                         вы желаете передать аргумент, содержащий любые из
                         этих разделительных символов.

                         Вы можете также использовать данный  параметр для
                         указания  Турбо  ассемблеру  трактовать буквенные
                         символы без задания им  какого-либо  специального
                         значения. Например, если вы хотите передать точку
                         с запятой (;) как параметр  в  макро  вызове,  вы
                         должны заключить ее в угловые скобки (<;>) во из-
                         бежание трактования данного  символа  как  начала
                         комментария.

                         Турбо ассемблер выводит содержимое угловых скобок
                         за их пределы каждый раз при  передаче  параметра
                         при  вызове  макро.  Для передачи параметра через
                         несколько уровней вызовов макро, вы должны заклю-
                         чить его в угловые скобки для каждого уровня

         Пример:         MANYDB MACRO VALS
                         IRP  X,
                           ENDM
                           ENDM

                         При вызове данного макро вы должны заключить  не-
                         обходимые  значения  в  угловые  скобки и,  таким
                         образом,  все они  будут  восприняты  как  единый
                         параметр VALS:

                         MANYDB <4,6,0,8>

                         В повторной директиве IRP имя параметра по -преж-
                         нему заключено  в  угловые  скобки,  т.к.  скобки
                         вокруг параметра убираются при вызове макро.

         TASM2 #4-5/Док               = 75 =

                                           !                                   
         -----------------------------------------------------------------

         Назначение:     Оператор символьных кавычек

         Режим:          MASM, Ideal

         Синтаксис:      ! символ

         Замечания:      Оператор !  позволяет вам вызывать макрос с аргу-
                         ментом,  который  содержит  специальные   символы
                         макро оператора. Это эквивалентно заключению сим-
                         вола в угловые скобки.  Например, запись !& экви-
                         валентна записи <&>

         Пример:         MAKEMSG MACRO NAME,NUM
                          MSG&NUM: DB '&NAME'
                          ENDM

                         MAKEMSG 99>

                         В данном  примере  аргумент был бы преждевременно
                         окончен, если бы не был использован оператор !

                                           %                                   
         -----------------------------------------------------------------

         Назначение:     Оператор преобразования выражения

         Режим:          MASM, Ideal

         Синтаксис:      % выражение

         Замечания:      Выражение может быть  либо  числовым  выражением,
                         использующим  любой  из  операндов  и операторов,
                         описанных в этой главе,  либо текстовым выражени-
                         ем. Строка, которая передается как параметр макро
                         вызова,   является   результатом   преобразования
                         выражения.

                         Используйте данный  оператор при желании передать
                         строку,  представляющую вычисленный  результат  в
                         макро, что предпочтительнее самого выражения

         Пример:         DEFSYM MACRO NUM

         TASM2 #4-5/Док               = 76 =

                           ???&NUM
                           ENDM
                         DEFSYM %5+4

                         выполняет определение метки в следующем коде :

                         ???9:

                                           ;;                                  
         -----------------------------------------------------------------

         Назначение:     Подавление комментария

         Режим:          MASM, Ideal

         Синтаксис:      ;;текст

         Замечания:      Турбо ассемблер игнорирует любой текст, следующий
                         за  двумя  знаками  точка с запятой (;;).  Обычно
                         комментарий сохраняется как часть макро определе-
                         ния  и  появляется  в листинге всякий раз при ис-
                         пользовании  макро.  Комментарий,  стоящий  после
                         двух знаков точка с запятой (;;),  не сохраняется
                         как часть макро определения. Это экономит память,
                         особенно  если вы имеете много макросов,  которые
                         содержат большое количество комментариев.

         Пример:         SETBYTES MACRO NAME,VAL
                           NAME DB 10 DUP(VAL)  ;;данный комментарий
                                                  не будет сохраняться
                           ENDM



         TASM2 #4-5/Док               = 77 =

                                       Глава 3. Директивы                      
         -----------------------------------------------------------------

              Исходное выражение может быть либо инструкцией,  либо дирек-
         тивой.  Строка инструкции генерирует объектный код для процессора
         определяемый  мнемоникой  инструкции  и  ее  операндами.   Строка
         директивы сообщает ассемблеру  о выполнении каких-либо  действий,
         не связанных с генерацией инструкций и состоящих из определения и
         размещения  данных  и  структур  данных,   определения  макросов,
         определения   формата   файла   листинга,   управления   условным
         ассемблированием, выбора типа процессора и установки инструкций.

              Некоторые директивы определяют идентификатор,  который явля-
         ется  просто  строкой  исходного  текста.  К таким директивам от-
         носятся, например, SEGMENT, LABEL и GROUP. Другие влияют на рабо-
         ту ассемблера.

              Перечисленные здесь  директивы  расположены   в   алфавитном
         порядке (не беря в расчет знаки пунктуации); например .CODE стоит
         непосредственно перед CODESEG.

              Зарезервированные слова %TOC и %NOTOC в данной  версии Турбо
         ассемблера не реализованы. Будущие версии будут использовать дан-
         ные ключевые слова и, поэтому, вы не должны использовать их в ка-
         честве идентификаторов в программах.

              Директивы могут делиться на три категории:

                 1. Директивы  режима MASM :  Турбо ассемблер поддерживает
                 все директивы режима MASM. При использовании вами ассемб-
                 лера  в режиме Ideal синтаксис некоторых директив меняет-
                 ся.  Для таких директив приводится описание их синтаксиса
                 для обоих режимов.

                 2. Новые  директивы  Турбо ассемблера :  Данные директивы
                 расширяют возможности по сравнению с MASM.

                 3. Директивы,  являющиеся синонимами для существующих ди-
                 ректив MASM:  Данные синонимы являются более расширенными
                 по сравнению с существующими директивами MASM.  Например,
                 директивам .LIST и .XLIST  предпочтительнее  использовать
                 %LIST и %NOLIST.  Как правило, пара директив, которая де-
                 лает что-либо возможным или невозможным, имеет вид XXXX и
                 NOXXXX.  В  синонимах также избегайте использования точки
                 (.) в начале директивы. Директивы режима MASM, начинающи-
                 еся с точки,  недействительны в режиме Ideal, таким обра-

         TASM2 #4-5/Док               = 78 =

                 зом, взамен вы должны использовать новые синонимы.

              Все директивы Турбо ассемблера, управляющие файлом листинга,
         начинаются с символа процент (%).

              При описании синтаксиса используются следующие  соглашения :

               - Квадратные скобки говорят о том, что данные аргументы яв-
                 ляются  необязательными (вы не должны заключать аргументы
                 в квадратные скобки).

               - Круглые скобки (...) сообщают о том,  что предыдущий эле-
                 мент может быть повторен необходимое количество раз.



         TASM2 #4-5/Док               = 79 =

                                                                               
         Samрle Directive  (Образец директивы)
         -----------------------------------------------------------------

         Назначение:     Приводится описание того,  что  данная  директива
                         выполняет

         Режим:          Режим, в котором выполняется данная директива

         Синтаксис:      Описывается, как использовать директиву

         Замечания:      Основная информация о директиве


         См.также:       Другие директивы, имеющие отношение к данной

         Пример:         Образец кода, использующего данную директиву


                                                                               
         .186
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать    инструкции   процессора
                         80186

         Режим:          MASM

         Синтаксис:      .186

         Замечания:      Директива .186  позволяет  генерировать  дополни-
                         тельные  инструкции,  поддерживаемые  процессором
                         80186 (Похожа на P186)

         См.также:       .8086,  .286,  .286C,  .286P, .386, .386C,
                         .386P, P8086, P286, P286P, P286N, P386, P386P,
                         P386N.

         Пример:         .186
                         PUSH 1       ;инструкция выполнима на 186




         TASM2 #4-5/Док               = 80 =

                                                                               
         .286
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать не привилегированные
                         инструкции для 80286

         Режим:          MASM

         Замечания:      Директива .286  позволяет  генерировать  дополни-
                         тельные  инструкции,  поддерживаемые  процессором
                         80286, в  непривилегированном режиме.  Инструкции
                         арифметического сопроцессора  80287  поддерживает
                         точно  так  же,  как  если  бы  были использованы
                         директивы .287 или 286C.(Похожа на директивы .286
                         N и .286C).

         См.также:       .8086,  .186,  .286C,  .286P, .386, .386C,
                         .386P, P8086, P286, P286P, P286N, P386, P386P,
                         P386N.

         Пример:         .286
                         fstsw ax; выполнимо только с 80287

                                                                               
         .286C
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать не привилегированные
                         инструкции для 80286

         См.также:       .8086,  .186,  .286,  .286P, .386, .386C,
                         .386P, P8086, P286, P286P, P286N, P386, P386P,
                         P386N.




         TASM2 #4-5/Док               = 81 =

                                                                               
         .286P
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать все  инструкции процессора
                         80286

         Режим:          MASM

         Синтаксис:      .286P

         Замечания:      Директива .286P  позволяет  генерировать дополни-
                         тельные  инструкции,  поддерживаемые  процессором
                         80286,   включая   инструкции  привилегированного
                         режима.  Также поддерживает инструкции  арифмети-
                         ческого сопроцессора 80287 точно так же, как если
                         бы были использованы  директивы  .287  или  P287.
                         (Похожа на P286)

         См.также:       .8086,  .186,  .286,  .286C, .386, .386C,
                         .386P, P8086, P286, P286P, P286N, P386, P386P,
                         P386N.



         TASM2 #4-5/Док               = 82 =

                                          .287                                 
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать инструкции  для  сопроцес-
                         сора 80287

         Режим:          MASM

         Синтаксис:      .287

         Замечания:      Директива   .287   позволяет   генерировать   все
                         инструкции,  поддерживаемые арифметическим сопро-
                         цессором  80287.  Используйте  данную  директиву,
                         если вы знаете, что ваша программа никогда не бу-
                         дет использовать сопроцессор 8087.  Эта директива
                         вызывает инструкции с плавающей запятой,  которые
                         являются  несовместимыми  с  8087  и  поэтому  не
                         используйте данную директиву, если ваша программа
                         при выполнении использует 8087. (Похожа на P287)

         См.также:       .8087, .387, P8087, PN8087, P287, P387

         Пример:         .287
                         fsetрm   ;только для 287



         TASM2 #4-5/Док               = 83 =

                                          .386                                 
         -----------------------------------------------------------------

         Назначение:     Позволяет  генерировать не привилегированные ин-
                         струкции для 80386

         Режим:          MASM

         Синтаксис:      .386

         Замечания:      Директива .386  позволяет  генерировать  дополни-
                         тельные  инструкции,  поддерживаемые  процессором
                         80386,  в непривилегированном режиме.  Также под-
                         держивает инструкции арифметического сопроцессора
                         80387 точно так же, как если бы были использованы
                         директивы .387  или  386C.  (Похожа  на  P386N  и
                         .386C)

         См.также:       .8086,  .186,  .286,  .286C, .286P, .386C,
                         .386P, P8086, P286, P286P, P286N, P386, P386P,
                         P386N.

         Пример:         .386
                         stosd  ;инструкция выполняется только на
                                ;386

                                                                               
         .386C
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать   инструкции    процессора
                         80386

         См.также:       .8086,  .186,  .286,  .286C, .286P, .386,
                         .386P, P8086, P286, P286P, P286N, P386, P386P,
                         P386N.




         TASM2 #4-5/Док               = 84 =

                                                                               
         .386P
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать все  инструкции процессора
                         80386

         Режим:          MASM

         Синтаксис:      .386P

         Замечания:      Директива .386P  позволяет  генерировать дополни-
                         тельные  инструкции,  поддерживаемые  процессором
                         80386,   включая   инструкции  привилегированного
                         режима.  Также поддерживает инструкции  арифмети-
                         ческого сопроцессора 80387 точно так же, как если
                         бы были использованы  директивы  .387  или  P387.
                         (Похожа на P386P)

         См.также:       .8086,  .186,  .286,  .286C, .286P, .386,
                         .386C, P8086, P286, P286P, P286N, P386, P386P,
                         P386N.
                                          .387                                 
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать инструкции  для  сопроцес-
                         сора 387

         Режим:          MASM

         Синтаксис:      .387

         Замечания:      Директива .387    позволяет    генерировать   все
                         инструкции, поддерживаемые  арифметическим сопро-
                         цессором  80387.  Используйте  данную  директиву,
                         если вы знаете, что ваша программа никогда не бу-
                         дет использовать сопроцессор 8087.  Эта директива
                         вызывает инструкции с плавающей запятой,  которые
                         являются  несовместимыми  с  8087  и  поэтому  не
                         используйте данную директиву, если ваша программа
                         при выполнении использует 8087 (Похожа на .387)

         См.также:       .8087, .287, 8087, PNO87, P287, P387

         Пример:         .387
                         fsin  ;SIN( ) выполняется только на 387

         TASM2 #4-5/Док               = 85 =

                                          8086                                 
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать  инструкции   только   для
                         процессора 8086

         Режим:          MASM

         Синтаксис:      .8086

         Замечания:      Директива .8086  позволяет  генерировать инструк-
                         ции, поддерживаемые процессором 8086, несовмести-
                         мые  со  всеми инструкциями,  выполняемыми только
                         процессорами 80186, 80286, 80386. Также поддержи-
                         вает  инструкции  сопроцессора 8087 точно так же,
                         как если бы были использованы .8087 или 8087.

                         Данная инструкция принимается по умолчанию, когда
                         Турбо  ассемблер начинает ассемблировать исходный
                         файл. Программы, ассемблированные с использовани-
                         ем  данного  режима,  смогут  выполняться на всех
                         процессорах семейства 80х86.  Если вы знаете, что
                         ваша  программа будет выполняться только на одном
                         типе процессора,  вы можете  отдать  предпочтение
                         тем специфичным директивам,  которые выполнимы на
                         используемом типе процессора (Похожа на .P8086).

         См.также:       .186, .286C,  .286,  .286P,  .386C,  .386,
                         .386P, P8086, P286, P286P, P386, P386P

                                         .8087                                 
         -----------------------------------------------------------------

         Назначение:     Позволяет генерировать  инструкции  для сопроцес-
                         сора 8087.

         Режим:          MASM

         Синтаксис:      .8087

         Замечания:      Директива .8087   позволяет   генерировать    все
                         инструкции, поддерживаемые сопроцессором  8087  и
                         несовместимые со всеми инструкциями, выполняемыми
                         только 80287 и 80387.


         TASM2 #4-5/Док               = 86 =

                         Данная инструкция принимается по умолчанию, когда
                         Турбо ассемблер начинает  ассемблировать исходный
                         файл. Программы, ассемблированные с использовани-
                         ем данного режима,  смогут  выполняться  на  всех
                         сопроцессорах  семейства  80х87.  Если вы знаете,
                         что ваша программа будет  выполняться  только  на
                         одном  типе сопроцессора,  вы можете отдать пред-
                         почтение тем специфичным директивам,  которые вы-
                         полнимы на используемом типе сопроцессора (Похожа
                         на .P8087)

         См.также:       .287, .387, 8087, PN087, P287, P387

         Пример:         .8087
                         fstsw memloc ;невыполнима FSTSW AL на 8087

                                           :                                   
         -----------------------------------------------------------------

         Назначение:     Определяет ближнюю метку кода

         Режим:          MASM, Ideal

         Синтаксис:      имя:

         Замечания:      Имя - идентификатор, который вы предварительно не
                         определили в исходном файле.  Вы можете  располо-
                         жить ближнюю метку кода самостоятельно на строке,
                         либо в начале строки перед  инструкцией.  Обычно,
                         ближняя метка кода является местом назначения для
                         инструкций JMP и CALL в том  же  сегменте.  Метка
                         кода  будет доступна только внутри текущего файла
                         в том случае,  если вы не будете использовать ди-
                         рективу PUBLIC для того, чтобы сделать ее доступ-
                         ной из других исходных файлов.

                         Действие данной  директивы  аналогично   действию
                         директивы   LABEL  для  определения  NEAR  метки;
                         например A: это то же, что и A LABEL NEAR.

         См.также:       LABEL

         Пример:         .
                         .
                         jne A        ;перешагивает через следующую

         TASM2 #4-5/Док               = 87 =

                                      ;инструкцию
                         inc si
                     A:               ;JNE передает управление в
                                      ;в это место

                                           =                                   
         -----------------------------------------------------------------

         Назначение:     Определяет числовое равенство

         Режим:          MASM, Ideal

         Синтаксис:      имя=выражение

         Замечания:      Имя связывается с результатом вычисления  выраже-
                         ния,  которое должно быть представлено либо конс-
                         тантой,  либо адресом внутри сегмента.  Имя может
                         быть либо новым символическим именем,  либо иден-
                         тификатором, который  ранее  уже  использовался с
                         директивой =.  Выражение не должно содержать  ка-
                         ких-либо   опережающе  объявленных  символических
                         имен.

                         Вы можете  переопределить идентификатор,  который
                         был определен с использованием директивы  =,  что
                         позволяет вам  использовать  идентификаторы в ка-
                         честве счетчиков  (смотрите  пример,  приведенный
                         ниже).

                         Вы не можете использовать = для назначения строк,
                         переопределения  ключевых   слов   или   мнемоник
                         инструкций.  Для того, чтобы делать эти вещи, ис-
                         пользуйте EQU.

                         Директива = имеет более предсказуемое поведение в
                         режиме MASM, чем директива EQU, поэтому вы должны
                         использовать = вместо EQU везде,  где это возмож-
                         но.

         См.также:       EQU


         TASM2 #4-5/Док               = 88 =

         Пример:         MASK=1     ;инициализация бита маски
                         BittBl LABEL BYTE
                           REPT 8
                           DB MASK
                         MASK=MASK*2;сдвиг бита влево
                           ENDM




         TASM2 #4-5/Док               = 89 =

                                         ALIGN                                 
         -----------------------------------------------------------------

         Назначение:     Округляет значение счетчика до  адреса,  кратного
                         двойке

         Режим:          MASM, Ideal

         Синтаксис:      ALIGN граница

         Замечания:      Граница должна быть кратна 2 (например :2, 4, 8 и
                         т.д.).

                         Если значение счетчика не является кратным грани-
                         це,  то  в  сегмент вставляется инструкция NOP до
                         достижения необходимого адреса.  В  случае,  если
                         значение   счетчика  кратно  границе,  то  данная
                         директива не имеет никакого действия.

                         Вы не можете выровнять до границы,  которая явля-
                         ется более строгой,  чем выравнивание сегмента, в
                         котором появляется директива  ALIGN. Выравнивание
                         сегмента определяется, когда сегмент первоначаль-
                         но устанавливается директивой SEGMENT.

                         Например, если вы выделили сегмент при помощи

                           CODE SEGMENT PARA PUBLIC

                         вы можете сказать ALIGN 16 (аналогично  PARA), но
                         вы не можете сказать ALIGN 32,  поскольку это яв-
                         ляется более строгим, чем выравнивание, указанное
                         ключевым словом PARA в директиве SEGMENT

         См.также:       EVEN, EVENDATA

         Пример:         ALIGN  4            ;выравнивает до гра-
                                             ;ницы DWORD для 386
                         BigNum  DD  12345678




         TASM2 #4-5/Док               = 90 =

                                         .ALPHA                                
         -----------------------------------------------------------------

         Назначение:     Устанавливает алфавитный  порядок следования сег-
                         ментов

         Режим:          MASM

         Синтаксис:      .ALPHA

         Замечания:      Обычно вы используете .ALPHA для обеспечения сов-
                         местимости  со старыми версиями MASM и ассемблера
                         IBM.  Для старых версий ассемблеров сегменты рас-
                         полагаются  в  алфавитном порядке,  что не обяза-
                         тельно для новых. Используйте данное средство при
                         ассемблировании  исходных файлов,  написанных для
                         старых версий.

                         Если вы не используете данную директиву, сегменты
                         следуют в том же порядке,  в котором они встреча-
                         ются в исходном файле.  Директива DOSEG также мо-
                          ет упорядочивать сегменты.

                         .ALPHA выполняет те же действия, что и параметр /
                         A в командной строке.  Если вы используете в  ко-
                         мандной строке параметр /S,  директива .ALPHA бу-
                         дет отменена им.

         См.также:       DOSSEG, .SEG

         Пример:            .ALPHA
                         XYZ SEGMENT
                         XYZ ENDS
                         ABC SEGMENT   ;данный сегмент будет первым
                         ABC ENDS




         TASM2 #4-5/Док               = 91 =

                                          ARG                                  
         -----------------------------------------------------------------

         Назначение:     Помещает в стек аргументы для процедуры

         Режим:          MASM, Ideal

         Синтаксис:      ARG аргумент[,аргумент]...[=символ]
                         [RETURNS аргумент[,аргумент]]

         Замечания:      ARG употребляется внутри PROC/ENDP,  позволяя вам
                         иметь доступ к параметрам,  сохраненным  в  стеке
                         посредством  вызова процедуры.  Каждому аргументу
                         назначается положительное смещение  регистром BP,
                         предположив,  что обратный адрес вызова функции и
                         BP того, кто вызывает уже сохранены в стеке.

                         Аргумент описывает аргумент,  вызывающий процеду-
                         ру. Язык, определенный с директивой .MODEL, опре-
                         деляет, помещаются ли аргументы в стек в обратном
                         порядке. Вы всегда должны перечислить аргументы в
                         том порядке,в котором они появляются в вызывающей
                         процедуру функции языка высокого уровня.

                         При необходимости Турбо  ассемблер  читает  их  в
                         обратном порядке. Каждый аргумент имеет следующий
                         синтаксис:

                         argname[[count1]][:[distance][PTR]tyрe][:count2]

                         argname - имя,  которое будет использоваться  для
                         ссылки   на  данный  аргумент  внутри  процедуры.
                         Distance - необязателен и может быть  либо  NEAR,
                         либо FAR для отображения того, что аргумент явля-
                         ется указателем данного формата.  Tyрe - тип дан-
                         ных аргумента и может  принимать  значения  WORD,
                         DWORD,  FWORD, PWORD, QWORD, TBYTE или имя струк-
                         туры.  count1, count2 - количество элементов ука-
                         занного типа.  Общее количество элементов опреде-
                         ляется как count1*count2.

                         Если вы не определили tyрe,  будет принято значе-
                         ние WORD.

                         Если вы добавляете PTR для отображения  того, что
                         аргумент в самом деле является указателем на дан-

         TASM2 #4-5/Док               = 92 =

                         ные,  Турбо ассемблер выделяет данную  отладочную
                         информацию для Турбо Отладчика. Использование PTR
                         оказывает действие только на генерацию добавочной
                         отладочной информации и не генерирует код.

                         При использовании  PTR,  при определении NEAR или
                         FAR передним,  Турбо ассемблер устанавливает раз-
                         мер указателя, основываясь на текущем типе памяти
                         и (для процессора 386) размере текущего адресного
                         сегмента (16 или 32 бита). Размер устанавливается
                         величиной в WORD для совсем малой,  малой и сред-
                         ней  памяти,  и  в DWORD для всех остальных типов
                         памяти, использующих 16-битовые сегменты. Если вы
                         используете  386  процессор и 32 битовый сегмент,
                         то размер устанавливается величиной в  DWORD  для
                         совсем малой,  малой и средней памяти,  и в FWORD
                         для всех остальных типов памяти.

                         Имена аргументов остаются определенными в  проце-
                         дуре  как  операнды  в  памяти  относительно  BP.
                         Например:

                           Func1  PROC NEAR
                                  arg A:WORD,B:DWORD:4,C:BYTE=D

                         определяет A как [BP+4], B как [BP+6], С как [BP+
                         14] и D как 20.

                         Если вы заканчиваете список аргументов знаком ра-
                         венства  (=) и идентификатором,  то идентификатор
                         будет равен общей длине блока аргументов  в  бай-
                         тах.  Данное  значение  вы  можете использовать в
                         конце процедуры как аргумент инструкции RET,  ко-
                         торая  при  возврате  очищает стек от сохраненных
                         аргументов   (данное   соглашение   при   вызовах
                         действует в Паскале).

                         Так как для процессоров семейства 8086 невозможно
                         сохранить аргумент размером в один байт, аргумен-
                         ты,  объявленные как тип BYTE,  будут занимать  2
                         байта  в  области стека.  Это соответствует форме
                         передачи  языками  высокого   уровня   символьных
                         переменных   в   качестве  параметров.  Если  вы,
                         все-таки,  хотите сохранить в стеке  единственный
                         байт,  вы должны точно определить размерность по-
                         ля:

         TASM2 #4-5/Док               = 93 =


                         ARG REALBYTE:BYTE:1

                         Если вы не определите размерность  для аргументов
                         типа BYTE, по умолчанию будет принята размерность
                         2.

                         Необязательное ключевое слово  RETURNS определяет
                         один или более аргументов, которые не должны быть
                         извлечены из стека при возврате  процедуры  в  то
                         место,  откуда она была вызвана.  Обычно, если вы
                         определяете язык как PASKAL или TPASKAL с исполь-
                         зованием директивы .MODEL, все аргументы извлека-
                         ются из стека при  возврате  процедуры.  Если  вы
                         расположили   аргументы   после  ключевого  слова
                         RETURNS,  они будут сохранены в стеке для исполь-
                         зования, а затем изъяты из стека. В частности, вы
                         должны определить  возвращаемое  значение  паска-
                         левской строки, размещая его после ключевого сло-
                         ва RETURNS.

         См.также:       LOCAL, PROC, USES

         Пример:         Простая паскалевская процедура:

                         fр   PROC FAR
                              SRC:WORD,DEST:WORD=ARGLEN
                         arg  @a:WORD,@b:WORD=@arglen
                              рush bр
                              mov bр,sр
                              mov di,DEST
                         ;<Тело процедуры>
                              mov si,SRC
                              рoр bр
                              ret @arglen
                         fр   ENDP





         TASM2 #4-5/Док               = 94 =

                                         ASSUME                                
         -----------------------------------------------------------------

         Назначение:     Связывает сегментный  регистр  с  сегментом   или
                         групповым именем

         Режим:          MASM, Ideal

         Синтаксис:      ASSUME сегментный  регистр:имя
                         [,сегментный регистр:имя]...

                         ASSUME сегментный регистр:NOTHING

                         ASSUME NOTHING

         Замечания:      Сегментный регистр - один из регистров CS, DS, ES
                         или SS, и, если при наличии процессора 80386 были
                         использованы  директивы  P386  или  P386N,  также
                         регистры FS и GS.

                         Имя может принимать одно из следующих значений:

                         - групповое  имя,  определенное при использовании
                         директивы GROUP

                         - имя сегмента,  определенное  при  использовании
                         директивы SEGMENT или директивами сегментации

                         - выражение, начинающееся с оператора SEG

                         - ключевое слово NOTHING.

                         Ключевое слово NOTHING разрывает взаимосвязь меж-
                         ду определенным сегментным регистром  и сегментом
                         или  групповым  именем.  Выражение ASSUME NOTHING
                         снимает все связи между  сегментным  регистром  и
                         сегментом или групповым именем.

                         С помощью единственного выражения ASSUME вы може-
                         те определить несколько регистров,  а также  раз-
                         местить  несколько выражений ASSUME в любом месте
                         вашего исходного файла.

                         Полную информацию  об   использовании   директивы
                         ASSUME  вы  можете  получить в "Директива ASSUME"
                         (глава 10 руководства пользователя).

         TASM2 #4-5/Док               = 95 =


         См.также:       GROUP, SEGMENT

         Пример:         DATA SEGMENT
                         mov ax,DATA
                         mov ds,ax
                         ASSUME ds:DATA

                                                                               
         %BIN
         -----------------------------------------------------------------

         Назначение:     Устанавливает ширину при выводе объектного кода в
                         файл листинга

         Режим:          MASM, Ideal

         Синтаксис:      %BIN размер

         Замечания:      Размер является константой. Если вы не используе-
                         те эту директиву, инструкции при этом размещаются
                         в файле листинга в 20 колонок.

         Пример:         %BIN 12





         TASM2 #4-5/Док               = 96 =

                                         CATSTR                                
         -----------------------------------------------------------------

         Назначение:     Объединяет несколько строк в одну строку

         Режим:          MASM51, Ideal

         Синтаксис:      имя CATSTR строка[,строка]...

         Замечания:      Имя - данное значение, состоящее из идентификато-
                         ров каждой строки, объединенных в одну строку.

                         Каждая строка может быть одной из следующих:

                         - строковый аргумент, заключенный в угловые скоб-
                         ки, подобно 

                         - заранее определенный текстовый макро

                         - числовое строковое  замещение,  начинающееся  с
                         процента (%)

         См.также:       SUBSTR, INSTR, SIZESTR

         Пример:         LETTER CATSTR ,;LETTER="abcdef"

                                         .CODE                                 
         -----------------------------------------------------------------

         Назначение:     Определяет начало сегмента кода

         Режим:          MASM

         Синтаксис:      .CODE [имя]

         Замечания:      Директива .CODE указывает начало выполняемого ко-
                         да в вашем модуле. Сначала вы должны использовать
                         директиву .MODEL для определения типа памяти. Ес-
                         ли вы определили тип памяти как средняя или боль-
                         шая, дальше   вы  можете  использовать  директиву
                         .CODE с параметром "имя",  определяющим имя  сег-
                         мента.  Таким образом,  вы можете иметь несколько
                         сегментов кода, задавая им различные имена.

                         Вы можете иметь в вашем  исходном  файле  столько

         TASM2 #4-5/Док               = 97 =

                         директив .CODE,  сколько захотите.  Все различные
                         куски с одним и тем же именем будут скомбинирова-
                         ны  в  один  сегмент кода так же,  как если бы вы
                         ввели весь код одним  куском  после  единственной
                         директивы .CODE.

                         Использование директивы  .CODE позволяет вам свя-
                         зать регистр CS с  текущим  сегментом  кода.  Это
                         имеет такое же действие, как если бы вы размещали
                         данную директиву в  вашем  исходном  файле  после
                         каждой директивы .CODE:

                         ASSUME CS:@code

         См.также:       CODESEG, .DATA, .FARDATA, FARDATA?, .MODEL,.STACK

         Пример:         .CODE         ;сегмент кода
                         mov al,x
                         .DATA         ;переключение на сегмент
                         x DB ?        ;данных





         TASM2 #4-5/Док               = 98 =

                                                                               
         CODESEG
         -----------------------------------------------------------------

         Назначение:     Определяет начало сегмента кода

         Режим:          MASM, Ideal

         Замечания:      CODESEG является тем же самым, что и .CODE

         См.также:       .CODE, .DATA, .FARDATA, .MODEL, .STACK


                                          COMM                                 
         -----------------------------------------------------------------

         Назначение:     Определяет общую переменную

         Режим:          MASM, Ideal

         Синтаксис:      COMM определение[,определение]...

         Замечания:      Каждое определение описывает идентификатор и име-
                         ет следующий формат:

                         [distance][language] name[[count1]]:tyрe[:count2]

                         distance является необязательным и может быть ли-
                         бо NEAR, либо FAR. Он определяет располагается ли
                         общая   переменная   в   области  ближних  данных
                         (DGROUP) или же в сегменте с дальним вызовом. Ес-
                         ли вы не определяете distance, он будет определен
                         по умолчанию и будет иметь формат для  определен-
                         ного по умолчанию типа памяти. Если вы не исполь-
                         зуете директивы сегментации  (.MODEL  и  т.д.)  -
                         форматом  по умолчанию будет NEAR.  Для очень ма-
                         лой, малой и средней памяти определенным по умол-
                         чанию форматом будет также NEAR. Для всех осталь-
                         ных типов памяти - FAR.

                         language принимает одно из значений - C,  PASCAL,
                         BASIC, FORTRAN, PROLOG или NOLANGUAGE и определя-
                         ет  любые  языковые согласования применяемых сим-
                         вольных имен.  Использование указания языка в ди-
                         рективе COMM временно переопределяет текущую язы-
                         ковую установку (по  умолчанию  или  определенную

         TASM2 #4-5/Док               = 99 =

                         директивой  .MODEL).  Заметьте,  что вам не нужно
                         иметь директиву .MODEL для  использования  данной
                         возможности.

                         name - идентификатор, который должен быть общим и
                         размещаться во время  компоновки.  Если  distance
                         FAR,  то  name  может  быть  также определено как
                         массив элементов множественного размера, включен-
                         ного в общую область:

                         name [multiрlier]

                         tyрe может быть одним из следующих:  BYTE,  WORD,
                         DATAPTR,  CODEPTR,  DWORD,  FWORD,  PWORD, QWORD,
                         TBYTE или структурное имя.

                         count указывает  сколько определяется общедоступ-
                         ных идентификаторов. Общее пространство, отведен-
                         ное  под  общую переменную,  определяется длиной,
                         задающейся tyрe, учитывая размер массива (если он
                         присутствует).

                         Вы можете определить более чем один общий иденти-
                         фикатор, разделяя определения запятыми.

                         Общие переменные размещаются компоновщиком.

                         В режиме MASM общие  идентификаторы,  объявленные
                         вне любого сегмента, могут быть досягаемыми через
                         регистр DS,  который не всегда может быть  принят
                         как действующий. Убедитесь, что вы либо помещаете
                         правильное значение в регистр  сегмент  DS,  либо
                         используете  точное сегментное смещение при обра-
                         щении к этим переменным.  В  режиме  Ideal  Турбо
                         ассемблер проверяет, правильно ли адресуема общая
                         переменная,  используя некоторые из текущих  сег-
                         ментных   регистров,   как  описано  в  директиве
                         ASSUME.

                         Общие переменные  не могут быть инициализированы.
                         Используйте директиву GLOBAL, если желаете иници-
                         ализировать параграфы данных, которые разделяются
                         между модулями.  Компоновщик также не гарантирует
                         размещение  общих  переменных в некоторых частных
                         случаях,  таким образом,  вы  не  можете  сделать
                         присвоения параграфам данных,  размещенных дирек-

         TASM2 #4-5/Док              = 100 =

                         тивой COMM в последующих строках, исходного текс-
                         та.

         См.также:       EXTRN, GLOBAL, PUBLIC, PUBLICDLL

         Пример:         COMM buffer:BYTE:512 ;размещается во время
                                              ;компоновки
                         COMM FAR abc[41]:BYTE:10    ;410 байт (10
                                                     ;элементов по 41
                                                     ;байту) размещаются
                                                     ;во время компоновки





         TASM2 #4-5/Док              = 101 =

                                                                               
         COMMENT
         -----------------------------------------------------------------

         Назначение:     Начинает блок комментария

         Режим:          MASM

         Синтаксис:      COMMENT разграничитель [текст]
                         [текст]
                         [текст] разграничитель

         Замечания:      COMMENT игнорирует  весь  текст,  располагающийся
                         между  первым  символом-ограничителем  и строкой,
                         содержащей следующий  ограничитель. Ограничителем
                         является  первый  символ  (кроме  пробела)  после
                         директивы COMMENT

         Пример:         COMMENT *
                         любой текст
                         *

                                                                               
         %CONDS
         -----------------------------------------------------------------

         Назначение:     Показывает все параметры в условных блоках в лис-
                         тинге

         Режим:          MASM, Ideal

         Синтаксис:      %CONDS

         Замечания:      %CONDS является определенным по умолчанию режимом
                         листинга в случае,  если вы не используете дирек-
                         тивы управления листингом (такие как .LFCOND)

         См.также:       %NOCONDS, .LFCOND, .SFCOND, .TFCOND

         Пример:         %CONDS
                         IF 0
                            mov ax,1
                         ENDIF




         TASM2 #4-5/Док              = 102 =

                                         .CONST                                
         -----------------------------------------------------------------

         Назначение:     Определяет сегмент постоянных данных

         Режим:          MASM

         Синтаксис:      .CONST

         Замечания:      Директива .CONST определяет начало сегмента вашей
                         программы,  содержащего  постоянные данные (конс-
                         танты).  Это  данные,   необходимые   для   вашей
                         программы,  которые  не  могут  быть  изменены во
                         время исполнения программы.  В данном сегменте вы
                         можете  размещать  такие  вещи  как  подсказки  и
                         строковые сообщения.

                         Вы не должны использовать эту директиву при напи-
                         сании чисто ассемблерных программ.  Вы можете на-
                         писать процедуры, которые стыкуются с языками вы-
                         сокого   уровня   и   затем  используют  это  для
                         инициализации постоянных данных

         См.также:       .CODE, .DATA, .DATA?, .FARDATA, .FARDATA?,
                         .MODEL

         Пример:         .CONST
                         msg DB "Выполнение прекращено"




         TASM2 #4-5/Док              = 103 =

                                                                               
         CONST
         -----------------------------------------------------------------

         Назначение:     Определяет сегмент постоянных данных

         Режим:          MASM, Ideal

         См.также:       .CODE, .CONST,  .DATA,  .DATA?,  .FARDATA,
                         .FARDATA?

                                         .CREF                                 
         -----------------------------------------------------------------

         Назначение:     Делает возможным  создание  листинга перекрестных
                         ссылок

         Режим:          MASM

         Синтаксис:      .CREF

         Замечания:      .CREF позволяет накапливать информацию перекрест-
                         ных ссылок  для  всех  идентификаторов  исходного
                         файла, начиная с данного места. Эта директива из-
                         меняет   действие   на  противоположное  директив
                         %XCREF или . XCREF, которые запрещают сбор инфор-
                         мации о перекрестных ссылках.

                         По умолчанию  Турбо  ассемблер  использует данный
                         режим в случае, если вы не используете какие-либо
                         директивы  управления перекрестными ссылками (та-
                         кие как %CREF).

                         Турбо ассемблер включает информацию о  перекрест-
                         ных  ссылках  в файл листинга,  также как и в от-
                         дельный .XRF файл.

         См.также:       %CREF




         TASM2 #4-5/Док              = 104 =

                                                                               
         %CREF
         -----------------------------------------------------------------

         Назначение:     Делает возможным  создание  листинга перекрестных
                         ссылок

         Режим:          MASM, Ideal

         Синтаксис:      %CREF

         См.также:       %NOCREF, .CREF, .XCREF, %CREFALL, %CREFREF,
                         %CREFUREF

         Пример:         %CREF
                         wval DW 0         ;CREF показывает WVAL,
                                           ;определенное здесь

                                        %CREFALL                               
         -----------------------------------------------------------------

         Назначение:     Вносит все идентификаторы в  список  перекрестных
                         ссылок

         Режим:          MASM, Ideal

         Синтаксис:      %CREFALL

         Замечания:      %CREFALL изменяет   действие  на  противоположное
                         директив  %CREFREF  и  %CREFUREF,  использованных
                         ранее, которые делали невозможным создание списка
                         ссылочных и  нессылочных  идентификаторов.  После
                         использования %CREFALL  все последующие идентифи-
                         каторы из исходного файла появятся в  списке  пе-
                         рекрестных ссылок.

                         Турбо ассемблер использует данный режим по  умол-
                         чанию  при ассемблировании вашего исходного файла

         См.также:       %CREFREF, %CREFUREF

         Пример:         %CREFREF
                         arg1 equ [bр+4];не ссылочный, не будет при-
                                        ;сутствовать в списке
                         %CREFALL
                         arg2 equ [bр+6];не ссылочный, появляется

         TASM2 #4-5/Док              = 105 =

                                        ;везде
                         arg3 equ [bр+8];ссылочный, появляется в
                                        ;списке
                         mov ax,arg3
                         END


                                        %CREFREF                               
         -----------------------------------------------------------------

         Назначение:     Делает невозможным появление нессылочных  иденти-
                         фикаторов в списке перекрестных ссылок

         Режим:          MASM,Ideal

         Синтаксис:      %CREFREF

         Замечания:      %CREFREF  означает,  что идентификаторы,  которые
                         были определены,  но на которые нет ссылок, будут
                         исключены из списка перекрестных ссылок.  Обычно,
                         при вызове вами перекрестных ссылок, данные иден-
                         тификаторы появляются в таблице идентификаторов

         См.также:       %CREF, %CREFUREF, %CREFALL

         Пример:         %CREFREF
                         ABC EQU 4   ;не появится в списке CREF
                         xyz EQU 1   ;появится в списке
                         mov ax,xyz  ;служит причиной появления
                                     ;XYZ в списке
                         END




         TASM2 #4-5/Док              = 106 =

                                       %CREFUREF                               
         -----------------------------------------------------------------

         Назначение:     Вносит в список  перекрестных  ссылок  только  не
                         ссылочные идентификаторы

         Режим:          MASM, Ideal

         Синтаксис:      %CREFUREF

         Замечания:      %CREFUREF делает возможным занесение не ссылочных
                         идентификаторов в таблицу идентификаторов  перек-
                         рестных ссылок. При использовании данной директи-
                         вы в  таблице  идентификаторов  будут  появляться
                         только не ссылочные идентификаторы. Для просмотра
                         как не ссылочных идентификаторов,  так и  ссылоч-
                         ных, используйте директиву %CREFALL

         См.также:       %CREFALL, %CREFREF

         Пример:         %CREF
                         abc EQU 2     ;не появляется в списке
                         %CREFUREF
                         def EQU 1     ;появляется в списке
                         END



         TASM2 #4-5/Док              = 107 =

                                                                               
         %CTLS
         -----------------------------------------------------------------

         Назначение:     Печатает список управлений

         Режим:          MASM, Ideal

         Синтаксис:      %CTLS

         Замечания:      %CTLS вызывает включение в список расположенных в
                         файле  листинга  директив  управления  (таких как
                         %LIST,  %INCL и т.д.); обычно они включены в спи-
                         сок.  Данная  директива  имеет действие над всеми
                         последующими строками. Таким образом, сама дирек-
                         тива %CTLS не будет появляться в файле листинга

         См.также:       %NOCTLS

         Пример:         %CTLS
                         %NOLIST     ;данная директива будет при-
                                     ;сутствовать в файле листинга


         TASM2 #4-5/Док              = 108 =

                                         .DATA                                 
         -----------------------------------------------------------------

         Назначение:     Определяет начало сегмента данных

         Режим:          MASM

         Синтаксис:      .DATA

         Замечания:      Директива .DATA  сигнализирует о начале инициали-
                         зированных данных  в  вашем  модуле.  Сначала  вы
                         должны использовать  директиву .MODEL для опреде-
                         ления типа памяти.

                         Вы можете использовать в исходном  файле  столько
                         директив .DATA,  сколько пожелаете. Все различные
                         части будут объединены в один сегмент данных точ-
                         но  также,  как если бы вы ввели все данные сразу
                          е вслед за единственной директивой .DATA.

                         Сегмент данных  включается  в  группу,  названную
                         DGROUP,  которая также содержит сегменты, опреде-
                         ленные директивами .STACK, .CONST и .DATA?. Вы
                         моете иметь доступ к данным любого из этих
                         сегментов, убедившись, что один из сегментных
                         регистров указывает на DGROUP.

                         Для получения   полной  информации  о  сегментных
                         атрибутах для сегмента данных, смотрите директиву
                         .MODEL.

         См.также:       .CODE, .CONST, .DATA?, DATASEG, .FARDATA,
                         .FARDATA?, .MODEL, .STACK

         Пример:         .DATA
                         array1 DB 100 DUP(0) ;NEAR инициализация
                                              ;данных




         TASM2 #4-5/Док              = 109 =

                                         .DATA?                                
         -----------------------------------------------------------------

         Назначение:     Определяет начало  неинициализированного сегмента
                         данных

         Режим:          MASM

         Синтаксис:      .DATA?

         Замечания:      Директива .DATA?  сообщает  о  начале неинициали-
                         зированных данных  в  вашем  модуле.  Сначала  вы
                         должны использовать  директиву .MODEL для опреде-
                         ления типа памяти.

                         Неинициализированные данные создаются использова-
                         нием оператора DUP с символом ?. Например :

                         DB 6 DUP(?)

                         Вы не  должны  использовать  данную директиву при
                         написании чисто ассемблерных программ.  Она пред-
                         назначена для написания процедур,  являющихся ин-
                         терфейсами с языками высокого  уровня  и  в  этих
                         случаях   используется  для  неинициализированных
                         данных.

                         Вы можете использовать в исходном  файле  столько

         TASM2 #4-5/Док              = 110 =

                         директив .DATA?, сколько пожелаете. Все различные
                         части будут объединены в один сегмент данных точ-
                         но  также,  как если бы вы ввели все данные сразу
                         же за единственной директивой .DATA.

                         Сегмент неинициализированных данных  включается в
                         группу,  названную DGROUP, которая также содержит
                         сегменты, определенные директивами .STACK, .CONST
                         и .DATA.

                         Для получения   полной  информации  о  сегментных
                         атрибутах для сегмента данных  смотрите директиву
                         .MODEL

         См.также:       .CODE, .CONST, .DATA, .FARDATA, .FARDATA?,
                         .MODEL, .STACK

         Пример:         .DATA?
                         temр DD  4  DUP(?)   ;неинициализированные
                                              ;данные




         TASM2 #4-5/Док              = 111 =

                                                                               
         DATASEG
         -----------------------------------------------------------------

         Назначение:     Определяет начало сегмента данных

         Режим:          MASM, Ideal

         Синтаксис:      DATASEG

         Замечания:      DATASEG - это то же, что и .DATA. Данная директи-
                         ва должна использоваться только в режиме Ideal

         См.также:       .CODE, .CONST,  .DATA,  .DATA?,  .FARDATA,
                         .FARDATA?, .MODEL, .STACK

                                           DB                                  
         -----------------------------------------------------------------

         Назначение:     Размещает байтовую память

         Режим:          MASM, Ideal

         Синтаксис:      [имя] DB выражение [,выражение]...

         Замечания:      Имя - это идентификатор, который в последствии вы
                         можете использовать для ссылки на данные. Если вы
                         не укажете имя,  данные будут размещены, но вы не
                         сможете ссылаться на них, используя символическое
                         имя.

                         Каждое выражение размещает один или  более байтов
                         и может быть одним из приведенных ниже:

                         - константа, принимающая значение в промежутке от
                           -128 до 255

                         - знак вопроса, означающий неопределенный инициа-
                           лизированный идентефикатор;  резервирует память
                           без задания определенного значения

                         - символьная строка,  состоящая из одного или бо-
                           лее символов

                         - повторяющееся    выражение   с   использованием
                           оператора DUP.

         TASM2 #4-5/Док              = 112 =


         См.также:       DD, DF, DP, DQ, DT, DW

         Пример:         fibs DB 1,1,2,3,5,8,13
                         but  DB 80 DUP(?)
                         msg  DB "Введите значение :"




         TASM2 #4-5/Док              = 113 =

                                           DD                                  
         -----------------------------------------------------------------

         Назначение:     Размещает двойное слово

         Режим:          MASM, Ideal

         Синтаксис:      [имя] DD [тип PTR] выражение [,выражение]...

         Замечания:      имя - это идентификатор,  который впоследствии вы
                         можете использовать для ссылки на данные. Если вы
                         не укажете имя,  данные будут размещены, но вы не
                         сможете ссылаться на них, используя символическое
                         имя.

                         Тип со следующим после него PTR является необяза-
                         тельным. Это добавляет  отладочную  информацию  о
                         идентификаторе, таким образом, Турбо Отладчик мо-
                         жет отобразить его содержимое. Данное средство не
                         имеет никакого действия с данными, генерированны-
                         ми Турбо ассемблером.  Тип может  быть  одним  из
                         следующих :  BYTE,  WORD,  DWORD,  FWORD,  PWORD,
                         QWORD, TBYTE, DATAPTR, CODEPTR, SHORT, NEAR, FAR,
                         или именем структуры. Например :

                         рerson STRUC
                         name   db 32 duр(?)
                         age    dw ?
                         рerson ENDS
                         pptr   dd рerson рtr 0 ;PTR - дальняя ссыл-
                                                ;ка на структуру

                         Каждое выражение размещает одно или более двойных
                         слов  (4 байта) и может быть одним из приведенных
                         ниже:

                         - константа, принимающая значение в промежутке от
                           -2,147,483,648 до 4,294,967,295

                         - короткое (32 бита) число с плавающей точкой

                         - знак вопроса, означающий неопределенный инициа-
                           лизированный идентификатор;  резервирует память
                           без задания определенного значения

                         - адрес  выражения,  определяющий дальний адрес в

         TASM2 #4-5/Док              = 114 =

                           16-битовом  сегменте   (сегмент:смещение)   или
                           ближний адрес в 32-битовом сегменте (только 32-
                           битовое смещение)

                         - повторяющееся   выражение   с    использованием
                           оператора DUP.

         См.также:       DB, DF, DP, DQ, DT, DW

         Пример:         Data32 SEGMENT USE32
                         xarray DB 0,1,2,3
                         Data32 ENDS
                         Data   SEGMENT
                         Consts DD 3.141,2.718 ;константа с плаваю-
                                               ;щей точкой
                         DblPtr DD consts      ;16-битовый дальний
                                               ;указатель
                         NrPtr  DD xarray      ;32-битовый ближний
                                               ;указатель
                         BigInt DD 12345678    ;длинное целочислен-
                                               ;ное
                         Darray DD 4 DUP(1)    ;4 целочисленных




         TASM2 #4-5/Док              = 115 =

                                         %DEPTH                                
         -----------------------------------------------------------------

         Назначение:     Устанавливает в файле листинга поле уровня

         Режим:          MASM, Ideal

         Синтаксис:      %DEPTH ширина

         Замечания:      Ширина определяет  количество  колонок файла лис-
                         тинга, отводимых под поле уровня вложенности. По-
                         ле уровня индицирует уровень вложенности для фай-
                         лов INCLUDE и  макрорасширений.  Если  вы  задали
                         ширину  равную 0,  то данное поле будет исключено
                         из файла листинга.  Обычно, вам нет необходимости
                         определять  ширину  более 2,  т.к.  в этом случае
                         можно отобразить до 99 уровней без усечения.

                         Значение по умолчанию  для  ширины  данного  поля
                         определено равное 1 колонке

         Пример:         %DEPTH 2   ;отображает уровень вложенности
                                    ;>9

                                           DF                                  
         -----------------------------------------------------------------

         Назначение:     Размещает дальний 48-битовый (6  байт) указатель
                         на данные

         Режим:          MASM, Ideal

         Синтаксис:      [имя] DF [тип PTR] выражение[,выражение]...

         Замечания:      Имя - это идентификатор,  который впоследствии вы
                         можете использовать для ссылки на данные. Если вы
                         не укажете имя,  данные будут размещены, но вы не
                         сможете ссылаться на них, используя символическое
                         имя.

                         Тип, со следующим после него PTR, является необя-
                         зательным. Это добавляет отладочную информацию об
                         идентификаторе,  таким образом Турбо Отладчик мо-
                         жет отображать его содержимое. Данное средство не
                         имеет никакого действия с данными, генерированны-

         TASM2 #4-5/Док              = 116 =

                         ми Турбо ассемблером.  Тип может  быть  одним  из
                         следующих :  BYTE,  WORD,  DWORD,  FWORD,  PWORD,
                         QWORD, TBYTE, DATAPTR, CODEPTR, SHORT, NEAR, FAR,
                         или именем структуры. Например:

                         рerson STRUC
                         mane   db 32 duр(?)
                         age    dw ?
                         рerson ENDS
                         DATA SEGMENT USE32
                         pptr   df рerson рtr 0;PPTR- это дальний
                                               ;32-разрядный ука-
                                               ;затель на структуру

                         Каждое выражение   размещает   один   или   более
                         48-разрядных дальних указателей (6 байт)  и может
                         быть одним из следующих :

                         - константа, принимающая значение от
                           -140,737,488,355,328 до 281,474,976,710,655

                         - знак  вопроса  (?),  означающий  неопределенный
                           инициализированный идентификатор;   резервирует
                           память без задания определенного значения

                         - адрес  выражения,  определяющий дальний адрес в
                           48-битовом сегменте (сегмент:48- битовое смеще-
                           ние)

                         - повторяющееся выражение с использованием опера-
                           тора DUP.

                         Данная директива может работать только с  процес-
                         сором 80386

         См.также:       DB, DD, DP, DQ, DT, DW

         Пример:               .386
                         Data  SEGMENT USE32
                         Msg   DB   "Все сделано"
                         FmPtr DF   MSG          ;FAR указатель на MSG
                         Data  ENDS



         TASM2 #4-5/Док              = 117 =

                                        DISPLAY                                
         -----------------------------------------------------------------

         Назначение:     Выводит на экран строку, взятую в кавычки

         Режим:          Ideal

         Синтаксис:      DISPLAY "текст"

         Замечания:      Текстом является любое сообщение,  которое вы хо-
                         тите  отобразить на дисплее;  сообщение вы должны
                         заключить в кавычки (" "). Сообщение выводится на
                         стандартное устройство вывода,  которым,  обычно,
                         является экран. При желании, вы сможете использо-
                         вать  средства  DOS  для  изменения направления и
                         послать выводимую информацию, предназначенную для
                         дисплея, в файл.

                         Наряду с  другими вещами,  вы можете использовать
                         данную директиву для выдачи вам информации о  ге-
                         нерации,  секционировании, условиях ассемблирова-
                         ния.

         См.также:       %OUT

         Пример:         DISPLAY "Ассемблирование процедур EGA интерфейса"



         TASM2 #4-5/Док              = 118 =

                                         DOSSEG                                
         -----------------------------------------------------------------

         Назначение:     Делает возможным размещение сегмента DOS во время
                         компоновки

         Режим:          MASM, Ideal

         Синтаксис:      DOSSEG

         Замечания:      Обычно DOSSEG используется совместно с директивой
                         .MODEL, которая устанавливает упрощенные директи-
                         вы сегментации. DOSSEG сообщает компоновщику, что
                         располагать сегменты в вашей программе нужно  та-
                         ким  образом,  как  их  располагает язык высокого
                         уровня.  Вы  должны  использовать  эту  директиву
                         только в том случае, если вы пишете отдельные ас-
                         семблерные программы и тогда вам  необходимо  ис-
                         пользовать директиву DOSSEG однократно в основном
                         модуле,  которая определяет стартовый адрес вашей
                         программы.

                         В выполняемой  программе сегменты располагаются в
                         следующем порядке :

                         1.Все сегменты,  которые принадлежат к  классу  с
                           именем 'CODE'

                         2.Все сегменты,  не принадлежащие к классу с име-
                           нем 'CODE' и не  состоящие  в  групповом  имени
                           DGROUP

                         3.Все сегменты,  входящие  в  DGROUP  в следующем
                           порядке:

                           a.Все сегменты, принадлежащие к классу с именем
                             'BEGDATA'

                           b.Все сегменты,  не  принадлежащие  к классам с
                             именами 'BEGDATA', 'BSS' или 'STACK'

                           c.Все сегменты, принадлежащие к классу с именем
                             'BSS'

                           d.Все сегменты, принадлежащие к классу с именем
                             'STACK'

         TASM2 #4-5/Док              = 119 =


         См.также:       .MODEL

         Пример:         DOSSEG
                         .MODEL medium


                                                                               
         DP
         -----------------------------------------------------------------

         Назначение:     Размещает дальний  48-битовый  указатель (6 байт)
                         на область данных

         Режим:          MASM, Ideal

         См.также:       DB, DD, DF, DQ, DT, DW





         TASM2 #4-5/Док              = 120 =

                                           DQ                                  
         -----------------------------------------------------------------

         Назначение:     Размещает 4 слова (8 байт) области данных

         Режим:          MASM, Ideal

         Синтаксис:      [имя] DQ выражение[,выражение]...

         Замечания:      Имя - это идентификатор,  который впоследствии вы
                         можете использовать для ссылки на данные. Если вы
                         не укажете имя,  данные будут размещены, но вы не
                         сможете ссылаться на них, используя символическое
                         имя.

                         Каждое выражение размещает одну группу из  4 слов
                         (8  байт) или более и может быть одним из следую-
                         щих :

                         - постоянное выражение, принимающее значение от -
                           2^63 до 2^64 - 1.

                         - длинное число (64 бита) с плавающей точкой.

                         - знак  вопроса  (?),  означающий  неопределенный
                           инициализированный  идентификатор;  резервирует
                           память без задания определенного значения.

                         - повторяющееся    выражение   с   использованием
                           оператора DUP

         См.также:       DB, DD, DF, DP, DT, DW

         Пример:         HugInt DQ 314159265258979323
                         BigFit DQ 1.2345678987654321
                         Qarray DQ 10DUP(?)




         TASM2 #4-5/Док              = 121 =

                                           DT                                  
         -----------------------------------------------------------------

         Назначение:     Размещает 10-байтовую область данных

         Режим:          MASM, Ideal

         Синтаксис:      [имя] DT выражение[,выражение]...

         Замечания:      Имя - это идентификатор,  который впоследствии вы
                         можете использовать для ссылки на данные. Если вы
                         не укажете имя,  данные будут размещены, но вы не
                         сможете ссылаться на них, используя символическое
                         имя.

                         Каждое выражение размещает одну или более 10-бай-
                         товую область данных и может быть одним из следу-
                         ющих :

                         - упакованная десятичная  константа,  принимающая
                           значение от 0 до 99,999,999,999,999,999,999

                         - знак  вопроса  (?),  означающий  неопределенный
                           инициализированный  идентификатор;  резервирует
                           память без задания определенного значения.

                         - повторяющееся    выражение   с   использованием
                           оператора DUP

         См.также:       DB, DD, DF, DP, DQ, DW

         Пример:         PakNum  DD 123456       ;упакованное 10-ное
                         TemрVal DD 0.0000000001 ;высокоточное FP




         TASM2 #4-5/Док              = 122 =

                                           DW                                  
         -----------------------------------------------------------------

         Назначение:     Размещает данные размером в слово (2 байта)

         Режим:          MASM, Ideal

         Синтаксис:      [имя] DW [тип PTR] выражение[,выражение]...

         Замечания:      Имя - это идентификатор,  который впоследствии вы
                         можете использовать для ссылки на данные. Если вы
                         не укажете имя,  то данные будут размещены, но вы
                         не сможете ссылаться на них,  используя  символи-
                         ческое имя.

                         Тип со следующим после него PTR является необяза-
                         тельным.  Это добавляет отладочную информацию  об
                         идентификаторе, таким образом, Турбо Отладчик мо-
                         жет отображать его содержимое. Данное средство не
                         имеет никакого действия с данными, генерированны-
                         ми Турбо ассемблером.  Тип может  быть  одним  из
                         следующих :  BYTE,  WORD,  DWORD,  FWORD,  PWORD,
                         QWORD,  TBYTE, DATAPTR, CODEPTR, SHORT, NEAR, FAR
                         или именем структуры. Например :

                           narray dw 10duр(?)
                           nрtr   dw word рtr narray; nрtr- ближняя
                                                    ; ссылка на
                                                    ; слово

                         Каждое выражение размещает одно или более слов (2
                         байта) и может быть одним из следующих :

                         - константа,  принимающая значение от  -32768  до
                           65536.

                         - знак  вопроса  (?),  означающий  неопределенный
                           инициализированный  идентификатор;  резервирует
                           память без задания определенного значения.

                         - адрес  выражения,  определяющий ближний адрес в
                           16-битовом сегменте (только смещение).

                         - повторяющееся   выражение   с    использованием
                           оператора DUP


         TASM2 #4-5/Док              = 123 =

         См.также:       DB, DD, DF, DP, DQ, DT

         Пример:         int   DW 12345
                         wbuf  DW 6 DUP(?); буфер из 6 слов
                         wрtr  DW Wbuf    ; смещение-ссылка на wbuf

                                          ELSE                                 
         -----------------------------------------------------------------

         Назначение:     Начало блока альтернативного условия

         Режим:          MASM, Ideal

         Синтаксис:      IF условие
                         операторы 1
                         [ELSE
                         операторы 2]
                         ENDIF

         Замечания:      Операторы, следующие  за  ELSE,  ассемблируются в
                         том случае,  если условие, связанное с IF, прини-
                         мает  значение "ложь".  Таким образом,  будет ас-
                         семблировано одно из двух: либо операторы 1, либо
                         операторы 2.

                         Директива ELSE всегда составляет пару предшеству-
                         ющей ей директиве IF, которая не всегда использу-
                         ется в паре с директивой ELSE. Каждый блок IF мо-
                          ет иметь более чем один блок ELSE. В этом случае
                         значение  условия переключается каждый раз, когда
                         встречается ELSE. Например :

                           IF1
                           ;это ассемблируется
                           ELSE
                           ;это не ассемблируется
                           ELSE
                           ;это ассемблируется
                           ENDIF

         См.также:       ENDIF, IF,  IF1,  IF2,  IFB, IFDEF, IFDIF,
                         IFDIFS, IFE, IFLOW, IFIDNI, IFNB, IFNDEF

         Пример:         IF LargeModel EQ 1
                          les di,addr

         TASM2 #4-5/Док              = 124 =

                         ELSE
                          lea di,addr
                         ENDIF

                                         ELSEIF                                
         -----------------------------------------------------------------

         Назначение:     Начинает вставляемый блок условия ассемблирования
                         в случае,  если выражение принимает значение "ис-
                         тина"

         Режим:          MASM, Ideal

         Синтаксис:      ELSEIF выражение

         Замечания:      Выражение должно  быть  константой и не может со-
                         держать какую-либо опережающую ссылку на имя сим-
                         вола.  Если  выражение принимает ненулевое значе-
                         ние,  операторы  внутри   блока   условия   будут
                         ассемблироваться все время, пока условие предыду-
                         щей директивы (IF и т.д.) ELSEIF не примет значе-
                         ние "ложь".

                         Вы можете иметь несколько директив ELSEIF в блоке
                         условия.  Как только встретится  ELSEIF,  имеющее
                         выражение со значением "истина",  блок кода будет
                         ассемблирован,  а все остальные части блока усло-
                         вия,  определенные  ELSEIF  или  ELSE,  останутся
                         обойденными. Вы можете смешивать различные дирек-
                         тивы ELSE** в одном и том же блоке условия

         См.также:       ELSEIF1, ELSEIF2,   ELSEIFB,    ELSEIFDEF,
                         ELSEIFDIF, ELSEIFDIFI, ELSEIFE, ELSEIFIDN,
                         ELSEIFIDNI, ELSEIFNB, ELSEIFNDEF

         Пример:         IF ARGSIZE EQ 1
                            mov al,arg
                         ELSEIF ARGSIZE EQ 2
                            mov ax,arg
                         ELSE
                            %OUT BAD ARGSIZE
                         ENDIF

                                          EMUL                                 

         TASM2 #4-5/Док              = 125 =

         -----------------------------------------------------------------

         Назначение:     Генерирует эмулированные  инструкции сопроцессора

         Режим:          MASM, Ideal

         Синтаксис:      EMUL

         Замечания:      Турбо ассемблер    обычно   генерирует   истинные
                         инструкции с плавающей точкой, которые выполняют-
                         ся процессорами 80х87.  Используйте EMUL,  если в
                         вашей программе установлена  поддержка  плавающей
                         точки.  EMUL имеет тот же эффект, что и задание в
                         командной строке параметра /е.  Вы можете  комби-
                         нировать  EMUL  с NOEMUL при желании генерировать
                         истинные инструкции с плавающей  точкой  в  одной
                         части  файла  и  эмулировать  инструкции в другой
                         части

         См.также:       NOEMUL

         Пример:         Finit     ; инструкции сопроцессора 8087
                         EMUL
                         Fsave buf ; эмулированная инструкция




         TASM2 #4-5/Док              = 126 =

                                          END                                  
         -----------------------------------------------------------------

         Назначение:     Отмечает конец исходного файла

         Режим:          MASM, Ideal

         Синтаксис:      END [начальный адрес]

         Замечания:      Начальный  адрес  -  необязательный идентификатор
                         или выражение,  которое определяет адрес в  вашей
                         программе, и с которого вы хотите начать выполне-
                         ние.  Если ваша программа компонуется из несколь-
                         ких  исходных  файлов,  то только один файл может
                         содержать начальный адрес.  Стартовый адрес может
                         быть  адресом внутри модуля;  он может быть также
                         внешним идентификатором,  определенным  в  другом
                         модуле, объявленном в директиве EXTRN.

                         Турбо ассемблер  игнорирует  любой  текст   после
                         директивы END в исходном файле

         Пример:         .MODEL SMALL
                         .CODE
                         Start:
                         ;тело программы
                         END Start      ; точкой входа в программу
                                        ; является Start
                         Данная строка игнорируется

                                         ENDIF                                 
         -----------------------------------------------------------------

         Назначение:     Отмечает конец блока условий ассемблирования

         Режим:          MASM, Ideal

         Синтаксис:      IF условие
                         операторы
                         ENDIF

         Замечания:      Все блоки  условий  ассемблирования  начинаются с
                         директив IF**** и должны  оканчиваться директивой
                         ENDIF.  Вы  можете иметь вложенность блоков IF до
                         255 уровней

         TASM2 #4-5/Док              = 127 =


         См.также:       ELSE, IF,  IF1,  IF2,  IFB,  IFDEF, IFDIF,
                         IFDIFI, IFE, IFIDN, IFIDNS, IFNB, IFNDEF

         Пример:         IF DebugMode ; ассемблирование продолжает-
                                      ; ся в случае, если DebugMode
                                      ; отлично от 0
                         mov ax,0
                         call DebugDumр
                         ENDIF

                                                                               
         ENDM
         -----------------------------------------------------------------

         Назначение:     Сообщает о конце блока повторения или макро

         Режим:          MASM, Ideal

         Синтаксис:      ENDM

         Замечания:      Директива ENDM определяет  конец  макрорасширения
                         или блока повторения

         См.также:       IRP, IRPC, MACRO, REPT

         Пример:         IRP reg,
                         рuch reg
                         ENDM




         TASM2 #4-5/Док              = 128 =

                                          ENDP                                 
         -----------------------------------------------------------------

         Назначение:     Определяет конец процедуры

         Режим:          MASM, Ideal

         Синтаксис:      Режим MASM :
                         [имя процедуры] ENDP

                         Режим Ideal :
                         ENDP [имя процедуры]

         Замечания:      Если вы используете имя процедуры, это должно со-
                         ответствовать имени  процедуры,  определенному  в
                         директиве PROC, начинающей определение процедуры.

                         Заметьте, что  в режиме Ideal параметр имя проце-
                         дуры следует после ENDP.

                         ENDP не генерирует инструкцию RET для  возврата в
                         место вызова процедуры,  которую вы должны помес-
                         тить сами

         См.также:       ARG, LOCAL, PROC

         Пример:         LoadIt PROC
                           ; Тело процедуры
                           ret
                         LoadIt ENDP




         TASM2 #4-5/Док              = 129 =

                                          ENDS                                 
         -----------------------------------------------------------------

         Назначение:     Отмечает конец  текущего сегмента или объединения

         Режим:          MASM, Ideal

         Синтаксис:      Режим MASM :
                         [имя сегмента] ENDS
                         [имя структуры] ENDS

                         Режим Ideal :
                         ENDS [имя сегмента]
                         ENDS [имя структуры]

         Замечания:      ENDS отмечает  конец  любого сегмента,  структуры
                         или объединения.  Если вы используете имя сегмен-
                         та,  оно  должно  соответствовать имени сегмента,
                         определенному   в   директиве   SEGMENT.   Также,
                         параметр  имя  структуры  должен  соответствовать
                         имени структуры, определенному в директивах STRUC
                         или UNION.

                         Заметьте, что в режиме Ideal параметр имя следует
                         после ENDS

         См.также:       SEGMENT, STRUC, UNION

         Пример:         DATA SEGMENT   ; начало сегмента данных
                         Barray DB 10 DUP(0)
                         DATA ENDS      ; конец сегмента данных

                         Stat STRUC
                         Mode DW ?
                         Ptr  DD ?
                         ENDS        ; конец определения структуры





         TASM2 #4-5/Док              = 130 =

                                          EQU                                  
         -----------------------------------------------------------------

         Назначение:     Задает строковое   приравнивание,   числовое  или
                         идентификатора

         Режим:          MASM

         Синтаксис:      имя EQU выражение

         Замечания:      Имя принимает  значение  вычисленного  выражения.
                         Имя  должно быть новым символическим именем,  ко-
                         торое не было определено ранее.  В режиме MASM вы
                         можете переопределить только идентификатор, кото-
                         рый был определен с использованием директивы EQU,
                         если он был первоначально определен как строковое
                         приравнивание.

                         В режиме  MASM  EQU  может  определять  три  типа
                         приравнивания:

                         - Идентификатор:  переопределяет  ключевые  слова
                           или мнемоники инструкций, а также позволяет вам
                           назначать  альтернативные имена для других сим-
                           волов, которые были вами определены.

                         - Выражение: Принимает значение константы или ад-
                           реса, похоже на использование директивы =.

                         - Строка:  выражение  сохраняется  как  текстовая
                           строка для замены в  дальнейшем  при  появлении
                           имени  в  выражении.  Когда  выражение не может
                           быть константой или адресом, оно воспринимается
                           как строковое выражение

         См.также:       =

         Пример:         BlkSize EQU 512
                         BufBlks EQU 4
                         BufSize EQU BlkSize*BufBlks
                         BufLen  EQU BufSize         ;идентификатор
                                                     ;для BUFSIZE
                         DoneMsg EQU <'Возврат в DOS'>




         TASM2 #4-5/Док              = 131 =

                                          .ERR                                 
         -----------------------------------------------------------------

         Назначение:     Вызывает сообщение об ошибке

         Режим:          MASM

         Синтаксис:      .ERR

         Замечания:      .ERR вызывает сообщение об  ошибке, встретившейся
                         в строке исходного файла.

                         Обычно вы  используете  данную  директиву  внутри
                         блока условия ассемблирования,  где она проверяет
                         на  удовлетворение условия во время ассемблирова-
                         ния

         См.также:       .ERR1, .ERR2,  .ERRE,  .ERRNZ,  .ERRNDEF,.ERRDEF,
                         .ERRB, .ERRNB,    .ERRIDN,   .ERRIDNI,   .ERRDIF,
                         .ERRDIFI

         Пример:         IF $ GT 400h
                            .ERR         ;сегмент слишком велик
                            %OUT Сегмент слишком велик
                         ENDIF

                                                                               
         ERR
         -----------------------------------------------------------------

         Назначение:     Вызывает сообщение об ошибке

         Режим:          MASM, Ideal

         Синтаксис:      ERR

         Замечания:      То же, что и .ERR

         См.также:       .ERR1, .ERR2,  ERRE,  .ERRNZ,  .ERRNDEF, .ERRDEF,
                         .ERRB, .ERRNB, .ERRIDN, .ERRIDNI, .ERRDIFI




         TASM2 #4-5/Док              = 132 =

                                         .ERR1                                 
         -----------------------------------------------------------------

         Назначение:     Вызывает сообщение об ошибке на шаге 1

         Режим:          MASM

         Синтаксис:      .ERR1

         Замечания:      Обычно  Турбо  ассемблер  является  однопроходным
                         ассемблером, и  факт  того,  что  .ERR1  вызывает
                         сообщение  на  шаге 1 означает,  что сообщение об
                         ошибке всегда будет выдаваться на шаге  ассембли-
                         рования.  Сообщение об ошибке появится на экране,
                         и в файле листинга, если он указан.

                         Если вы  используете  многопроходные  возможности
                         Турбо  ассемблера  (вызываемые переключателем ко-
                         мандной строки /m),  .ERR1  выдаст  сообщение  об
                         ошибке на первом шаге ассемблирования.

         См.также:       .ERR2

         Пример:         .ERR1


                                         .ERR2                                 
         -----------------------------------------------------------------

         Назначение:     Вызывает сообщение об ошибке на шаге 2

         Режим:          MASM

         Синтаксис:      .ERR2

         Замечания:      Обычно  Турбо  ассемблер  является  однопроходным
                         ассемблером, и  факт  того,  что  .ERR2  вызывает
                         сообщение на шаге 2 означает,  что  сообщение  об
                         ошибке фактически не будут выдаваться.  Зависящие
                         от прохода предупреждения будут создаваться,  од-
                         нако,  вы должны ожидать потенциально беспорядоч-
                         ного отчета.

                         Если вы  используете  многопроходные  возможности
                         Турбо  ассемблера  (вызываемые переключателем ко-

         TASM2 #4-5/Док              = 133 =

                         мандной строки /m),  .ERR2  выдаст  сообщение  об
                         ошибке  на  втором шаге ассемблирования.  Если вы
                         выбрали один проход с помощью /m1,  зависящие  от
                         прохода предупреждения будут вызываться.

         См.также:       .ERR1

         Пример:         .ERR2

                                         .ERRB                                 
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку в случае, если аргумент пуст

         Режим:          MASM

         Синтаксис:      .ERRB <аргумент>

         Замечания:      Вы всегда   используете  данный  аргумент  внутри
                         макро. Директива проверяет, был ли макро вызван с
                         непустым параметром. Если аргумент пуст, выдается
                         сообщение об ошибке в исходной строке,  в которой
                         был вызван макро.

                         Вы должны  аргумент  всегда  заключать  в угловые
                         скобки (<>)

         См.также:       .ERRNB

         Пример:         duble MACRO arg1
                           .ERRB 
                           shl arg1,1
                         ENDM


         TASM2 #4-5/Док              = 134 =

                                                                               
         .ERRDEF
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если идентификатор был определен

         Режим:          MASM

         Синтаксис:      .ERRDEF идентификатор

         Замечания:      .ERRDEF вызывает  сообщение  об ошибке в исходной
                         строке, если идентификатор уже  был  определен  в
                         вашем исходном файле

         См.также:       .ERRNDEF

         Пример:         SetMode MACRO ModeVal
                            .ERRDEF _MODE     ;ошибка, если уже
                                              ;определен
                         _MODE EQU ModeVal
                            ENDM

                                        .ERRDIF                                
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку,  если аргументы являются различ-
                         ными

         Режим:          MASM

         Синтаксис:      .ERRDIF <аргумент1>,<аргумент2>

         Замечания:      Вы всегда  используете  .ERRDIF   внутри   макро.
                         Директива проверяет,  являются ли аргументы иден-
                         тичными символьными строками.  Если две строки не
                         являются идентичными, выдается сообщение об ошиб-
                         ке в исходной строке, в которой макро вызывается.
                         Две  строки сравниваются символ за символом,  при
                         этом учитывается регистр (верхний или  нижний), в
                         котором набираются символы. Если вы хотите, чтобы
                         регистр  не  учитывался,  используйте   директиву
                         .ERRDIFI.

                         Вы должны  всегда  заключать  аргументы в угловые
                         скобки (<>), аргументы разделяются запятой.


         TASM2 #4-5/Док              = 135 =

         См.также:       .ERRIDN, .ERRDIFI, .ERRIDNI

         Пример:         SegLoad MACRO reg,val
                           .ERRDIF , ;разрешает только
                                              ;регистр ES
                           mov al,val
                           mov reg,ax
                           ENDM


                                        .ERRDIFI                               
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если аргументы различны, регистр
                         (разница между строчными  и  заглавными  буквами)
                         игнорируется

         Режим:          MASM

         Синтаксис:      .ERRDIFI <аргумент1>,<аргумент2>

         Замечания:      Вы всегда   используете  .ERRDIFI  внутри  макро.
                         Директива проверяет,  являются ли аргументы иден-
                         тичными символьными строками.  Если две строки не
                         являются идентичными, выдается сообщение об ошиб-
                         ке в исходной строке, в которой макро вызывается.
                         Две строки сравниваются символ за  символом,  при
                         этом не учитывается регистр. Если вы хотите, что-
                         бы  регистр  учитывался,  используйте   директиву
                         .ERRDIF.

                         Вы должны  всегда  заключать  аргументы в угловые
                         скобки (<>), аргументы разделяются запятой

         См.также:       .ERRIDN, .ERRDIF, .ERRIDNI

         Пример:         SegLoad MACRO reg,val
                           .ERRDIFI , ;разрешает только
                                               ;регистр ES
                           mov ax,val          ;действует независимо
                                               ;от того как напеча-
                                               ;тан REG
                           mov reg,ax
                           ENDM


         TASM2 #4-5/Док              = 136 =

                                                                               
         .ERRE
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если выражение ложно (0)

         Режим:          MASM

         Синтаксис:      .ERRE выражение

         Замечания:      Выражение должно  быть  константой и может не со-
                         держать никаких опережающих имен идентификаторов.
                         Если выражение равно 0,  то сообщение  об  ошибке
                         появляется в текущей исходной строке

         См.также:       .ERRNZ

         Пример:         PtrLoad MACRO рtr,val
                           .ERRE val  ; ошибка при попытке загрузки
                                      ; 0 в указатель
                           mov si,val
                           ENDM

                                        .ERRIDN                                
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если аргументы идентичны

         Режим:          MASM

         Синтаксис:      .ERRIDN <аргумент1>,<аргумент2>

         Замечания:      Вы всегда  используете  .ERRIDN   внутри   макро.
                         Директива  проверяет,  являются ли аргументы раз-
                         личными строками.  Если две строки являются иден-
                         тичными,  выдается сообщение об ошибке в исходной
                         строке,  в которой макро вызывается.  Две  строки
                         сравниваются символ за символом,  при этом учиты-
                         вается регистр, в котором набираются символы. Ес-
                         ли  вы хотите,  чтобы регистр не учитывался,  ис-
                         пользуйте директиву .ERRIDNI.

                         Вы должны всегда заключать  аргументы  в  угловые
                         скобки (<>), аргументы разделяются запятой

         См.также:       .ERRDIF, .ERRIDNI, .ERRDIFI

         TASM2 #4-5/Док              = 137 =


         Пример:         PushSeg MACRO reg,val
                           .ERRIDN ,  ;загрузка CS не разрешена
                           рush reg
                           mov reg,val
                           ENDM




         TASM2 #4-5/Док              = 138 =

                                        .ERRIDNI                               
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку,   если   аргументы    идентичны,
                         регистр игнорируется

         Режим:          MASM

         Синтаксис:      .ERRIDNI <аргумент1>,<аргумент2>

         Замечания:      Вы всегда   используете  .ERRIDNI  внутри  макро.
                         Директива проверяет,  являются ли аргументы  раз-
                         личными строками.  Если две строки являются иден-
                         тичными,  выдается сообщение об ошибке в исходной
                         строке,  в  которой макро вызывается.  Две строки
                         сравниваются символ за символом, при этом не учи-
                         тывается  регистр,  в котором набираются символы.
                         Если вы хотите, чтобы регистр учитывался, исполь-
                         зуйте директиву .ERRIDN.

                         Вы всегда  должны  заключать  аргументы в угловые
                         скобки (<>), аргументы разделяются запятой

         См.также:       .ERRDIF, .ERRIDN, .ERRDIFI

         Пример:         PushSeg MACRO reg,val
                           .ERRIDNI , ;загрузка CS не раз-
                                               ;решена
                           рush reg            ;принимает CS или cs
                           mov reg,val
                           ENDM





         TASM2 #4-5/Док              = 139 =

                                                                               
         ERRIF
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку,  если  выражение  имеет значение
                         "истина" (не 0)

         Режим:          MASM, Ideal

         См.также:       .ERRE, .ERRNZ


                                                                               
         ERRIF1
         -----------------------------------------------------------------

         Назначение:     Вызывает сообщение об ошибке на шаге 1

         Режим:          MASM, Ideal

         См.также:       .ERR1


                                                                               
         ERRIF2
         -----------------------------------------------------------------

         Назначение:     Вызывает сообщение об ошибке на шаге 2

         Режим:          MASM, Ideal

         См.также:       .ERR2





         TASM2 #4-5/Док              = 140 =

                                                                               
         ERRIFB
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если аргумент пуст

         Режим:          MASM, Ideal

         См.также:       .ERRB


                                                                               
         ERRIFDEF
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если идентификатор определен

         Режим:          MASM, Ideal

         См.также:       .ERRDEF


                                                                               
         ERRIFDIF
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если аргументы различны

         Режим:          MASM, Ideal

         См.также:       .ERRDIF


                                                                               
         ERRIFDIFI
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку,  если  аргументы  различны,  иг-
                         норируя регистр

         Режим:          Masm, Ideal

         См.также:       .ERRDIFI


                                                                               
         ERRIFE

         TASM2 #4-5/Док              = 141 =

         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку,  если  выражение  имеет значение
                         (0)

         Режим:          MASM, Ideal

         См.также:       .ERRE


                                                                               
         ERRIFIDN
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если аргументы идентичны

         Режим:          MASM, Ideal

         См.также:       .ERRIDN

                                                                               
         ERRIFIDNI
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку,  если аргументы  идентичны,  иг-
                         норируя регистр

         Режим:          MASM, Ideal

         См.также:       .ERRIDNI


                                                                               
         ERRIFNB
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если аргумент не пуст

         Режим:          MASM, Ideal

         См.также:       .ERRNB



         TASM2 #4-5/Док              = 142 =

                                                                               
         ERRIFNDEF
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если идентификатор не определен

         Режим:          MASM, Ideal

         См.также:       .ERRNDEF



         TASM2 #4-5/Док              = 143 =

                                         .ERRNB                                
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если аргумент пуст

         Режим:          MASM

         Синтаксис:      .ERRNB <аргумент>

         Замечания:      Вы всегда используете .ERRNB внутри макро. Дирек-
                         тива проверяет,  было ли вызвано макро с действи-
                         тельным аргументом. Если аргумент непуст, выдает-
                         ся сообщение об ошибке  в  исходной  строке,  где
                         было вызвано макро.

                         Вы всегда должны заключать аргумент,  который бу-
                         дет проверяться, в угловые скобки (<>)

         См.также:       .ERRB

         Пример:         DoIt MACRO a,b
                           .ERRB   ;нужен только один аргумент
                           ...
                           ENDM

                                                                               
         .ERRNDEF
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку, если идентификатор не определен

         Режим:          MASM

         Синтаксис:      .ERRNDEF идентификатор

         Замечания:      .ERRNDEF вызывает  сообщение  об ошибке в текущей
                         исходной строке,  если идентификатор не  был  еще
                         определен  в исходном файле.  Ошибка будет возни-
                         кать даже в случае,  если идентификатор будет оп-
                         ределен позже

         См.также:       .ERRDEF

         Пример:         .ERRNDEF Bufsize ;размер буфера  не  установлен
                         buf DB BufSize


         TASM2 #4-5/Док              = 144 =

                                                                               
         .ERRNZ
         -----------------------------------------------------------------

         Назначение:     Вызывает ошибку,  если выражение  имеет  значение
                         "истина" (ненулевое)

         Режим:          MASM

         Синтаксис:      .ERRNZ выражение

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

         См.также:       .ERRG

         Пример:         .ERRNZ $ GT 1000h ;сегмент слишком велик


                                          EVEN                                 
         -----------------------------------------------------------------

         Назначение:     Округляет текущее значение  счетчика  до  четного
                         адреса

         Режим:          MASM, Ideal

         Замечания:      EVEN позволяет  вам выравнивать код для эффектив-
                         ного    доступа    процессорами,    использующими
                         16-разрядную  шину данных (8086,  80186,  80286).
                         Данная директива не улучшает  работу процессоров,
                         использующих   8-разрядную   шину  данных  (8088,
                         80188).

                         Вы не можете использовать данную директиву в сег-
                         ментах,  имеющих  байтовое выравнивание,  которое
                         определено в директиве SEGMENT,  открывающей дан-
                         ный сегмент.

                         Если в  момент  появления  директивы EVEN текущее
                         значение счетчика нечетно, в сегмент будет встав-
                         лена  одиночная  инструкция  NOP для того,  чтобы
                         сделать текущее значение счетчика четным.  С  до-
                         бавлением  NOP,  EVEN  может  быть использована в

         TASM2 #4-5/Док              = 145 =

                         сегменте кода без вызова инструкций ошибок,  выз-
                         ванных во время выполнения. Если значение счетчи-
                         ка четно, то данная директива действия не имеет.

         См.также:       ALIGN, EVENDATA

         Пример:         EVEN
                         @A: LODSB
                             XOR bl,al
                             LOOR @A


                                        EVENDATA                               
         -----------------------------------------------------------------

         Назначение:     Округляет текущее значение счетчика до следующего
                         четного адреса в сегменте данных

         Режим:          MASM, Ideal

         Синтаксис:      EVENDATA

         Замечания:      EVENDATA позволяет вам выравнивать данные для эф-
                         фективного доступа процессорами, использующими 16
                         -разрядную шину данных (8086, 80186, 80286). Дан-
                         ная директива не улучшает работу процессоров, ис-
                         пользующих 8-разрядную шину данных (8088, 80188).

                         Вы не можете использовать данную директиву в сег-
                         ментах,  использующих байтовое выравнивание,  ко-
                         торое определено в директиве SEGMENT, открывающей
                         данный сегмент.

                         Если в  момент появления директивы EVENDATA теку-
                         щее значение  счетчика  нечетно,  будет  вставлен
                         байт со значением 0 для того, чтобы сделать теку-
                         щее значение счетчика четным. Если значение счет-
                         чика четно, то данная директива действия не имеет

         См.также:       ALIGN, EVEN

         Пример:         EVENDATA
                         varl DW 0



         TASM2 #4-5/Док              = 146 =

                                         EXITM                                 
         -----------------------------------------------------------------

         Назначение:     Прерывает макрорасширение или  повторяющийся блок

         Режим:          MASM, Ideal

         Синтаксис:      EXITM

         Замечания:      EXITM  прерывает любое макрорасширение или повто-
                         ряющийся блок. Все, что следует за EXITM, игнори-
                         руется.

                         Это удобно для выхода с любого уровня условия

         См.также:       ENDM, IRP, IRPC,REPT, MACRO

         Пример:         Shiftn MACRO oр,n
                         count=0
                           REPT N
                           shl OP,N
                         count=count+1
                           IF count GE 8   ;не более 8
                           EXITM
                         ENDIF
                         ENDM


                                         EXTRN                                 
         -----------------------------------------------------------------

         Назначение:     Определяет  идентификатор,  определенный в другом
                         модуле

         Режим:          MASM, Ideal

         Синтаксис:      EXTRN определение[,определение]...

         Замечания:      Каждое определение описывает идентификатор и име-
                         ет следующий формат:

                         [language] имя:тип[:количество]

                         language принимает одно из значений - C,  PASCAL,
                         BASIC, FORTRAN, PROLOG или NOLANGUAGE и определя-

         TASM2 #4-5/Док              = 147 =

                         ет любые  языковые  согласования применяемых сим-
                         вольных имен. Имя является идентификатором, опре-
                         деленным в другом модуле.  Использование указания
                         языка в директиве EXTRN  временно  переопределяет
                         текущую  языковую установку (по умолчанию или оп-
                         ределенную директивой .MODEL).  Заметьте, что вам
                         не нужно иметь директиву .MODEL для использования
                         данной возможности.

                         Тип должен соответствовать типу идентификатора  в
                         модуле,  в котором он определен и должен быть од-
                         ним из следующих:

                         - NEAR, FAR или PROC. PROC является либо NEAR ли-
                           бо  FAR (зависит от типа памяти, установленного
                           директивой MODEL)

                         - BYTE,  WORD,  DWORD,  DATAPTR,  CODEPTR, FWORD,
                           PWORD, QWORD, TBYTE или имя структуры

                         - ABS

                         Значение "количество"  определяет количество пов-
                         торений данного внешнего идентификатора. Если оп-
                         ределение идентификатора в другом файле использу-
                         ет для размещения более одного  пункта  директиву
                         DUP, то вы можете это значение использовать в по-
                         ле "количество".  Это позволяет операторам SIZE и
                         LENGTH  правильно  определять размер внешних дан-
                         ных.  Если вы не определили значение поля  "коли-
                         чество" - принимается значение 1.

                         Вы можете  определить более чем один внешний сим-
                         вол разделением определений между  собой  запятой
                         (,). Также, каждый аргумент подчиняется такому же
                         синтаксису, как и аргументы ARG и LOCAL.

                         Имя должно   быть   объявлено   как   PUBLIC  или
                         PUBLICDLL в другом модуле для  того,  чтобы  ваша
                         программа была скомпонована правильно.

                         Вы можете использовать директиву EXTRN внутри или
                         вне сегмента,  объявленного  директивой  SEGMENT.
                         Если  вы  используете директиву EXTRN внутри сег-
                         мента, вы информируете ассемблер о том, что внеш-
                         няя  переменная  находится в другом модуле,  но в

         TASM2 #4-5/Док              = 148 =

                         том же сегменте. Если вы размещаете EXTRN вне ка-
                         кого-либо сегмента,  вы сообщаете ассемблеру, что
                         вы не знаете в котором сегменте  объявлена данная
                         переменная.

                         В режиме MASM внешние идентификаторы, объявленные
                         вне какого-либо сегмента, могут быть доступны че-
                         рез регистр DS, который не всегда содержит истин-
                         ное значение. Убедитесь, что значение DS коррект-
                         но или используйте непосредственное указание сег-
                         мента при ссылке на данные переменные.

                         В режиме Ideal Турбо  ассемблер  точно  проверяет
                         адресацию  внешней  переменной  в  соответствии с
                         директивой ASSUME

         См.также:       COMM, GLOBAL, PUBLIC, PUBLICDLL

         Пример:         EXTRN aрroc:NEAR
                           call aрroc    ;вызывает из другого модуля




         TASM2 #4-5/Док              = 149 =

                                        .FARDATA                               
         -----------------------------------------------------------------

         Назначение:     Определяет начало сегмента данных с дальним  ука-
                         зателем

         Режим:          MASM

         Синтаксис:      .FARDATA [имя]

         Замечания:      .FARDATA определяет  начало  сегмента   инициали-
                         зированных данных с дальним доступом. Если вы же-
                         лаете иметь множество разделенных сегментов даль-
                         них данных,  вы можете указать имя сегмента,  тем
                         самым создавая новый сегмент.

                         Вы можете  столько  раз  использовать   директиву
                         .FARDATA в исходном файле,  сколько вам это необ-
                         ходимо. Все различные части с одним и тем же име-
                         нем  будут объединены в один сегмент данных точно
                         также,  если бы все  данные  были  введены  после
                         единственной директивы .FARDATA.

                         Сегмент дальних  данных  не  может быть включен в
                         группу.  Вы должны сделать дальние сегменты  дос-
                         тупными посредством загрузки адреса дальнего сег-
                         мента в сегментный регистр перед доступом к  дан-
                         ным.

                         Смотрите директиву  .MODEL  для  получения полной
                         информации о сегментных  атрибутах  для  сегмента
                         дальних данных

         См.также:       .FARDATA?, .CODE, .DATA, .MODEL, .STACK

         Пример:         .FARDATA
                         FarBuf DB 80 DUP(0)
                         .CODE
                           mov ax,@FarData
                           mov ds,ax
                           ASSUME ds:@FarData
                           mov al,FarBuf[0]  ; получает первый
                                             ; байт буфера




         TASM2 #4-5/Док              = 150 =

                                       .FARDATA?                               
         -----------------------------------------------------------------

         Назначение:     Определяет начало  сегмента  дальних  неинициали-
                         зированных данных

         Режим:          MASM

         Синтаксис:      .FARDATA? [имя]

         Замечания:      .FARDATA? определяет  начало сегмента неинициали-
                         зированных данных с дальним доступом. Если вы же-
                         лаете  иметь множество раздельных сегментов даль-
                         них данных,  вы можете указать имя сегмента,  тем
                         самым создавая новый сегмент.

                         Вы можете   столько  раз  использовать  директиву
                         .FARDATA? в исходном файле, сколько вам это необ-
                         ходимо. Все различные части с одним и тем же име-
                         нем будут объединены в один сегмент  данных точно
                         также,  если  бы  все  данные  были введены после
                         единственной директивы .FARDATA?.

                         Сегмент данных не может быть включен в группу. Вы
                         должны сделать дальние сегменты доступными средс-
                         твам загрузки адреса дальнего сегмента в сегмент-
                         ный регистр перед доступом к данным.

                         Смотрите директиву  .MODEL  для  получения полной
                         информации о сегментных  атрибутах  для  сегмента
                         неинициализированных дальних данных

         См.также:       .CODE, .DATA, .FARDATA, .MODEL, .STACK

         Пример:         .FARDATA?
                         FarBuf DB 80 DUP (?)
                         .CODE
                         mov ax,@FarData
                         mov ds,ax
                         ASSUME ds:@FarData
                         mov al,FarBuf[0] ;получает первый байт буфера





         TASM2 #4-5/Док              = 151 =

                                                                               
         FARDATA
         -----------------------------------------------------------------

         Назначение:     Определяет начало сегмента дальних данных

         Режим:          MASM, Ideal

         Синтаксис:      FARDATA [имя]

         Замечания:      То же, что и .FARDATA

         См.также:       .FARDATA


                                         GLOBAL                                
         -----------------------------------------------------------------

         Назначение:     Определяет глобальный идентификатор

         Режим:          MASM, Ideal

         Синтаксис:      GLOBAL определение [,определение]

         Замечания:      GLOBAL работает как комбинация директив  EXTRN  и
                         PUBLIC. Каждое  определение описывает идентифика-
                         тор и имеет следующий формат :

                           [language] имя [[количество]]:тип [количество]

                         language является  одним  из  C,  PASCAL,  BASIC,
                         FORTRAN, PROLOG или NOLANGUAGE и определяет любые
                         языковые   согласования   применяемых  символьных
                         имен.  Использование указания языка  в  директиве
                         GLOBAL  временно  переопределяет текущую языковую
                         установку (по умолчанию или определенную директи-
                         вой .MODEL). Заметьте, что вам не нужно иметь ди-
                         рективу .MODEL для использования  данной  возмож-
                         ности.

                         Если имя определено в текущем исходном файле, вы-
                         полняются   те  же  действия,  что  и  директивой
                         PUBLIC. Если имя не определено в текущем исходном
                         файле,  идентификатор считается внешним, как если
                         бы была использована директива EXTRN.


         TASM2 #4-5/Док              = 152 =

                         Тип должен соответствовать типу идентификатора  в
                         модуле,  в котором он определен и должен быть од-
                         ним из следующих :

                         - NEAR, FAR или PROC

                         - BYTE,  WORD,  DWORD, DATAPTR, CODEPTR, FWORD,
                           PWORD, QWORD, TBYTE или структурное имя

                         - ABS

                         Значение "количество"  определяет  количество раз
                         повторения данного идентификатора. Если определе-
                         ние  идентификатора использует для размещения бо-
                         лее одного пункта директиву DUP, то вы можете это
                         значение  использовать  в поле "количество".  Это
                         позволяет операторам SIZE и LENGTH правильно  оп-
                         ределять размер внешних данных.  Если вы не опре-
                         делили значение поля "количество"  -  принимается
                         значение 1.

                         Директива GLOBAL   позволяет   вам   иметь   файл
                         INCLUDE,  включаемый во все исходные файлы;  файл
                         INCLUDE содержит все разделяемые данные как  гло-
                         бальные идентификаторы.  При ссылке на  данные  в
                         каждом  модуле  определение  GLOBAL  имеет  то же
                         действие,  что и директива EXTRN, описывающая ка-
                         ким  образом эти данные определены в другом моду-
                         ле. В модуле, в котором вы определили данные, оп-
                         ределение GLOBAL имеет то же действие,  что и ди-
                         ректива PUBLIC,  делая эти данные  доступными  из
                         других модулей.

                         Вы можете определить более чем один общедоступный
                         идентификатор, разделяя определение запятой (,).

                         Вы должны определить идентификатор как GLOBAL пе-
                         ред тем,  как он будет использован где-либо в ва-
                         шем исходном файле.

         См.также:       COMM, EXTRN, PUBLIC

         Пример:         GLOBAL X:WORD,Y:BYTE
                         X DW 0     ; делается доступным для других
                                    ; модулей
                         mov al,Y   ; Y определен как внешний

         TASM2 #4-5/Док              = 153 =

                                         GROUP                                 
         -----------------------------------------------------------------

         Назначение:     Определение  сегментов,  как достижимых из одного
                         сегментного регистра.

         Режим:          MASM, Ideal

         Синтаксис:      Режим: MASM:
                         <имя> GROUP <имя сегмента> [,<имя сегмента>]...

                         Режим: Ideal:
                         GROUP <имя> <имя сегмента> [,<имя сегмента>]...

         Замечания:      <имя> определяет имя группы, <имя сегмента> может
                         быть как именем сегмента, определенным при помощи
                         директивы SEGMENT, так и выражением, начинающемся
                         с  SEG.  Вы можете использовать <имя> в директиве
                         ASSUME,  а также как константу в выражениях,  где
                         вычисляется адрес начального параграфа группы.

                         Все сегменты  в  группе  должны  быть  меньше  64
                         Кбайт, даже если они не являются смежными.

                         В режиме MASM вы должны использовать префиксы за-
                         мены сегмента при обращении к идентификаторам  из
                         сегментов группы.  В режиме Ideal Турбо ассемблер
                         сам генерирует префиксы замены сегмента.

                         В приведенном ниже примере переменные var1 и var2
                         принадлежат различным  сегментам  группы  DGROUP.
                         При  загрузке в регистр DS базового адреса группы
                         DGROUP,  к переменным можно обращаться как к при-
                         надлежащим к одному сегменту.

                         Обратите внимание на то, что в режиме Ideal <имя>
                         находится после директивы GROUP.

         Cм.также:       SEGMENT,ASSUME

         Пример:         DGROUP GROUP seg1,seg2
                         seg1 SEGMENT
                         var1 DW 3
                         seg1 ENDS
                         seg2 SEGMENT
                         var2 DW 5

         TASM2 #4-5/Док              = 154 =

                         seg2 ENDS
                         seg3 SEGMENT
                         mov ax,DGROUP ; Загрузка базового адреса
                         mov ds,ax
                         ASSUME DS:DGROUP
                         mov ax.var1
                         mul var2
                         seg3 ENDS


                                         IDEAL                                 
         -----------------------------------------------------------------

         Назначение:     Ввод режима ассемблирования Ideal.

         Режим:          MASM, Ideal

         Синтаксис:      Ideal

         Замечания:      IDEAL  настраивает синтаксический  анализатор  на
                         обработку операторов, имеющих синтаксис для режи-
                         ма Ideal. Для более полного обсуждения возможнос-
                         тей и преимуществ режима Ideal см.  Главу 11 "Ру-
                         ководства пользователя".

         Режим:          Ideal остается в силе до тех пор,  пока он не бу-
                         дет отменен директивами QUIRKS или MASM.

         См.также:       QUIRKS, MASM

         Пример:         IDEAL
                         mov  [BYTE PTR DS:SI],1 ; Синтаксис : операндов
                                                 ; в режиме Ideal




         TASM2 #4-5/Док              = 155 =

                                           IF                                  
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования.  Трансли-
                         руется,  если выражение,  входящее в его  состав,
                         верно.

         Режим:          MASM, Ideal

         Синтаксис:      IF <выражение>

         Замечания:      Значением <выражения> должно быть число, и оно не
                         должно содержать ссылку на неопределенные до этой
                         директивы имена. Если это выражение имеет ненуле-
                         вое значение,  то операторы,  находящиеся  внутри
                         блока, будут ассемблироваться.

                         Для завершения  условного  блока используется ди-
                         ректива ENDIF.

         См. также:      ELSE, ENDIF, IF1, IF2, IFDEF, IFDIF, IFDIFI, IFE,
                         IFIDN, IFIDNI,IFNB,IFNDEF

         Пример :          IF DoBuffering
                             mov  ax,BufNum
                             call ReadBuf
                         ENDIF

                                          IF1                                  
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования. Действует
                         на первом проходе ассемблера.

         Режим:          MASM, Ideal

         Синтаксис:      IF1

         Замечания:      Обычно, Турбо ассемблер действует как однопроход-
                         ной ассемблер, и операторы внутри этого блока бу-
                         дут  всегда  обработаны,  так как всегда есть как
                         минимум один проход.

                         Если вы  используете  многопроходные  возможности
                         Турбо ассемблера (включенные с помощью переключа-

         TASM2 #4-5/Док              = 156 =

                         теля   /m),  IF1  ассемблирует  операторы  внутри
                         условного блока на первом проходе ассемблера.

                         Когда используется переопределение  операторов  с
                         опережающей ссылкой, вы не всегда можете из файла
                         листинга определить,  что кое-что было неправиль-
                         но.  В то время когда создается листинг, происхо-
                         дит переопределение операторов.  Данное  средство
                         позволяет  создавать  правильный листинг,  но при
                         этом не происходит  хорошей  генерации  кода  для
                         объектного файла.

                         Для завершения  условного  блока используется ди-
                         ректива ENDIF.

         См.также:       ELSE,ENDIF,IF2,IFDIF,IFDIFI,IFE,IFIDN,IFIDNI,
                         IFNB,IFNDEF,IF,IFDEF

         Пример:         IF1
                         ; Этот код ассемблируется на первом проходе
                         ENDIF

                                          IF2                                  
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования. Действует
                         на втором проходе ассемблера.

         Режим:          MASM,Ideal

         Синтаксис:      IF2

         Замечания:      Обычно, Турбо ассемблер действует как однопроход-
                         ной  ассемблер.  При  этом операторы внутри этого
                         блока никогда не будут обработаны,  если установ-
                         лен один проход. В этом случае выдаются зависящие
                         от прохода предупреждающие сообщения,  чтобы под-
                         готовить вас к возможным рискованным кодовым упу-
                         щениям.

                         Если вы  используете  многопроходные  возможности
                         Турбо ассемблера (включенные с помощью переключа-
                         теля  /m),  IF2  ассемблирует  операторы   внутри
                         условного блока на втором проходе ассемблера. Од-
                         нако,  зависящие от прохода сообщения  не  созда-

         TASM2 #4-5/Док              = 157 =

                         ются.

                         Когда используется  переопределение  операторов с
                         опережающей ссылкой, вы не всегда можете из файла
                         листинга определить,  что кое-что было неправиль-
                         но.  В то время когда создается листинг, происхо-
                         дит  переопределение операторов.  Данное средство
                         позволяет создавать правильный  листинг,  но  при
                         этом  не  происходит  хорошей  генерации кода для
                         объектного файла.

                         Для завершения  условного  блока используется ди-
                         ректива ENDIF.

         См.также:       ELSE,ENDIF,IF1,IFDIF,IFDIFI,IFE,IFIDN,IFIDNI,
                         IFNB,IFNDEF,IF,IFDEF

         Пример:           IF2
                         ; Этот код ассемблируется на втором проходе,
                         ;  если он используется
                         ENDIF

                                          IFB                                  
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования.  Трансли-
                         руется, если аргумент - пробел.

         Режим:          MASM, Ideal

         Синтаксис:      IFB <<аргумент>>

         Замечания:      Если значение  аргумента  -  пробел  (пусто),  то
                         ассемблируются   операторы,   находящиеся  внутри
                         условного блока. Эту директиву используют для то-
                         го,  чтобы проверить, передаются ли макросу пара-
                         метры при вызове.

                         Аргумент должен быть всегда  заключен  в  угловые
                         скобки (<>).

                         Для завершения условного блока  используется  ди-
                         ректива ENDIF.

         См.также:       ELSE,ENDIF,IF,IF1,IF2,IFDIF,IFDIFI,IFE,IFIDN,

         TASM2 #4-5/Док              = 158 =

                         IFIDNI,IFNB,IFNDEF,IFDEF

         Пример:           print MACRO msg
                              IFB 
                              mov si,DefaultMsg
                              ELSE
                              mov si,msg
                              ENDIF
                              call ShowIt
                              ENDM

                                         IFDEF                                 
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования.  Трансли-
                         руется, если символическое имя определено.

         Режим:          MASM, Ideal

         Синтаксис:      IFDEF <символическое имя>

         Замечания:      Если <символическое имя> определено, то ассембли-
                         руются операторы внутри условного блока.

                         Для завершения  условного  блока используется ди-
                         ректива ENDIF.

         См.также:       ELSE,ENDIF,IF1,IF2,IFDIF,IFDIFI,IFE,IFIDN,
                         IFIDNI,IFNB,IFNDEF

         Пример:           IFDEF
                          buf DB Savesize DUP (?) ; определяет BUFFER
                                            ; если SAVESIZE определен
                         ENDIF

                                      IFDIF,IFDIFI                             
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования.  Трансли-
                         руются, если аргументы различны.

         Режим:          MASM, Ideal

         Синтаксис:      IFDIF <<аргумент1>>,<<аргумент2>>

         TASM2 #4-5/Док              = 159 =


         Замечания:      Обычно  эти  директивы используются внутри макро-
                         сов. Они позволяют проверить, являются ли оба ар-
                         гумента различными строками идентификаторов.  Лю-
                         бой из аргументов может быть фиктивным аргументом
                         макроса, которому, после сравнения, будет присво-
                         ено значение реального аргумента.  Если аргументы
                         различны,  то операторы внутри блока  ассемблиру-
                         ются.  Строки сравниваются посимвольно,  с учетом
                         больших и маленьких букв.  Для того, чтобы это не
                         учитывать, применяется директива IFDIFI.

                         Для завершения условного блока  используется  ди-
                         ректива ENDIF.

         См.также:       ELSE,ENDIF,IF1,IF2,IFE,IFIDN,IFIDNI,IFNB,
                         IFNDEF,IFB

         Пример:         loadb MACRO source
                              IFDIF , ; указатель на строку
                               mov si,source
                              ENDIF
                               loadsb              ; прочитать байт
                              ENDM

                                          IFE                                  
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования.  Трансли-
                         руется, если <выражение> ложно.

         Режим:          MASM, Ideal

         Синтаксис:      IFE <выражение>

         Замечания:      Значением <выражения> должна быть константа.  Вы-
                         ражение не должно содержать идентификаторов,  не-
                         определенных  к данному моменту трансляции.  Если
                         значение <выражения>  равно  нулю,  то  операторы
                         внутри блока будут ассемблироваться.

                         Для завершения условного блока  используется  ди-
                         ректива ENDIF.

         См.также:       ELSE,ENDIF,IF1,IF2,IFIDN,IFIDNI,IFNB,IFNDEF,

         TASM2 #4-5/Док              = 160 =

                         IFB,IF

         Пример:         IFE StackSize
                           StackSize = 1024
                           DB StackSize DUP (?) ; размещает стек
                         ENDIF

                                      IFIDN,IFIDNI                             
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования.  Трансли-
                         руется, если аргументы одинаковые.

         Режим:          MASM, Ideal

         Синтаксис:      IFIDN <<аргумент1>>,<<аргумент2>>

         Замечания:      Обычно эти директивы используются  внутри  макро-
                         сов. Они позволяют проверить, являются ли оба ар-
                         гумента различными строками идентификаторов.  Лю-
                         бой из аргументов может быть фиктивным аргументом
                         макроса, которому, после сравнения, будет присво-
                         ено значение реального аргумента.  Если аргументы
                         одинаковы,то  операторы  внутри блока ассемблиру-
                         ются.  Строки сравниваются посимвольно,  с учетом
                         больших и маленьких букв.  Для того, чтобы это не
                         учитывать, применяется директива IFIDNI.

                         Для завершения  условного  блока используется ди-
                         ректива ENDIF.

         См.также:       ELSE,ENDIF,IF1,IF2,IFE,IFIDN,IFIDNI,IFNB,
                         IFNDEF,IFB

         Пример:           rdwr MACRO buf,rwmode
                           mov ax,buf
                           IFIDN ,
                             call ReadIt
                           ENDIF
                           IFIDN ,
                             call WriteIt
                           ENDIF
                           ENDM



         TASM2 #4-5/Док              = 161 =

                                          IFNB                                 
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования.  Трансли-
                         руется, если аргумент - не пробел.

         Режим:          MASM, Ideal

         Синтаксис:      IFNB <<аргумент>>

         Замечания:      Если  значение аргумента - не пробел,  то ассемб-
                         лируются операторы,  находящиеся внутри условного
                         блока.  Эту директиву используют для того,  чтобы
                         проверить,  передаются ли макросу  параметры  при
                         вызове.

                         Аргумент должен быть всегда  заключен  в  угловые
                         скобки (<>).

                         Для завершения  условного  блока используется ди-
                         ректива ENDIF.

         См.также:       ELSE,ENDIF,IF1,IF2,IFDIF,IFDIFI,IFE,IFIDN,
                         IFIDNI,IFNB,IFNDEF

         Пример:           PopRegs MACRO reg1,reg2
                            IFNB 
                               pop reg1
                            ENDIF
                            IFNB 
                               pop reg2
                            ENDIF
                            ENDM

                                         IFNDEF                                
         -----------------------------------------------------------------

         Назначение:     Начало блока условного ассемблирования.  Трансли-
                         руется, если символическое имя не определено.

         Режим:          MASM, Ideal

         Синтаксис:      IFNDEF <символическое имя>

         Замечания:      Если  <символическое  имя> не определено,  то ас-

         TASM2 #4-5/Док              = 162 =

                         семблируются операторы внутри условного блока.

                         Для завершения  условного  блока используется ди-
                         ректива ENDIF.

         См.также:       ELSE,ENDIF,IF1,IF2,IFDIF,IFDIFI,IFE,IFIDN,
                         IFIDNI,IFNB,IFNDEF

         Пример:           IFNDEF BufSize
                         buf Size DB EQU 128 ; определяет размер буфера,
                                             ; если он еще не определен
                         ENDIF




         TASM2 #4-5/Док              = 163 =

                                                                               
         %INCL
         -----------------------------------------------------------------

         Назначение:     Разрешение листинга файлов,  включенных по дирек-
                         тиве INCLUDE (include-файлов).

         Режим:          MASM, Ideal

         Синтаксис:      %INCL

         Замечания:      Используется  после  директивы  %NOINCL,  которая
                         запрещает листинг   include-файлов.   В    начале
                         трансляции этот режим принимается по умолчанию.

         См.также:       %NOINCL

         Пример:           %INCL
                         INCLUDE DEFS.INC ;этот файл появится в листинге

                                        INCLUDE                                
         -----------------------------------------------------------------

         Назначение:     Включение в исходный текст других файлов.

         Режим:          MASM, Ideal

         Синтаксис:      режим MASM:
                         INCLUDE <имя файла>

                         режим Ideal:
                         INCLUDE "<имя файла>"

         Замечания:      Аргумент  <имя  файла>  - это имя исходного файла
                         ассемблерной программы.  Турбо  ассемблер сначала
                         ассемблирует все файлы,  включенные этой директи-
                         вой, а затем ассемблирует текущий файл.

                         Аргумент <имя файла> должен быть  записан  с  ис-
                         пользованием  стандартных соглашений DOS для имен
                         файлов (имя и  расширение  файла).  По  умолчанию
                         принимается расширение .ASM.

                         Если в  <имени  файла> явно не задан каталог,  то
                         Турбо ассемблер ищет требуемый  файл  сначала  во
                         всех каталогах, определенных при помощи опции ко-

         TASM2 #4-5/Док              = 164 =

                         мандной строки /I,  а затем в текущем каталоге.

                         Количество вложенных директив INCLUDE не  ограни-
                         чено.

                         Обратите внимание на то, что в режиме Ideal аргу-
                         мент <имя файла> должен быть заключен в кавычки.

         Пример:         ;режим MASM
                         INCLUDE DCEFS.INC
                         ;режим Ideal
                         INCLUDE "DEFS.INC"

                                       INCLUDELIB                              
         -----------------------------------------------------------------

         Назначение:     Сообщение  редактору связей о подсоединяемых биб-
                         лиотеках.

         Режим:          MASM, Ideal

         Синтаксис:      режим MASM:
                         INCLUDELIB <имя файла>

                         режим Ideal:
                         INCLUDELIB "<имя файла>"

         Замечания:      Аргумент <имя файла> - это имя библиотеки,  кото-
                         рую вы хотите использовать на этапе  редактирова-
                         ния  связей.  По умолчанию принимается расширение
                         .LIB.

                         Если вы указываете эту директиву, то отпадает не-
                         обходимость специально указывать  имя  библиотеки
                         при запуске редактора связей.

                         Обратите внимание на то, что в режиме Ideal аргу-
                         мент <имя файла> должен быть заключен  в кавычки.




         TASM2 #4-5/Док              = 165 =

                                                                               
         INSTR
         -----------------------------------------------------------------

         Назначение:     Определение позиции,  с которой одна строка "вхо-
                         дит" в другую.

         Режим:          MASM51, Ideal

         Синтаксис:      <имя> INSTR [<начало>,] <строка1>,<строка2>

         Замечания:      После  выполнения  этой директивы аргументу <имя>
                         присваивается значение номера позиции,  с которой
                         <строка2> входит в <строку1>.

                         Номер позиции  первого  символа в строке равен 1.
                         Если <строка2> не "входит" в <строку1>, то дирек-
                         тива возвращает 0.

         См.также:       CATSTR,SIZESTR,SUBSTR

         Пример:         COMMAPOS INSTR ,<,>  ; COMMAPOS=4


                                          IRP                                  
         -----------------------------------------------------------------

         Назначение:     Повторение блока операторов с заменой строки.

         Режим:          MASM, Ideal

         Синтаксис:      IRP <параметр>,<<арг1>[,<арг2>] ...>
                             <операторы>
                         ENDM

         Замечания:      <Операторы> внутри блока ассемблируются  один раз
                         для  каждого  аргумента  списка,  заключенного  в
                         скобки (<>). Число аргументов в списке не ограни-
                         чено. Аргументы могут содержать любой текст (сим-
                         волы,  строки,  числа и т.д.).  Каждый раз, когда
                         блок ассемблируется,  следующий аргумент в списке
                         заменяет поле <параметр> в операторах блока.

                         Аргументы в списке должны разделяться запятыми, а
                         список  аргументов  должен быть заключен в скобки
                         (<>).  Для завершения действия директивы IRP  ис-

         TASM2 #4-5/Док              = 166 =

                         пользуется директива ENDM.

                         Эту директиву  можно использовать как внутри мак-
                         росов, так и вне их.

         См.также:       IRPC,REPT

         Пример:         IRP reg,
                            push reg
                         ENDM

                                          IRPC                                 
         -----------------------------------------------------------------

         Назначение:     Повторение блока операторов с заменой идентифика-
                         тора.

         Режим:          MASM, Ideal

         Синтаксис:      IRPC <параметр>,<строка>
                              <операторы>
                         ENDM

         Замечания:      <Операторы> внутри блока ассемблируются  один раз
                         для каждого идентификатора строки.  Число иденти-
                         фикаторов в строке  не  ограничено.  Каждый  раз,
                         когда блок ассемблируется,  следующий идентифика-
                         тор в строке заменяет поле <параметр> в  операто-
                         рах блока.

                         Для завершения действия директивы IRPC  использу-
                         ется директива ENDM.

                         Эту директиву  можно использовать как внутри мак-
                         росов, так и вне их.

         См.также:       IRP,REPT

         Пример:           IRPC lucky,1379
                            db lucky
                         ENDM
                         В результате будет создано 4  байта  данных  со
                         значениями 1,3,7 и 9.



         TASM2 #4-5/Док              = 167 =

                                         JUMPS                                 
         -----------------------------------------------------------------

         Назначение:     Установка режима ассемблера, при котором произво-
                         дится замена команд условного перехода,  если они
                         передают управление более чем через 128 байт.

         Режим:          MASM, Ideal

         Синтаксис:      JUMPS

         Замечания:      Команды условных переходов могут  передавать  уп-
                         равление только на 128 байт "вверх" или "вниз" по
                         программе. При использовании директивы JUMPS Тур-
                         бо ассемблер проверяет адрес  перехода  в  каждой
                         команде  условного перехода и,  если этот переход
                         осуществлен быть не может  (не  хватает  смещения
                         для адреса), то он генерирует переход по противо-
                         положному условию и безусловный переход на требу-
                         емую метку. Например:

                            jne xyz

                         преобразуется в

                            je  @aa
                            jmp xyz
                            a:

                         Если адрес перехода к моменту трансляции не опре-
                         делен,  то необходимо использовать операторы NEAR
                         и FAR для явного  указания  Турбо  ассемблеру  на
                         размер команды перехода. Если вы этого не сделае-
                         те, то будет сгенерирован неверный код. Директива
                         JUMPS  аналогична опции командной строки /JJUMPS.

         См.также:       NOJUMPS

         Пример:           JUMPS
                         JMP NEAR A
                           ORG $+400h
                         A:



         TASM2 #4-5/Док              = 168 =

                                         LABEL                                 
         -----------------------------------------------------------------

         Назначение:     Определение символического имени и его типа.

         Режим:          MASM, Ideal

         Синтаксис:      режим MASM:
                         <имя> LABEL  <тип>

                         режим Ideal:
                         LABEL <имя> <тип>

         Замечания:      Аргумент <имя> - это символическое имя еще не оп-
                         ределенное в программе. Аргумент <тип> определяет
                         размер элементов памяти,  из которых состоит сим-
                         волическое имя,  а также является ли это имя дан-
                         ными или программой.  Аргумент <тип> может прини-
                         мать одно из следующих значений:

                         - NEAR, FAR или PROC. PROC аналогично NEAR и FAR,
                           но зависит от модели памяти,  установленной ди-
                           рективой MODEL;

                         -  BYTE,  WORD,  DATAPTR,  CODEPTR, DWORD, FWORD,
                           PWORD, QWORD, TBYTE или имя структуры.

                         Имя будет доступно только внутри  того  исходного
                         файла, в котором она определена.  Для того, чтобы
                         сделать его доступным для всей программы, исполь-
                         зуется директива PUBLIC.

                         Обратите внимание на то, что в режиме Ideal пара-
                         метр <имя> находится после директивы LABEL.

         См.также:       :

         Пример:           words LABEL WORD   ;Доступ к BYTES как к словам
                         BYTES DB 64 DUP (0)
                           mov words[2],1



         TASM2 #4-5/Док              = 169 =

                                                                               
         .LALL
         -----------------------------------------------------------------

         Назначение:     Разрешение печати текста макрорасширений.

         Режим:          MASM

         Синтаксис:      .LALL

         См.также:       %MACS




         TASM2 #4-5/Док              = 170 =

                                                                               
         .LFCOND
         -----------------------------------------------------------------

         Назначение:     Разрешение  отображения  в  листинге операторов в
                         условных блоках.

         Режим:          MASM

         Синтаксис:      .LFCOND

         Замечания:      Директива  .LFCOND разрешает появление в листинге
                         программы операторов, находящихся в условных бло-
                         ках, которые  в  силу  заданных  условий  не были
                         оттранслированы. Эта директива не отменяется  оп-
                         цией командной строки /X.

         См.также:       %CONDS


                                         %LINUM                                
         -----------------------------------------------------------------

         Назначение:     Установка  ширины поля номера строки в файле лис-
                         тинга.

         Режим:          MASM, Ideal

         Синтаксис:      %LINUM <размер>

         Замечания:      Директива %LINUM позволяет установить ширину поля
                         номера строки в файле листинга. Аргумент <размер>
                         должен  быть  константой.  Если вы хотите сделать
                         листинг как можно меньше,  то возможно  уменьшить
                         ширину этого поля. Также, если исходная программа
                         содержит более 9999 строк,  то необходимо  увели-
                         чить размер поля строки, иначе номер строки будет
                         усечен.

                         По умолчанию размер поля номера строки равен 4.

         Пример:         %LINUM 5 ; допустимое количество строк  99999





         TASM2 #4-5/Док              = 171 =

                                                                               
         %LIST
         -----------------------------------------------------------------

         Назначение:     Разрешение выдачи листинга исходной программы.

         Режим:          MASM, Ideal

         Синтаксис:      %LIST

         Замечания:      Директива   %LIST   отменяет  действие  директивы
                         %NOLIST, запрещающей выдачу листинга.

                         В начале  трансляции  этот  режим  установлен  по
                         умолчанию.

         См.также:       .LIST,%NOLIST,%XLIST

         Пример:           %LIST
                          jmp xyz  ; эта строка появится в листинге


                                                                               
         .LIST
         -----------------------------------------------------------------

         Назначение:     Разрешение выдачи листинга исходной программы.

         Режим:          MASM

         Синтаксис:      .LIST

         См.также:       %LIST

         Пример:            .XLIST    ; Запрещение выдачи листинга
                         INCLUDE more.inc
                          .LIST     ; Разрешение выдачи листинга





         TASM2 #4-5/Док              = 172 =

                                         LOCAL                                 
         -----------------------------------------------------------------

         Назначение:     Определение локальных  переменных  в  макросах  и
                         процедурах.

         Режим:          MASM, Ideal

         Синтаксис:      в макросах:
                         LOCAL <идентификатор> [,<идентификатор>]...

                         в процедурах:
                         LOCAL <имя>:<тип>[:<счетчик>][,<имя>:<тип>[:
                               <счетчик>]] ...[=<символическое имя>]

         Замечания:      Директива LOCAL может быть использована как внут-
                         ри  макроса,  так и внутри процедуры.  Ее функции
                         определяются тем, где она применяется.

                         Внутри макроса LOCAL определяет временные  симво-
                         лические имена, которые при каждом вызове макроса
                         заменяются  на  уникальные  символические  имена.
                         Уникальное  символическое имя имеет вид ??<число>
                         где <число> принимает значение от 0 до 0FFFFh.

                         Внутри процедуры LOCAL определяет  имена, которые
                         позволяют  работать  со стеком,  базируясь на ре-
                         гистре BP. Первая локальная переменная располага-
                         ется в стеке со смещением 0. Если список аргумен-
                         тов директивы завершается знаком (=)  и  символи-
                         ческим именем,  то этому имени будет присвоен об-
                         щий размер (в байтах) переданного блока  перемен-
                         ных.  Это  значение  вы  можете  использовать для
                         того,  чтобы установит указатель на начало  блока
                         передаваемых переменных.

                         Описание каждой <локальной переменной> имеет сле-
                         дующий вид (первый вариант):

                         <локальное имя>:[[расстояние]PTR]тип[:счетчик]

                         Возможно использование альтернативного синтаксиса
                         определения   <локальной   переменной>    (второй
                         вариант):

                         <локальное имя>[[счетчик]][:[расстояние]PTR]тип]

         TASM2 #4-5/Док              = 173 =


                         где <локальное имя> - имя,  которое вы можете ис-
                         пользовать повсюду в процедуре для ссылки на  ло-
                         кальную переменную. Аргумент <тип> - это тип <ло-
                         кальной переменной>. Он может принимать значения:
                         WORD,   DATAPTR,   CODEPTR, DWORD,  FWORD, PWORD,
                         QWORD, TBYTE или имя структуры.

                         Если вы не определили аргумент <тип>, и использу-
                         ете  второй  вариант  синтаксиса определения <ло-
                         кальной переменной>, то по умолчанию <тип> прини-
                         мается равным WORD.

                         Аргумент <счетчик>  определяет количество элемен-
                         тов заданного типа, размещенных в стеке.

                         Аргумент <расстояние> и слово PTR указывают Турбо
                         ассемблеру на необходимость включения в объектный
                         модуль отладочной информации,необходимой для  от-
                         ладчика  (Debugger),  которая говорит о том,  что
                         эта локальная переменная является  указателем  на
                         другой элемент данных. Для обсуждений деталей см.
                         описание директивы PROC.

                         Ниже приведены некоторые примеры правильного  оп-
                         ределения локальных переменных:

                                   (первый  вариант)

                             LOCAL X:DWORD:4,Y:NEAR PTR WORD

                                   (второй вариант):

                             LOCAL X[4]:DWORD,Y:PTR STRUCNAME

                         Аргумент <тип>  показывает  сколько  места должно
                         быть зарезервировано для имени. Для элемента дан-
                         ных он может принимать следующие значения:

                          BYTE,  WORD,  DATAPTR,  CODEPTR, DWORD, FWORD,
                           PWORD, QWORD, TBYTE или имя структуры,

                         а для указателя на код:

                          NEAR,FAR или PROC


         TASM2 #4-5/Док              = 174 =

                         Директива LOCAL  должна  быть первой директивой в
                         макросе.  В процедуре она может  располагаться  в
                         любом месте, но она должна предшествовать первому
                         появлению того идентификатора,  который она опре-
                         деляет.

         См.также:       ARG,MACRO,PROC,USES

         Пример:           OnCarry MACRO func
                           LOCAL  done
                           jnc done
                           call func
                         done:
                           ENDM
                         read PROC NEAR
                           LOCAL N:WORD=LSIZE
                           push  bp
                           mov   bp,sp
                           sub   sp,LSIZE
                           mov   N,0
                           add   sp,LSIZE
                           pop   bp
                           ret
                         read ENDP



         TASM2 #4-5/Док              = 175 =

                                         LOCALS                                
         -----------------------------------------------------------------

         Назначение:     Разрешение использования локальных имен.

         Режим:          MASM, Ideal

         Синтаксис:      LOCALS [<префикс>]

         Замечания:      Локальные идентификаторы обычно начинаются с двух
                         символов (@@) и используются в блоках, ограничен-
                         ных  парой  PROC/ENDP внутри процедуры или не ло-
                         кальными идентификаторами снаружи  процедуры.  Не
                         локальные идентификаторы определяются директивами
                         PROC,  LABEL и (.). Если вы используете директиву
                         LOCALS, то любые символические имена, находящиеся
                         между не  локальными  идентификаторами  достижимы
                         только внутри этого блока. Это позволяет повторно
                         использовать имена внутри процедур и других  бло-
                         ков.

                         Аргумент <префикс> - это два символа,  которые вы
                         хотите использовать для  идентификации  локальных
                         имен.  Обычно,  знаки @@ указывают локальное имя.
                         Если вы имеете программу, в которой имена начина-
                         ются   с  знаков  @@,  или  вы  используете  свое
                         собственное соглашения о локальных именах,  тогда
                         вы  можете  установить  два других символа начала
                         локального имени. Эти два символа должны удовлет-
                         ворять  соглашениям ассемблера об именах,  напри-
                         мер, .? подходят, а .. - нет. При установке ново-
                         го  префикса  сразу  же разрешается использование
                         локальных имен.  Если вы запретили их использова-
                         ние директивой NOLOCALS,  префикс запоминается до
                         того момента,  когда вы снова разрешите локальные
                         имена директивой LOCALS.

                         Локальные имена автоматически разрешаются в режи-
                         ме Ideal. Использование локальных имен может быть
                         отменено директивой NOLOCALS. Тогда все последую-
                         щие имена становятся  доступными  во  всем  вашем
                         исходном файле.


         См.также:       NOLOCALS,IDEAL


         TASM2 #4-5/Док              = 176 =

         Пример:           LOCALS
                         abc PROC
                         @$1:
                           LOOP @$1
                         abc ENDP
                         xyz PROC
                         @@1:
                           LOOP @@1    ; нет ошибок
                         xyz ENDP




         TASM2 #4-5/Док              = 177 =

                                         MACRO                                 
         -----------------------------------------------------------------

         Назначение:     Определение макроса.

         Режим:          MASM, Ideal

         Синтаксис:      режим MASM:
                         <имя> MACRO [<параметр>[,<параметр]...]

                         режим Ideal:
                         MACRO <имя> [<параметр>[,<параметр]...]

         Замечания:      Для того,  чтобы в  теле  программы  использовать
                         макрос, требуется  указать <имя>,  под которым он
                         был определен.  Аргумент <параметр> - это фиктив-
                         ная переменная,  используемая внутри макроса, ко-
                         торой присваивается значение при трансляции.

                         Для завершения  макроса   используйте   директиву
                         ENDM.

         См.также:       ENDM

         Пример:           swap MACRO A,B
                              mov  ax,A
                              mov  A,B
                              mov  B,ax
                              ENDM




         TASM2 #4-5/Док              = 178 =

                                                                               
         %MACS
         -----------------------------------------------------------------

         Назначение:     Разрешение листинга макрорасширений.

         Режим:          MASM, Ideal

         Синтаксис:      %MAСS

         Замечания:      Директива   %MACS   отменяет  действие  директивы
                         %NOMACS. Строки, входящие в состав макросов будут
                         выданы в файл листинга.

         См.также:       .LALL, %NOMACS, .SALL, .XALL

         Пример:           %MACS
                         mymac  1,2,3  ; Текст макроса будет в файле
                                       ; листинга




         TASM2 #4-5/Док              = 179 =

                                                                               
         MASM
         -----------------------------------------------------------------
         Назначение:     Установка режима ассемблирования MASM.

         Режим:          MASM, Ideal

         Синтаксис:      MASM

         Замечания:      Директива MASM настраивает синтаксический  анали-
                         затор Турбо  ассемблера  на  синтаксис операторов
                         для режима MASM.  Для  более  полного  обсуждения
                         различий между синтаксисом операторов языка в ре-
                         жимах MASM и Ideal см. Приложение B.

                         По умолчанию предполагается, что вначале трансля-
                         ции установлен режим MASM.

         См.также:       QUIRKS,IDEAL

         Пример:           MASM
                         mov   al,es:24


                                         MASM51                                
         -----------------------------------------------------------------

         Назначение:     Разрешение ассемблирования  некоторых  расширений
                         языка, принятых в MASM 5.1.

         Режим:          MASM, Ideal

         Синтаксис:      MASM51

         Замечания:      Директива MASM51 разрешает  трансляцию  следующих
                         операторов языка, которые обычно не доступны Тур-
                         бо ассемблеру:

                         - директивы SUBSTR, CATSTR, SIZESTR, INSTR;

                         - продолжение строки при помощи символа (\);

                         - другой  синтаксис  аргументов   для   директивы
                           LOCAL.

                         Если вы также разрешили режим QUIRKS, то вам дос-

         TASM2 #4-5/Док              = 180 =

                         тупны следующие расширения языка:

                         - локальные метки определяются  при  помощи  двух
                           символов @@, а ссылки на них - @F и @B;

                         - переопределение переменных внутри процедур

                         - внешние  процедуры  языка  всегда имеют атрибут
                           PUBLIC.

         См.также:       NOMASM51

         Пример:           MASM51
                          MYSTR CATSTR , ; MYSTR = "ABCXYZ"




         TASM2 #4-5/Док              = 181 =

                                         .MODEL                                
         -----------------------------------------------------------------

         Назначение:     Устанавливает модель памяти.

         Режим:          MASM

         Синтаксис:      .MODEL [<модификатор модели>] <модель памяти>
                            [<имя модуля>] [,[<модификатор языка>]<язык>]
                            [,<модификатор модели>]

                         .MODEL TPASCAL

         Замечания:      Аргумент   <модификатор   модели>   должен   быть
                         NEARSTACK или  FARSTACK. Это  не позволяет  Турбо
                         ассемблеру сделать предположение, что SS является
                         частью DGOUP (как по умолчанию во всех  моделях).
                         Отметим,   что   синтаксис   предоставляет    две
                         возможности размещения  модификатора модели.  Обе
                         могут быть использованы. Размещение после <модели
                         памяти>  обеспечивает  совместимость  с  MASM 5.2
                         (Quick Assembler).

                         Параметр  <модель памяти> может принимать одно из
                         следующих значений:  TINY (крошечная), SMALL (ма-
                         лая),  MEDIUM  (средняя),  LARGE (большая),  HUGE
                         (огромная).  В моделях HUGE и LARGE сегменты опи-
                         саны одинаково, но различным образом определяется
                         символ @DataSize (для знакомства с описанием сим-
                         вола  @DataSize см.пункт "Другие директивы управ-
                         ления сегментами" в Главе 4 "Руководства  пользо-
                         вателя").

                         Для того,  чтобы  написать программу на языке ас-
                         семблера,  взаимодействующую с Турбо Паскалем ис-
                         пользуйте специальную форму директивы .MODEL:

                                 .MODEL TPASCAL

                         Эта директива информирует Турбо ассемблер о  том,
                         что  необходимо  использовать  такие  же названия
                         сегментов как и Tурбо Паскаль.  После этого опре-
                         деления вы  можете использовать  только директивы
                         .CODE  и  .DATA.  По  умолчанию  аргумент  <язык>
                         принимается  равным  TPASCAL.   При использовании
                         любых  директив  управления  сегментами,  которые

         TASM2 #4-5/Док              = 182 =

                         запрещены   в   Турбо   Паскале   будет    выдано
                         предупреждающее сообщение.

                         Для определения модели памяти вы должны использо-
                         вать директиву .MODEL до любой из директив .CODE,
                         ,.DATA, .STACK и др. Если до применения директивы
                         .MODEL вы использовали директивы .386 или  .386P,
                         то сегменты  кода и  данных будут  32-разрядными.
                         Надо быть уверенным, что вы хотите именно  этого.
                         Убедитесь,  что  вы  поместили  директиву  .MODEL
                         перед  .386  или  .386P,  если  вы  хотите  иметь
                         16-разрядные сегменты.

                         Аргумент <имя  модуля> используется в больших мо-
                         делях для  объявления  имени  кодового  сегмента.
                         Обычно, это позволяет избежать добавления (_TEXT)
                         в конец имени модуля.  Использование необязатель-
                         ного  параметра имени модуля дает вам больше гиб-
                         кости при построении программы из разных файлов и
                         модулей.

                         Параметр  <модификатор  языка>  -  это   WINDOWS,
                         ODDNEAR, ODDFAR или NORMAL. Модификатор  выбирает
                         автоматическую  генерацию  кода  для заполнения и
                         очистки стека при  процедурах входа и  выхода для
                         MSWindows   и   ODDNEAR   или   ODDFAR  наложений
                         (оверлеев).   NORMAL   (по   умолчанию)  выбирает
                         нормальную процедуру входа и выхода.

                         Аргумент <язык> сообщает Турбо ассемблеру, на ка-
                         ком языке написан  модуль, вызывающий вашу  прог-
                         рамму. Он может принимать следующие значения:

                         C, Pascal, Basic, FORTRAN, Prolog или NOLANGUAGE.

                         При использовании  директив  PROC  и  ENDP  Турбо
                         ассемблер  генерирует стандартные процедуры входа
                         в программу и выхода из нее.

                         Если в директиве .MODEL определен язык C,  то все
                         общие (public) и внешние (external) ссылки  будут
                         начинаться с символа подчеркивания (_).  Это спе-
                         циально сделано,  потому что, по умолчанию, Турбо
                         Си начинает все имена с символа (_).  Вам не обя-
                         зательно использовать директивы QUIRKS и  MASM51,
                         если вы хотите иметь имена с символом подчеркива-

         TASM2 #4-5/Док              = 183 =

                         ния для языка Си.

                         Аргумент <язык>  также сообщает транслятору поря-
                         док размещения параметров в стеке при вызове  мо-
                         дуля.  Если  <язык>  принимает  значение  Pascal,
                         Basic, FORTRAN, то предполагается,что в стеке ар-
                         гументы будут сохраняться слева направо,  в соот-
                         ветствии с тем порядком,  в котором они  указыва-
                         ются в операторе вызывающей программы.  При возв-
                         рате управления параметры, переданные вашей прог-
                         рамме из языка высокого уровня,  будут удалены из
                         стека при  помощи  специальной  формы  инструкции
                         RET, сгенерированной транслятором.

                         Если <язык>  принимает значения C или Prolog,  то
                         предполагается, что в стеке аргументы будут  сох-
                         раняться справа налево, в порядке, обратном тому,
                         в котором они указываются в операторе  вызывающей
                         программы. При возврате управления параметры, пе-
                         реданные вашей программе из языка высокого  уров-
                         ня, должны быть удалены из стека.

                         Отметим,  что  использование  директивы .MODEL не
                         требует  указания  языка.  Директивы PROC, EXTRN,
                         PUBLIC,  COMM,  GLOBAL   и  PUBLICDLL,  а   также
                         инструкция  CALL  имеют  указатель языка, который
                         временно  переопределяют  любую  другую  языковую
                         установку. Это позволяет вам, например, смешивать
                         и  согласовывать  в  одной  программе  процедуры,
                         вызывающие Си и Паскаль.

                         Если вы не используете аргумент <язык>, то дирек-
                         тива .MODEL определяет порядок использования  ди-
                         ректив управления сегментами.

                         Ниже приведенные таблицы показывают атрибуты сег-
                         ментов, принимаемые по умолчанию.



         TASM2 #4-5/Док              = 184 =

                                                                               
         ТАБЛИЦА 3.1 Модель Tiny
         -----------------------------------------------------------------
         Директива     Имя     Выравнивание  Доступность  Класс     Группа
         -----------------------------------------------------------------
         .CODE       _TEXT        WORD         PUBLIC    'CODE'     DGROUP
         .FARDATA    FAR_DATA     PARA         private   'FAR_DATA'
         .FARDATA?   FAR_BSS      PARA         private   'FAR_BSS'
         .DATA       _DATA        WORD         PUBLIC    'DATA'     DGROUP
         .CONST      CONST        WORD         PUBLIC    'CONST'    DGROUP
         .DATA?      _BSS         WORD         PUBLIC    'BSS'      DGROUP
         .STACK*     STACK        PARA         PUBLIC    'STACK'    DGROUP
         *STACK не добавляется к DGROUP, если указан FARSTACK в .MODEL
         -----------------------------------------------------------------
                                                                               
         ТАБЛИЦА 3.2 Модель Small
         -----------------------------------------------------------------
         Директива     Имя     Выравнивание  Доступность  Класс     Группа
         -----------------------------------------------------------------
         .CODE       _TEXT        WORD         PUBLIC    'CODE'
         .FARDATA    FAR_DATA     PARA         private   'FAR_DATA'
         .FARDATA?   FAR_BSS      PARA         private   'FAR_BSS'
         .DATA       _DATA        WORD         PUBLIC    'DATA'     DGROUP
         .CONST      CONST        WORD         PUBLIC    'CONST'    DGROUP
         .DATA?      _BSS         WORD         PUBLIC    'BSS'      DGROUP
         .STACK*     STACK        PARA         PUBLIC    'STACK'    DGROUP
         *STACK не добавляется к DGROUP, если указан FARSTACK в .MODEL
         -----------------------------------------------------------------
                                                                               
         ТАБЛИЦА 3.3 Модель Medium
         -----------------------------------------------------------------
         Директива     Имя     Выравнивание  Доступность  Класс     Группа
         -----------------------------------------------------------------
         .CODE       name_TEXT    WORD         PUBLIC    'CODE'
         .FARDATA    FAR_DATA     PARA         private   'FAR_DATA'
         .FARDATA?   FAR_BSS      PARA         private   'FAR_BSS'
         .DATA       _DATA        WORD         PUBLIC    'DATA'     DGROUP
         .CONST      CONST        WORD         PUBLIC    'CONST'    DGROUP
         .DATA?      _BSS         WORD         PUBLIC    'BSS'      DGROUP
         .STACK*     STACK        PARA         PUBLIC    'STACK'    DGROUP
         *STACK не добавляется к DGROUP, если указан FARSTACK в .MODEL
         -----------------------------------------------------------------



         TASM2 #4-5/Док              = 185 =

                                                                               
         ТАБЛИЦА 3.4 Модель Compact
         -----------------------------------------------------------------
         Директива      Имя     Выравнивание  Доступность  Класс    Группа
         -----------------------------------------------------------------
         .CODE        _TEXT        WORD         PUBLIC    'CODE'
         .FARDATA     FAR_DATA     PARA         private   'FAR_DATA'
         .FARDATA?    FAR_BSS      PARA         private   'FAR_BSS'
         .DATA        _DATA        WORD         PUBLIC    'DATA'    DGROUP
         .CONST       CONST        WORD         PUBLIC    'CONST'   DGROUP
         .DATA?       _BSS         WORD         PUBLIC    'BSS'     DGROUP
         .STACK*      STACK        PARA         PUBLIC    'STACK'   DGROUP
         *STACK не добавляется к DGROUP, если указан FARSTACK в .MODEL
         -----------------------------------------------------------------
                                                                               
         ТАБЛИЦА 3.5 Модель Huge и Large
         -----------------------------------------------------------------
         Директива      Имя     Выравнивание  Доступность  Класс    Группа
         -----------------------------------------------------------------
         .CODE        name_TEXT    WORD         PUBLIC    'CODE'
         .FARDATA     FAR_DATA     PARA         private   'FAR_DATA'
         .FARDATA?    FAR_BSS      PARA         private   'FAR_BSS'
         .DATA        _DATA        WORD         PUBLIC    'DATA'    DGROUP
         .CONST       CONST        WORD         PUBLIC    'CONST'   DGROUP
         .DATA?       _BSS         WORD         PUBLIC    'BSS'     DGROUP
         .STACK*      STACK        PARA         PUBLIC    'STACK'   DGROUP
         *STACK не добавляется к DGROUP, если указан FARSTACK в .MODEL
         -----------------------------------------------------------------
                                                                               
         ТАБЛИЦА 3.6 Модель TPASCAL
         -----------------------------------------------------------------
                  Директива      Имя     Выравнивание  Доступность
         -----------------------------------------------------------------
                  .CODE        _TEXT        BYTE         PUBLIC
                  .DATA        _DATA        WORD         PUBLIC
         -----------------------------------------------------------------

         См.также:       .CODE,.DATA,.FARDATA,.FARDATA?,.STACK

         Пример:         .MODEL MEDIUM ; Установим большой код,
                                       ;  маленькие  данные




         TASM2 #4-5/Док              = 186 =

                                                                               
         MODEL
         -----------------------------------------------------------------

         Назначение:     Установка модели памяти для директив управления
                         сегментами.

         Режим:          MASM, Ideal

         Синтаксис:      MODEL

         См.также:       .MODEL


                                        MULTERRS                               
         -----------------------------------------------------------------

         Назначение:     Разрешение  такого  режима,  при котором в случае
                         обнаружения в одной строке исходного текста более
                         одной  ошибки будет выдано по одному сообщению на
                         каждую ошибку.

         Режим:          MASM, Ideal

         Синтаксис:      MULTIERRS

         Замечания:      Директива  MULTERRS устанавливает такой режим,  в
                         котором для одной строки исходного  текста  может
                         быть выдано более одного предупреждающего сообще-
                         ния или сообщения об ошибке.  Это иногда  полезно
                         для поиска "неуловимых" ошибок,  или тогда, когда
                         строка может содержать более одной ошибки.

                         Отметим, что  иногда  дополнительные сообщения об
                         ошибках могут появиться в случае  так  называемой
                         "цепной   реакции",   обусловленной  единственной
                         ошибкой в программе.

         Сm.также:       NOMULTERRS

         Пример:           MULTERRS
                          mov  ax,[bp+abc  ; 2 ошибки :
                                           ; 1. Не определен идентификатор
                                                abc
                                           ; 2. Нет правой скобки (])


         TASM2 #4-5/Док              = 187 =

                         При трансляции будут выданы следующие сообщения

                         ** Error ** MULTERRS.ASM(6)Undefined symbol:ABC
                         ** Error ** MULTERRS.ASM(6)Need right square
                                                      bracket

                                                                               
         NAME
         -----------------------------------------------------------------

         Назначение:     Определение имени файла объектного модуля.

         Режим:          Ideal

         Синтаксис:      NAME <имя>

         Замечания:      Турбо ассемблер по умолчанию использует для имени
                         файла объектного  модуля  атрибуты  (имя   файла,
                         диск,  директорий) файла исходной программы.  Для
                         того,  чтобы изменить эти атрибуты,  необходимо в
                         аргументе  <имя>  директивы NAME указать их новые
                         значения.

         Пример:         NAME loader





         TASM2 #4-5/Док              = 188 =

                                                                               
         %NEWPAGE
         -----------------------------------------------------------------

         Назначение:     Начало новой страницы в файле листинга.

         Режим:          MASM, Ideal

         Синтаксис:      %NEWPAGE

         Замечания:      Те строки  исходного  текста,  которые  находятся
                         после  этой директивы будут в файле листинга раз-
                         мещены на новой странице.

         См.также:       PAGE

         Пример:           %NEWPAGE
                         ; Эта строка начнет новую страницу в листинге


                                        %NOCONDS                               
         -----------------------------------------------------------------

         Назначение:     Отмена появления в файле листинга операторов, на-
                         ходившихся в не транслированных (из-за невыполне-
                         ния условий) условных блоках.

         Режим:          MASM, Ideal

         Синтаксис:      %NOCONDS

         Замечания:      После этой директивы файл листинга не  будет  со-
                         держать операторов,  находившихся в условных бло-
                         ках, если условие блока не было выполнено.

         См.также:       %CONDS,.LFCOND,.SFCOND,.TFCOND

         Пример:          %NOCONDS
                         IF 0
                            mov ax,1 ; Этой строки не будет в листинге
                                     ; так как условие ложно
                         ENDIF




         TASM2 #4-5/Док              = 189 =

                                        %NOCREF                                
         -----------------------------------------------------------------

         Назначение:     Запрещение  появления в файле листинга перекрест-
                         ных ссылок.

         Режим:          MASM, Ideal

         Синтаксис:      %NOCREF [<символическое имя> ...]

         Замечания:      Директива %NOCREF останавливает выдачу информации
                         о перекрестных ссылках.

                         Если вы используете директиву %NOCREF без операн-
                         дов, то запрещается вся информация о перекрестных
                         ссылках.  Если  вы  указываете одно или несколько
                         <символических имен>, то запрещается информация о
                         перекрестных ссылках только для указанных имен.

         См.также:       %CREF,.CREF,.XCREF,%CREFALL,%CREFREF,%CREFUREF

         Пример:         %NOCREF xyz
                         wval DW 0  ;
                         xyz  DW 0  ; Информация о перекрестных ссылках
                                    ; запрещена

                                        %NOCTLS                                
         -----------------------------------------------------------------

         Назначение:     Запрещение  появления  в  файле листинга директив
                         управления листингом.

         Режим:          MASM, Ideal

         Синтаксис:      %NOCTLS

         Замечания:      Директива  %NOCTLS  отменяет  действие  директивы
                         %CTLS.  После ее использования директивы управле-
                         ния листингом не будут появляться в файле листин-
                         га.

                         В начале трансляции режим,  устанавливаемый  этой
                         директивой, принимается по умолчанию.

         См.также:       %CTLS

         TASM2 #4-5/Док              = 190 =


         Пример:         %NOCTLS
                         %LIST  ; Этой директивы не будет в файле
                                ; листинга





         TASM2 #4-5/Док              = 191 =

                                         NOEMUL                                
         -----------------------------------------------------------------

         Назначение:     Отмена режима эмуляции инструкций сопроцессора.

         Режим:          MASM, Ideal

         Синтаксис:      NOEMUL

         Замечания:      Директива NOEMUL заставляет Турбо ассемблер гене-
                         рировать инструкции, которые будут выполняться на
                         арифметическом сопроцессоре 80x87.  Возможно  ис-
                         пользование этой директивы совместно с директивой
                         EMUL,  для того,  чтобы управлять  размещением  в
                         программе  реальных инструкций для сопроцессора и
                         эмуляций этих инструкций.

                         В начале трансляции режим,  устанавливаемый  этой
                         директивой, принимается по умолчанию.

         См.также:       EMUL

         Пример:         NOEMUL ; Ассемблирование инструкции для
                         finit  ; арифметического сопроцессора
                         EMUL




         TASM2 #4-5/Док              = 192 =

                                        %NOINCL                                
         -----------------------------------------------------------------

         Назначение:     Запрещение листинга включаемых файлов.

         Режим:          MASM, Ideal

         Синтаксис:      %NOINCL

         Замечания:      Директива %NOINCL останавливает выдачу  в листинг
                         исходного  текста  включаемого (include) файла до
                         тех пор, пока в программе не встретится директива
                         %INCL,  отменяющая  ее.  Данная  директива бывает
                         весьма полезна,  если длинный include-файл  (типа
                         списка определений EQU) вам просматривать и изме-
                         нять не нужно.

         См.также:       %INCL

         Пример:         %NOINCL
                         INCLUDE DEFS.INC ; не появится в листинге





         TASM2 #4-5/Док              = 193 =

                                                                               
         NOJUMPS
         -----------------------------------------------------------------

         Назначение:     Отмена режима JUMPS.

         Режим:          MASM, Ideal

         Синтаксис:      NOJUMPS

         Замечания:      Если вы используете директиву NOJUMPS,  то  можно
                         увидеть  те  строки  в исходном тексте программы,
                         где требуется "расширение" команд условных  пере-
                         ходов.

                         В начале  трансляции режим,  устанавливаемый этой
                         директивой, принимается по умолчанию.

         См.также:       JUMPS


                                                                               
         %NOLIST
         -----------------------------------------------------------------

         Назначение:     Подавление листинга.

         Режим:          MASM, Ideal

         Синтаксис:      %NOLIST

         Замечания:      Директива %NOLIST подавляет формирование листинга
                         программы до тех пор,  пока ее действие не  будет
                         прекращено директивой %LIST.  Эта директива отме-
                         няет действие других директив управления  листин-
                         гом.

         См.также:       .LIST, %LIST, .XLIST

         Пример:           %NOLIST
                           jmp   xyz ; Эта строка не появится в листинге





         TASM2 #4-5/Док              = 194 =

                                        NOLOCALS                               
         -----------------------------------------------------------------

         Назначение:     Запрещение использования локальных имен.

         Режим:          MASM, Ideal

         Синтаксис:      NOLOCALS

         Замечания:      Если  директивой  LOCALS  разрешено использование
                         локальных идентификаторов, то любое символическое
                         имя,  начинающееся со знаков @@,  будет восприни-
                         маться  как  локальное.  Если  вы используете эти
                         знаки по своему усмотрению и не хотите, чтобы эти
                         имена  были  локальными,  то можете отменить этой
                         директивой режим их использования.

                         В режиме MASM локальные идентификаторы запрещены.

         См.также:       LOCALS,MASM

         Пример:         NOLOCALS
                         @@Buf DB 10 DUP(?)


                                                                               
         %NOMACS
         -----------------------------------------------------------------

         Назначение:     Подавление  листинга макрорасширений,  которые не
                         генерируют код.

         Режим:          MASM,Ideal

         Синтаксис:      %NOMAСS

         Замечания:      Директива %NOMACS не допускает появления  в файле
                         листинга строк исходного текста,  не генерирующих
                         код.

         См.также:       .LALL,%MACS,.SALL





         TASM2 #4-5/Док              = 195 =

                                        NOMASM51                               
         -----------------------------------------------------------------

         Замечания:      Директива NOMASM51 подавляет ассемблирование рас-
                         ширений языка, принятых в MASM 5.1.

         Режим:          MASM, Ideal

         Синтаксис:      MASM51

         Замечания:      Директива NOMASM51 подавляет ассемблирование рас-
                         ширений  языка,  принятых  в  MASM 5.1.  В начале
                         трансляции режим,  устанавливаемый этой  директи-
                         вой, принимается по умолчанию.

         См.также:       MASM51

         Пример:           MASM51
                         SLEN SIZESTR      ; SLEN = 5
                         NOMASM51
                         CATSTR PROC NEAR
                              ....
                           CATSTR ENDP


                                       NOMULTERRS                              
         -----------------------------------------------------------------

         Название:       Отмена  режима  MULTERRS.  (Позволяет только одну
                         ошибку на исходной строке.)

         Режим:          MASM, Ideal

         Синтаксис:      NOMULTERRS

         Замечания:      Директива NOMULTERRS устанавливает  такой  режим,
                         при котором для одной строки исходного текста мо-
                         жет быть выдано не более  одного предупреждающего
                         сообщения  или  сообщения об ошибке.  Если строка
                         исходного текста содержит более одной  ошибки, то
                         Турбо ассемблер сообщит о наиболее важной из них.
                         Если вы предпочитаете самостоятельно решать,  ка-
                         кая  из  ошибок является наиболее важной,  то ис-
                         пользуйте директиву MULTERRS.


         TASM2 #4-5/Док              = 196 =

                         В начале трансляции режим,  устанавливаемый  этой
                         директивой, принимается по умолчанию.

         См.также:       MULTERRS

         Пример:         NOMULTERRS
                         mov  ax,[bp+abc  ; 1 ошибка :
                                           ; 1. Не определен идентификатор
                                                abc
                         При трансляции будет выдано 1  сообщение

                         ** Error ** MULTERRS.ASM(6)Undefined symbol:ABC





         TASM2 #4-5/Док              = 197 =

                                                                               
         %NOSYMS
         -----------------------------------------------------------------

         Назначение:     Подавляет появление в файле листинга таблицы сим-
                         волических имен.

         Режим:          MASM, Ideal

         Синтаксис:      %NOSYMS

         Замечания:      Директива %NOSYMS  подавляет  появление  в  файле
                         листинга  таблицы символических имен.  Обычно эта
                         таблица,  содержащая все символические имена, оп-
                         ределенные  в  программе,  располагается  в конце
                         файла листинга.

         См.также:       %SYMS

         Пример:          %NOSYMS ; Таблицы символических имен не будет
                                  ; в листинге


                                                                               
         %NOTRUNC
         -----------------------------------------------------------------

         Назначение:     Перенос слишком длинных полей в файле листинга.

         Режим:          MASM, Ideal

         Синтаксис:      %NOTRUNC

         Замечания:      Обычно, если одна строка исходного текста генери-
                         рует больше кода,  чем может поместиться на одной
                         строке листинга, то она усекается. После примене-
                         ния  этой директивы строки листинга не будут усе-
                         каться, а будут переноситься с одной на другую.

                         Используйте директиву %TEXT для установления  ши-
                         рины исходного поля.

         См.также:       %BIN,%TEXT,%TRUNC

         Пример:          %NOTRUNC

                         DD 4 DUP (1,2,3,4) ; строка не будет усечена

         TASM2 #4-5/Док              = 198 =

                                        %NOWARN                                
         -----------------------------------------------------------------

         Назначение:     Подавление вывода  предупреждающих  сообщений  во
                         время трансляции.

         Режим:          MASM, Ideal

         Синтаксис:      %NOWARN [<класс предупреждения>]

         Замечания:      При  использовании директивы %NOWARN без операнда
                         то подавляются  появление  всех   предупреждающих
                         сообщений.  Если  вы  укажете <класс предупрежде-
                         ния>,  то будет подавлен вывод только этого  пре-
                         дупреждения. Каждому предупреждению соответствует
                         трехбуквенный идентификатор (<класс  предупрежде-
                         ния> - см.  директиву WARN ). Аналогичные иденти-
                         фикаторы используются в  опции  командной  строки
                         /W.

         См.также:       WARN

         Пример:         NOWARN OVF   ; Подавления предупреждения об
                                      ; арифметическом переполнении
                         DW 1000*1234 ; Это предупреждение запрещено


                                          ORG                                  
         -----------------------------------------------------------------

         Назначение:     Установка значения счетчика адреса в текущем сег-
                         менте.

         Режим:          MASM, Ideal

         Синтаксис:      ORG <выражение>

         Замечания:      Аргумент <выражение> не должен  содержать иденти-
                         фикаторов, неопределенных к данному моменту тран-
                         сляции. Он может содержать как константу и смеще-
                         ние идентефикатора в текущем сегменте,  так и те-
                         кущее значение счетчика адреса ($).

                         При помощи этой директивы вы можете изменять  со-
                         держимое счетчика адреса. Это может потребоваться

         TASM2 #4-5/Док              = 199 =

                         для того, чтобы вернуться и заполнить таблицу те-
                         ми элементами, значения которых к моменту опреде-
                         ления этой таблицы  неизвестны.  Будьте  особенно
                         аккуратны при использовании этой директивы.

                         Эта директива  может  быть также использована для
                         того,  чтобы "связать" метку с абсолютным адресом
                         оперативной памяти.  Директива ORG может устанав-
                         ливать начальный адрес .COM-файлов.

         См.также:       SEGMENT

         Пример:         PROG SEGMENT
                         ORG 100h ; установка смещения для COM.-файла





         TASM2 #4-5/Док              = 200 =

                                          %OUT                                 
         -----------------------------------------------------------------

         Назначение:     Вывод сообщения на экран из транслируемого файла.

         Режим:          MASM

         Синтаксис:      %OUT <текст>

         Замечания:      Аргумент <текст> - это любое  сообщение,  которое
                         вы  хотите вывести на экран.  Оно может содержать
                         любые идентификаторы и не интерпретируется иначе.
                         Сообщение  выдается на стандартное устройство вы-
                         вода (обычно на экран).  При желании  стандартное
                         устройство   вывода   может  быть  переопределено
                         средствами DOS.

                         Также эта директива используется для  того, чтобы
                         знать,  какие блоки условного ассемблирования бу-
                         дут включены в программу.

         См.также:       DISPLAY

         Пример:         %OUT Assembling graphics driver


                                                                               
         P186
         -----------------------------------------------------------------

         Назначение:     Разрешает ассемблирование инструкций для  микроп-
                         роцессора 80186.

         Режим:          MASM, Ideal

         См.также:       .8086,.286С,.286P,.386,.386С,.386P,286,P286,
                         P286P,P386,P386P,.186,P8086





         TASM2 #4-5/Док              = 201 =

                                                                               
         P286
         -----------------------------------------------------------------

         Назначение:     Разрешает ассемблирование инструкций для  микроп-
                         роцессора 80286.

         Режим:          MASM, Ideal

         См.также:       .8086,.286С,.286P,.386,.386С,.386P,P186,P286P,
                         P386,P386P,.186,P8086


                                                                               
         P286N
         -----------------------------------------------------------------

         Назначение:     Разрешает ассемблирование непривилегированных ин-
                         струкций микропроцессора 80286.

         Режим:          MASM, Ideal

         См.также:       .8086,.286,.286P,.386,.386С,.386P,P186,P286P,
                         P386,P386P,.186,P8086
                                                                               
         P286P
         -----------------------------------------------------------------

         Назначение:     Разрешает ассемблирование привилегированных ин-
                         струкций микропроцессора 80286.

         Режим:          MASM, Ideal

         См.также:       .8086,.286,.286P,.386,.386С,.386P,P186,P286P,
                         P386,P386P,.186,P8086



         TASM2 #4-5/Док              = 202 =

                                                                               
         P287
         -----------------------------------------------------------------

         Назначение:     Разрешает  ассемблирование  инструкций для сопро-
                         цессора 80287.

         Режим:          MASM, Ideal

         См.также:       .8087,.287,.387,.PNO87,.P287

                                                                               
         P386
         -----------------------------------------------------------------

         Назначение:     Разрешает ассемблирование инструкций для  микроп-
                         роцессора 80386.

         Режим:          MASM, Ideal

         См.также:       .8086,.286,.286P,.386,.386С,.386P,P186,P286P,
                         P386,P386P

                                                                               
         P386N
         -----------------------------------------------------------------

         Назначение:     Разрешает ассемблирование непривилегированных ин-
                         струкций микропроцессора 80386.

         Режим:          MASM, Ideal

         См.также:       .8086,.286,.286P,.386,.386С,.386P,P186,P286P,
                         P386P



         TASM2 #4-5/Док              = 203 =

                                                                               
         P386P
         -----------------------------------------------------------------

         Назначение:     Разрешает ассемблирование привилегированных ин-
                         струкций микропроцессора 80386.

         Режим:          MASM, Ideal

         См.также:       .8086,.286,.286P,.386,.386С,.386P,P186,P286P,
                         P386P


                                                                               
         P387
         -----------------------------------------------------------------

         Назначение:     Применение этой директивы разрешает ассемблирова-
                         ние инструкций для микропроцессора 80387 (арифме-
                         тического сопроцессора).

         Режим:          MASM, Ideal

         См.также:       .8087,.287,.387,.PNO87,.P287


                                                                               
         P8086
         -----------------------------------------------------------------

         Назначение:     Разрешает ассемблирование инструкций  только  для
                         микропроцессора 8086.

         Режим:          MASM, Ideal

         См.также:       .186,.8086,.286,.286P,.386,.386С,.386P,286,
                         P286,P286P,P386,P386P





         TASM2 #4-5/Док              = 204 =

                                                                               
         P8087
         -----------------------------------------------------------------

         Назначение:     Разрешает ассемблирование инструкций  только  для
                         микропроцессора 8087 (арифметического сопроцессо-
                         ра).

         Режим:          MASM, Ideal

         См.также:       .287,.387,.8087,8087,.PNO87,.P287,P387


                                          PAGE                                 
         -----------------------------------------------------------------

         Назначение:     Установка размеров страницы листинга,  начало но-
                         вой страницы.

         Режим:          MASM

         Синтаксис:      PAGE [<высота>][,<ширина>]
                         PAGE +

         Замечания:      Аргумент <высота> определяет количество  строк  в
                         каждой странице листинга (минимальное значение10,
                         максимальное - 255). Аргумент <ширина> определяет
                         количество  количество  позиций в строке листинга
                         (минимальное значение - 59,  максимальное - 255).
                         Если вы не используете ни первого, ни второго ар-
                         гумента,  то текущие параметры страницы  изменены
                         не будут. Для того, чтобы изменить только один из
                         параметров,  необходимо указать его новое  значе-
                         ние,  а  на месте неизменяемого параметра - запя-
                         тую.

                         При использовании директивы PAGE  со  знаком  (+)
                         начинается новая страница, номер секции изменяет-
                         ся на 1, нумерация страниц начинается сначала.

                         Если вы используете директиву PAGE  без  аргумен-
                         тов, то будет начата новая страница без изменения
                         номера секции.

         См.также:       %NEWPAGE,%PAGESIZE


         TASM2 #4-5/Док              = 205 =

         Пример:         PAGE      ; Начало новой страницы листинга
                         PAGE  ,80 ; Ширина страницы = 80, высота не
                                   ; изменяется


                                       %PAGESIZE                               
         -----------------------------------------------------------------

         Назначение:     Установка размеров страницы листинга,  начало но-
                         вой страницы.

         Режим:          MASM, Ideal

         Синтаксис:      %PAGESIZE [<высота>][,<ширина>]

         Замечания:      Аргумент <высота> определяет количество  строк  в
                         каждой странице  листинга (минимальное значение -
                         10,  максимальное - 255). Аргумент <ширина> опре-
                         деляет  количество  количество  позиций  в строке
                         листинга (минимальное значение - 59, максимальное
                         - 255).

                         Если вы не используете ни первого, ни второго ар-
                         гумента,  то текущие параметры страницы  изменены
                         не будут. Для того, чтобы изменить только один из
                         параметров,  необходимо указать его новое  значе-
                         ние,  а  на месте неизменяемого параметра - запя-
                         тую.

         См.также:       PAGE

         Пример:         %PAGESIZE 66,132 ; широкий листинг, нормальная
                                          ; высота
                         %PAGESIZE   ,80  ; ширина =80, высота осталась
                                          ; прежней





         TASM2 #4-5/Док              = 206 =

                                         %PCNT                                 
         -----------------------------------------------------------------

         Назначение:     Установка  ширины поля сегмент:смещение в листин-
                         ге.

         Режим:          MASM, Ideal

         Синтаксис:      %PCNT <ширина>

         Замечания:      Аргумент <ширина> - это количество позиций, кото-
                         рое вы хотите зарезервировать под смещение внутри
                         текущего сегмента. По умолчанию аргумент <ширина>
                         принимает значение 4  знака  для  16-ти  битового
                         сегмента  и  8  знаков для 32-х битового сегмента
                         (для 80386). При помощи директивы %PCNT вы можете
                         изменять эти значения.

         См.также:       %BIN,%DEPTH,%LINUM

         Пример:          %PCNT 3
                         ORG 1234h ; будет напечатано 234


                                                                               
         PNO87
         -----------------------------------------------------------------

         Назначение:     Подавление  ассемблирования  инструкций арифмети-
                         ческого сопроцессора.

         Режим:          MASM, Ideal

         Синтаксис:      PNO87

         Замечания:      Обычно Турбо ассемблер  фирмы  Borland  позволяет
                         ассемблировать инструкции для семейства сопроцес-
                         соров 80x87. Эта директива используется для того,
                         чтобы быть уверенным в том, что ваша программа не
                         содержит инструкций для сопроцессора.

         См.также:       .8087,.287,.387,P8087,P287,P387

         Пример:         PNO87
                         fadd ; будет сообщение об ошибке


         TASM2 #4-5/Док              = 207 =

                                        %POPLCTL                               
         -----------------------------------------------------------------

         Назначение:     Восстановление  директив  управления листингом из
                         стека.

         Режим:          MASM, Ideal

         Синтаксис:      %POPLCTL

         Замечания:      Директива  %POPLCTL восстанавливает директивы уп-
                         равления листингом из стека,  в который они  были
                         помещены директивой %PUSHLCTL. Могут быть восста-
                         новлены  любые  директивы  управления   листингом
                         (%MACS,%LIST и др.),  кроме тех, которые устанав-
                         ливают ширину различных полей  (%PCNT,  %DEPTH  и
                         др.).  Эта директива обычно используется в макро-
                         сах и INCLUDE-файлах для того, чтобы восстановить
                         действие предыдущих директив управления листингом
                         при завершении текста макроса  или INCLUDE-файла.

         См.также:       %PUSHLCTL

         Пример:         %PUSHLCTL
                         %NOLIST
                         %NOMACS
                          . . .

                         %POPLCTL  ; восстановление директив управления
                                   ; листингом

                                          PROC                                 
         -----------------------------------------------------------------

         Назначение:     Определение начала процедуры.

         Режим:          MASM, Ideal

         Синтаксис:      режим MASM:
                         <имя> PROC [<модификатор языка>] [<язык>]
                         [<расстояние>] [USES <регистры>,]
                         [<параметр>[,<параметр>] ...]
                         [RETURNS <параметр>[,<параметр>]...]



         TASM2 #4-5/Док              = 208 =

                         режим Ideal:
                          PROC [<модификатор языка>] [<язык>] <имя>
                         [<расстояние>] [USES <регистры>,]
                         [<параметр>[,<параметр>] ...]
                         [RETURNS <параметр>[,<параметр>]...]

         Замечания:      Аргумент <имя>  - это  имя процедуры.    Параметр
                         <модификатор  языка>  -  это  WINDOWS,   ODDNEAR,
                         ODDFAR   или   NORMAL.     Модификатор   выбирает
                         автоматическую  генерацию  кода  для заполнения и
                         очистки стека при  процедурах входа и  выхода для
                         MSWindows   и   ODDNEAR   или   ODDFAR  наложений
                         (оверлеев)  или  нормальную  процедуру  входа   и
                         выхода. Определенный в директиве PROC модификатор
                         языка переписывает (только для данной  процедуры)
                         любой  модификатор  языка,   который  был   ранее
                         установлен  директивой  .MODEL.  Язык  -  это  C,
                         PASCAL, BASIC, FORTRAN, PROLOG или NOLANGUAGE,  и
                         выбирает   автоматическую   генерацию   кода  для
                         заполнения и очистки стека при процедурах входа и
                         выхода  для  указанных  языков.  Определенный   в
                         директиве  PROC  язык  переписывает  (только  для
                         данной  процедуры)   любой  язык,   который   был
                         установлен предыдущими директивами. Отметим,  что
                         вы  больше  не  нуждаетесь  в  директиве .MODEL в
                         вашей   программе   для   генерации   входного  и
                         выходного кода для ваших процедур.

                         Аргумент <расстояние>  определяет тип  инструкции
                         возврата   управления   процедурой.    Он   может
                         принимать  значения  NEAR  и  FAR.  Он  позволяет
                         изменить размер  модели памяти,  установленной по
                         умолчанию.   Если  вы  не  используете   директив
                         управления   сегментами,    то    по    умолчанию
                         принимается NEAR. В моделях TINY, SMALL и COMPACT
                         аргумент <расстояние> принимается равным NEAR,  а
                         во  всех   остальных  моделях   памяти  -    FAR.
                         <расстояние> определяет, будет ли инструкция RET,
                         обнаружена   внутри    процедуры,    генерировать
                         "ближнюю"  или  "дальнюю"  инструкцию   возврата.
                         Предполагается, что -процедура будет вызвана
                         "длинной"  (FAR)   инструкцией  CALL,   а   NEAR-
                         процедура - "короткой" (NEAR) инструкцией CALL.

                         Аргумент  <регистры>  -  это  список  регистров и
                         простых  знаков,  используемых  процедурой.   Эти

         TASM2 #4-5/Док              = 209 =

                         регистры  должны  быть  сохранены  при  входе   в
                         процедуру  и  восстановлены  при  выходе  из нее.
                         Имена регистров в списке разделяются пробелами.
                         Например:

                                 Mine PROC USES ax bx foo

                         Будут сохранены и  установлены регистры AX  и BX,
                         также как и слово foo.

                         Аргумент <параметр> определяет параметр,  переда-
                         ваемый  процедуре.  Указатель  языка  в директиве
                         PROC или в директиве .MODEL, если он не указан  в
                         PROC, определяет, будут ли аргументы находиться в
                         стеке в обратном  порядке. Вы должны  обязательно
                         располагать аргументы в  том же порядке,  в каком
                         они появляются в  функции языка высокого  уровня,
                         который  вызывает   процедуру.  Турбо   ассемблер
                         прочитает  их  в   обратном  порядке,  если   это
                         необходимо.  Каждый  <параметр>  имеет  следующий
                         синтаксис:

                         <имя параметра>[[число1]] [:[<расстояние>]PTR ]
                                 <тип> [:число2]

                         где <имя параметра> - имя,  которое вы можете ис-
                         пользовать повсюду в процедуре для ссылки на  па-
                         раметр. Необязательный аргумент <расстояние> (в
                         этой директиве) может принимать значения NEAR или
                         FAR  для  того, чтобы определить размер указателя
                         на параметр.

                         Аргумент  <тип>  -  это  тип данных параметра. Он
                         может принимать  значения:   WORD, DWORD,  FWORD,
                         PWORD, QWORD, TBYTE или имя структуры.   <число1>
                         и <число2> - это количество элементов  указанного
                         типа.       Общее    число    определяется    как
                         <число1>*<число2>.       По    умолчанию    <тип>
                         принимается равным WORD.

                         Если вы добавляете  PTR, показывая, что  аргумент
                         является  действительным  указателем  на  данное,
                         Турбо   ассемблер   добавит   здесь    отладочную
                         информацию для Турбо Отладчика (Turbo  Debugger).
                         Использование   PTR   вызовет   только  генерацию
                         дополнительной отладочной  информации, и  никаких

         TASM2 #4-5/Док              = 210 =

                         кодов ассемблера создано не будет. Вы должны  все
                         же  писать  код  для  доступа  к   действительным
                         данным, используя аргумент указатель.

                         Если вы используете слово PTR без указателя  NEAR
                         или   FAR   перед   ним,   то   Турбо   ассемблер
                         устанавливает   размер   параметра   исходя    из
                         выбранной модели памяти и, для 80386  процессора,
                         текущего  размера  адреса  сегмента  (16  или  32
                         бита).  Если  используются  модели  TINY, SMALL и
                         MEDIUM, то под указатель отводится слово  (WORD),
                         иначе - двойное слово (DWORD).  При использовании
                         микропроцессора  80386  и  32-х  битного   адреса
                         сегмента  для  моделей  TINY,  SMALL и MEDIUM под
                         указатель  отводится  двойное  слово  (DWORD),  а
                         иначе - 8 байт (FWORD).

                         Ключевое слово  RETURNS  объявляет  один или нес-
                         колько параметров, которые должны быть восстанов-
                         лены  из стека при возврате управления вызывающей
                         программе.  Обычно, если вы определили директивой
                         .MODEL язык PASCAL или TPASCAL, или PASCAL в этой
                         же директиве PROC, то при возврате управления все
                         параметры будут восстановлены  из стека. Если  вы
                         поместите,  при  описании  процедуры,   параметры
                         после  ключевого  слова  RETURNS,  то  они  будут
                         оставлены  в  стеке  для  того,  чтобы вызывающая
                         программа использовала их и сама очистила стек. В
                         частности,  вы  должны  определить   возвращаемое
                         значение строки языка  PASCAL, поместив ее  после
                         ключевого слова RETURNS.

                         Для  окончания  процедуры  используйте  директиву
                         ENDP. Вы должны указать инструкцию RET перед ENDP
                         для  того,   чтобы  возвратить   управление   вы-
                         зывающей программе.

                         Внутри блока PROC/ENDP вы можете использовать ло-
                         кальные символические имена, то есть имена, кото-
                         рые доступны только операторам  внутри процедуры.
                         Как правило, они начинаются с двух символов (@@).

                         Вы можете вкладывать директивы PROC/ENDP, если вы
                         хотите;  вы делаете локальные идентификаторы вло-
                         женными также.


         TASM2 #4-5/Док              = 211 =

                         Локальные идентификаторы видны только внутри  те-
                         кущей процедуры.

         См.также:       ARG,ENDP,LOCAL,LOCALS,USES

         Пример:         READLINE proc near ; тело процедуры
                         call ReadLine
                         READLINE ENDP




         TASM2 #4-5/Док              = 212 =

                                         PUBLIC                                
         -----------------------------------------------------------------

         Назначение:     Объявление идентификаторов,  как доступных другим
                         модулям.

         Режим:          MASM, Ideal

         Синтаксис:      PUBLIC <язык><симв.имя> [,<язык><симв.имя>]...

         Замечания:      Аргумент <язык>  -  C,PASCAL,BASIC,FORTRAN,PROLOG
                         или NOLANGUAGE  -  устанавливает  любую  специфи-
                         ческую языковую совместимость символического име-
                         ни. Использование директивы PUBLIC временно пере-
                         определяет текущую языковую установку ( по  умол-
                         чанию или с помощью директивы .MODEL).  Заметьте,
                         что вам не требуется иметь директиву  .MODEL  для
                         эффективного использования данной возможности.

                         Аргумент <символическое имя> помещается в объект-
                         ный модуль так,  чтобы он был доступен другим мо-
                         дулям.  Если вы не объявите символическое имя та-
                         ким  образом,  то  оно  будет доступно только для
                         текущего модуля.

                         Таким образом возможно определить только  следую-
                         щие типы данных:

                         - имена переменных

                         - метки программы

                         - числовые константы, определенные по EQU

         См.также:       COMM,EXTRN,GLOBAL

         Пример:             PUBLIC xyzproc  ; объявление процедуры, как
                         xyzproc PROC near   ; доступной другим модулям



         TASM2 #4-5/Док              = 213 =

                                       PUBLICDLL                               
         -----------------------------------------------------------------

         Назначение:     Объявление идентификаторов доступными,  как дина-
                         мически связанные точки входа из других модулей.

         Режим:          MASM, Ideal

         Синтаксис:      PUBLICDLL <язык><симв.имя> [,<язык><симв.имя>]...

         Замечания:      Аргумент <символическое имя> помещается в объект-
                         ный модуль как динамически связанная точка  входа
                         так, чтобы он был доступен из других программ под
                         OS/2. Этот оператор используется только для того,
                         чтобы  помочь  построить  динамически   связанную
                         библиотеку  под  OS/2.  Если  вы  не сделаете имя
                         PUBLIC,  оно  будет  доступно  только из текущего
                         исходного файла.

                         В основном,  вы объявляете PUBLICDLL только метки
                         процедур.  Другие метки программы, имена перемен-
                         ных и числовые константы,  определенные  по  EQU,
                         также можно объявить PUBLICDLL.

                         Аргумент <язык> устанавливает любую специфическую
                         языковую  совместимость   символического   имени.
                         Например, при использовании указания языка C  при
                         помещении символического  имени в  объектный файл
                         перед ним будет создаваться символ  подчеркивания
                         "_". Разрешенные указатели языков это C,  PASCAL,
                         BASIC, FORTRAN, PROLOG или NOLANGUAGE

         См.также:       COMM,EXTRN,GLOBAL,PUBLIC

         Пример:            PUBLICDLL xyzproc  ; объявление процедуры
                         xyzproc PROC near     ; доступной,
                                               ; динамически связанной
                                               ; точкой входа


         TASM2 #4-5/Док              = 214 =

                                         PURGE                                 
         -----------------------------------------------------------------

         Назначение:     Уничтожение макроопределения.

         Режим:          MASM, Ideal

         Синтаксис:      PURGE <имя макроса> [,<имя макроса>]...

         Замечания:      Директива PURGE удаляет макрос  под  именем  <имя
                         макроса>.  Вы  можете  уничтожить сразу несколько
                         макросов,  указав в директиве их имена, разделен-
                         ные запятыми.

                         Эта директива  может  быть использована для того,
                         чтобы возвратить первоначальное значение инструк-
                         ции или директиве,  если вы определили макрос под
                         таким же именем.

         См.также:       MACRO

         Пример:          PURGE add
                                add ax,4 ; обычная команда "сложить"





         TASM2 #4-5/Док              = 215 =

                                       %PUSHLCTL                               
         -----------------------------------------------------------------

         Назначение:     Сохранение директив управления листингом в стеке.

         Режим:          MASM, Ideal

         Синтаксис:      %PUSHLCTL

         Замечания:      Директива %PUSHLCTL сохраняет директивы  управле-
                         ния листингом в 16-ти уровневом стеке. Могут быть
                         сохранены любые директивы управления листингом (%
                         MACS,%LIST и др.),  кроме тех, которые устанавли-
                         вают ширину  различных  полей  (%PCNT,  %DEPTH  и
                         др.).  Эта директива обычно используется в макро-
                         сах и INCLUDE-файлах для  того,  чтобы  сохранить
                         действие предыдущих директив управления листингом
                         при завершении текста макроса  или INCLUDE-файла.

         См.также:       %POPLCTL

         Пример:         %PUSHLCTL
                         %NOINCL
                         %MACS
                         %POPLCTL  ; восстановление директив управления
                                   ; листингом



         TASM2 #4-5/Док              = 216 =

                                                                               
         QUIRKS
         -----------------------------------------------------------------

         Назначение:     Объявление режима Quirks для Турбо ассемблера.

         Режим:          MASM, Ideal

         Синтаксис:      QUIRKS

         Замечания:      QUIRKS  позволяет  вам  транслировать  программу,
                         содержащую  одну  из  ошибок  MASM. Старайтесь не
                         использовать эту  директиву.   Лучше измените  те
                         конструкции, которые требуют ее применения.

                         Для полного описания режима Quirks см. пункт "Ре-
                         жим: Quirks TASM" в приложении B.

         См.также:       MASM,IDEAL

         Пример:           QUIRKS
                          bval DB 0
                          mov bval,es

                                                                               
         .RADIX
         -----------------------------------------------------------------

         Назначение:     Установка системы счисления для целых  констант в
                         выражениях.

         Режим:          MASM

         Синтаксис:      .RADIX <выражение>

         Замечания:      Значением  аргумента <выражение> должно быть одна
                         из следующих  констант:  2,8,10,16.  Константы  в
                         <выражении> интерпретируются как десятичные.

         Пример:          .RADIX 8; Система счисления - восьмеричная
                          DB 77  ; Число 63 (десятичное)




         TASM2 #4-5/Док              = 217 =

                                                                               
         RADIX
         -----------------------------------------------------------------

         Назначение:     Установка системы счисления для целых  констант в
                         выражениях.

         Режим:          MASM, Ideal

         Синтаксис:      RADIX <выражение>

         См.также:       .RADIX


                                         RECORD                                
         -----------------------------------------------------------------

         Назначение:     Определение записи, содержащей битовые поля.

         Режим:          MASM, Ideal

         Синтаксис:      режим MASM:
                         <имя> RECORD <поле> [,<поле>]...

                         режим Ideal:
                         RECORD <имя> <поле> [,<поле>]...

         Замечания:      Аргумент <имя> определяет запись.  Его вы  можете
                         использовать  при отведении памяти под запись по-
                         добного формата. Каждое поле описывает группу бит
                         в записи. Оно имеет следующий формат:

                         <имя поля>:<размер>[=<выражение>]

                         Аргумент <имя поля> - это имя поля в записи. Если
                         вы используете аргумент <имя поля>  в  выражении,
                         то оно принимает значение количества бит,  на ко-
                         торое необходимо сдвинуть поле вправо  для  того,
                         чтобы разместить младший бит поля в младшем байте
                         (слове), содержащего запись.

                         Аргумент <размер> - это константа между 1  и  16,
                         определяющая количество бит в поле.  Общий размер
                         всех полей в записи не должен превышать 32-х бит.
                         Если  общее  количество  бит  во всех полях менее
                         восьми, то запись будет занимать 1 байт; если оно

         TASM2 #4-5/Док              = 218 =

                         больше 9 и меньше 16,  то запись будет занимать 2
                         байта; в противном случае запись будет занимать 4
                         байта.

                         Аргумент <выражение>  -  это необязательное поле,
                         которое определяет значение  поля  по  умолчанию.
                         Перед  <выражением>  должен  быть  знак (=).  При
                         распределении памяти,  если не указывается значе-
                         ние для инициализации поля, то принимается значе-
                         ние,  задаваемое этим выражением. Все неинициали-
                         зированные биты устанавливаются в нуль.

                         Первое  поле,  определенное  RECORD,   становится
                         самыми  важными  битами   записи  с   последующим
                         заполнением младших бит.  Если общий размер  всех
                         полей не точно 8 или 16 бит, все поля  сдвигаются
                         вправо так, чтобы младший бит младшего поля занял
                         младший  бит  байта  или  слова, которое занимает
                         запись.

         См.также:       STRUC

         Пример:          myrec RECORD val : 3=4,mode:2,size:4



         TASM2 #4-5/Док              = 219 =

                                          REPT                                 
         -----------------------------------------------------------------

         Назначение:     Повторение блока операторов.

         Режим:          MASM, Ideal

         Синтаксис:      REPT <выражение>
                              <операторы>
                         ENDM

         Замечания:      Значением аргумента <выражение> должна быть конс-
                         танта, и <выражение> не должно содержать  иденти-
                         фикаторов, не определенных к данному моменту тра-
                         нсляции. Оно  определяет  количество   повторений
                         <операторов>.

                         Директива REPT может быть использована как внутри
                         макросов, так и вне их.

         См.также:       ENDM,IRPC,IRP

         Пример:         REPT 4
                          shl  ax,1
                         ENDM



         TASM2 #4-5/Док              = 220 =

                                                                               
         .SALL
         -----------------------------------------------------------------

         Назначение:     Подавление листинга макроопределений.

         Режим:          MASM

         Синтаксис:      .SALL

         Замечания:      Эту директиву используют тогда, когда  необходимо
                         сократить размер листинга.

         См.также:       .LALL,.XALL,%MACS,%NOMACS

         Пример:         .SALL
                          mymacro 4
                          add ax,si ; эта строка будет в листинге следо-
                                    ; вать за строкой макроса

                                        SEGMENT                                
         -----------------------------------------------------------------

         Назначение:     Определение сегмента и всех его атрибутов.

         Режим:          MASM, Ideal

         Синтаксис:      режим MASM:

                         <имя> SEGMENT [<выравнивание>][<объединение>]
                                       [<использование>]['<класс>']

                         режим Ideal:
                           SEGMENT <имя> [<выравнивание>][<объединение>]
                                         [<использование>]['<класс>']

         Замечания:      Аргумент  <имя> определяет имя сегмента.  Если вы
                         определили сегмент с таким же именем, то он будет
                         воспринят  как  продолжение предыдущего сегмента.
                         Вы можете использовать одинаковые имена сегментов
                         в различных исходных программах.  Редактор связей
                         будет объединять сегменты с одинаковыми именами в
                         один сегмент.

                         Аргумент <выравнивание>  определяет  тип  границы
                         выравнивания сегмента. Он может принимать следую-

         TASM2 #4-5/Док              = 221 =

                         щие значения:

                         - BYTE  -начало сегмента со следующего свободного
                                 байта;
                         - WORD  -начало сегмента со следующего свободного
                                 слова;
                         - DWORD-начало  сегмента со следующего свободного
                                 двойного слова;
                         - PARA  -начало сегмента со следующего свободного
                                 параграфа (16-ти байт);
                         - PAGE  -начало  сегмента  со следующей свободной
                                 страницы;

                         По умолчанию  <выравнивание>  принимается  равным
                         PARA.

                         Аргумент <объединение> определяет порядок объеди-
                         нения сегментов с одинаковыми именами при  редак-
                         тировании связей. Он может принимать одно из сле-
                         дующих значений:

                         - AT <выражение> - Размещение сегмента  в  памяти
                           по абсолютному адресу.  Адрес параграфа опреде-
                           ляется значением <выражения>. Аргумент <выраже-
                           ние> не  должен  содержать идентификаторов,  не
                           определенных к данному моменту трансляции.  Для
                           сегментов  этого типа редактор связей и ассемб-
                           лер не будут генерировать ни кода,  ни  данных.
                           Обычно  сегменты  с  таким  значением аргумента
                           <объединение>  используются  для  того,   чтобы
                           обеспечить доступ по именам к фиксированным об-
                           ластям памяти (например к  экрану  дисплея  или
                           областям данных БСВВ (BIOS)).

                         - COMMON  -  Размещение  этого сегмента,  а также
                           всех сегментов с одинаковыми именами, по одному
                           и тому же адресу памяти.  Длина результирующего
                           сегмента типа COMMON - это длина наибольшего из
                           сегментов с одинаковыми именами.

                         - MEMORY  - Объединение всех сегментов с одинако-
                           выми именами в единый сегмент  (аналогично типу
                           PUBLIC).

                         - PRIVATE  -  Сегмент такого типа не объединяется
                           ни с каким другим сегментом.

         TASM2 #4-5/Док              = 222 =


                         - PUBLIC - Объединение всех сегментов с  одинако-
                           выми именами в единый сегмент.  Длина результи-
                           рующего сегмента типа  PUBLIC - это  сумма длин
                           всех сегментов с одинаковыми именами.

                         - STACK - Объединение всех сегментов с одинаковы-
                           ми именами в единый  сегмент.  Редактор  связей
                           устанавливает адрес начала стека в регистр сег-
                           мента стека (SS),  а длину стека  -  в  регистр
                           указателя  стека  (SP).  Длина  результирующего
                           сегмента - это сумма длин всех сегментов с оди-
                           наковыми именами.

                         -  VIRTUAL  -  Определяет  особый  вид  сегмента,
                           который   трактуется   как   общая   область  и
                           присоединяется  к  другому  сегменту  во  время
                           редактирования   связей.     VIRTUAL    сегмент
                           принимает  вид   присоединения  к   объемлющему
                           сегменту. VIRTUAL сегмент также наследует  свои
                           атрибуты  от  объемлющего  сегмента.  Директива
                           ASSUME принимает VIRTUAL сегмент как часть  его
                           родительского  сегмента;  и  остальных  случаях
                           VIRTUAL  сегмент   трактуется  как   нормальный
                           сегмент.  Редактор  связей  считает виртуальный
                           сегмент общей  областью, которая  собирается из
                           таких  областей  разных  модулей.   Разрешенные
                           статические данные, которые находятся во многих
                           модулях включаемых файлов, разделяются.

                         По умолчанию  значением  аргумента  <объединение>
                         является PRIVATE.

                         Аргумент <использование> определяет  по умолчанию
                         размер  слова  для сегмента.  Он указывается лишь
                         после применения директив P386 или P386N.  Он мо-
                         жет принимать следующие значения:

                         - USE16.  Это  значение принимается по умолчанию,
                           если вы не  указали  явно  значение  аргумента.
                           Сегмент   с  таким  типом  может  содержать  до
                           64-кбайт кода или данных.  При ссылке  на  32-х
                           битные  сегменты,  регистры или константы будут
                           сгенерированы      необходимые      инструкции,
                           переопределяющие 16-ти битный режим.


         TASM2 #4-5/Док              = 223 =

                         - USE32. Сегмент  такого типа может  содержать до
                           4-х  Гбайт  (гигабайт)  кода  или  данных.  При
                           ссылке на 16-ти разрядные сегменты, регистры  и
                           константы  будут  сгенерированы соответствующие
                           инструкции.

                         Аргумент <класс>  управляет   последовательностью
                         обработки  сегментов  при  редактировании связей.
                         Независимо от  следования  сегментов  в  исходном
                         файле сегменты с одинаковыми значениями аргумента
                         <класс> будут загружаться  в  память  одновремен-
                         но. Значение аргумента должно  быть  заключено  в
                         кавычки (' или ").

                         Сегмент должен заканчиваться директивой ENDS. До-
                         пускаются вложенные сегменты,  но Турбо ассемблер
                         воспринимает их по отдельности;  он просто помес-
                         тит дополнительные данные или код в основной сег-
                         мент,  когда директива  ENDS  завершит  вложенный
                         сегмент.

         См.также:       GROUP,.MODEL,CODESEG,DATASEG

         Пример:         PROG SEGMENT PARA PUBLIC 'CODE'

                         ...

                         PROG ENDS




         TASM2 #4-5/Док              = 224 =

                                          .SEQ                                 
         -----------------------------------------------------------------

         Назначение:     Установка последовательности расположения сегмен-
                         тов.

         Режим:          MASM

         Синтаксис:      .SEQ

         Замечания:      Директива .SEQ устанавливает такой режим, при ко-
                         тором сегменты в объектном модуле располагаются в
                         таком прядке, в каком они следуют в исходном фай-
                         ле. Этот режим принимается по умолчанию. Он может
                         быть изменен директивой DOSSEG.

                         Действие директивы .SEQ аналогично действию опции
                         командной  строки  Турбо ассемблера /S.  Действие
                         директивы .SEQ может быть отменено опцией команд-
                         ной  строки /A (следование сегментов в алфавитном
                         порядке).

         См.также:       .ALPHA,DOSSEG

         Пример:         .SEQ
                         xyz SEGMENT ;этот сегмент будет первым
                         xyz ENDS
                         abc SEGMENT
                         abc ENDS




         TASM2 #4-5/Док              = 225 =

                                                                               
         .SFCOND
         -----------------------------------------------------------------

         Назначение:     Подавление появления операторов  из  нетранслиро-
                         ванных условных блоков в файле листинга.

         Режим:          MASM

         Синтаксис:      .SFCOND

         См.также:       %CONDS,.LFCOND,%NOCONDS,.TFCOND


                                                                               
         SIZESTR
         -----------------------------------------------------------------

         Назначение:     Определение количества идентификаторов в строке.

         Режим:          MASM51, Ideal

         Синтаксис:      <имя> SIZESTR <строка>

         Замечания:      Аргументу <имя> присваивается  числовое  значение
                         количества символов в строке. Строка <> имеет ну-
                         левую длину.

         См.также:       SUBSTR,CATSTR,INSTR

         Пример:         REGLIST EQU 
                         REGLEN SIZESTR REGLIST ; REGLEN = 5




         TASM2 #4-5/Док              = 226 =

                                         .STACK                                
         -----------------------------------------------------------------

         Назначение:     Определение начала стека в сегменте стека.

         Режим:           MASM, Ideal

         Синтаксис:       .STACK <размер>

         Замечания:      Аргумент  <размер>  - это число байт,  отведенных
                         под стек.  По умолчанию он принимается  равным  1
                         Кбайт.

                         Обычно эта  директива  используется при написании
                         отдельных (автономных) программ на языке  ассемб-
                         лера. Если вы пишете процедуру, которая будет вы-
                         зываться из языка высокого уровня,  то стек будет
                         установлен вызывающей программой.

         См.также:       .CODE,.CONST,.DATA,.DATA?,.FARDATA,.FARDATA?,
                         .MODEL,STACK

         Пример:         .STACK 200h ; резервирование под стек 512 байт


                                                                               
         STACK
         -----------------------------------------------------------------

         Назначение:     Определение начала стека в сегменте стека.

         Режим:           MASM, Ideal

         См.также:       .CODE,.CONST,.DATA,.DATA?,.FARDATA,.FARDATA?,
                         .MODEL,.STACK



         TASM2 #4-5/Док              = 227 =

                                                                               
         .STARTUP
         -----------------------------------------------------------------

         Назначение:     Создает эффективный стартовый код для обычной
                         модели.

         Режим:           MASM

         Замечания:      .STARTUP создает эффективный  стартовый  код  для
                         обычной модели.  Ближняя метка @Startup определя-
                         ется в начале стартового кода и  программная  ди-
                         ректива END становится END @Startup. Эта директи-
                         ва поддерживает совместимость с  Microsoft  Quick
                         Assembler.

         См.также:       @Startup,STARTUPCODE

                                                                               
         STARTUPCODE
         -----------------------------------------------------------------

         Назначение:     Создает эффективный стартовый код для обычной
                         модели.

         Режим:           MASM

         Замечания:      STARTUPCODE создает эффективный стартовый код для
                         обычной модели.  Ближняя метка @Startup определя-
                         ется  в  начале стартового кода и программная ди-
                         ректива END становится END @Startup. Эта директи-
                         ва  поддерживает  совместимость с Microsoft Quick
                         Assembler.

         См.также:       @Startup,STARTUPCODE



         TASM2 #4-5/Док              = 228 =

                                         STRUC                                 
         -----------------------------------------------------------------

         Назначение:     Определение структуры.

         Режим:          MASM, Ideal

         Синтаксис:      режим MASM:
                            <имя> STRUC
                            <поля>
                            [<имя>] ENDS

                         режим Ideal:
                            STRUC <имя>
                                  <поля>
                            ENDS  [<имя>]

         Замечания:      Различия в определении структуры в режимах MASM и
                         Ideal состоят в ином размещении аргумента <имя> и
                         ключевых слов STRUC и ENDS. В Турбо ассемблере вы
                         можете делать как вложенные директивы STRUC,  так
                         и любые комбинации с директивой UNION.

                         Аргумент <имя> идентифицирует структуру. По этому
                         имени  вы можете обращаться к структуре для того,
                         чтобы выделить под нее память.

                         Аргументы <поля> определяют  те поля, из  которых
                         состоит структура.  Каждое поле определяется  при
                         помощи обычных директив распределения памяти (DW,
                         DB и т.д).  Поля могут иметь, а могут и не  иметь
                         имени. Имена  полей, как  и другие  символические
                         имена, должны быть уникальными.  Для режима Ideal
                         такое требование необязательно.

                         Возможно определение  полей  структуры по умолча-
                         нию.  Для этого при определении структуры необхо-
                         димо поместить это значение после директивы расп-
                         ределения памяти (аналогично  присвоению значения
                         элементу данных).  Если вы не хотите использовать
                         значения, принятые по умолчанию, то для инициали-
                         зации поля используйте символ ?.

                         Будьте осторожны  при  определении  по  умолчанию
                         строк,  так как если строка не будет помещаться в
                         поле,  отведенное под нее,  то она будет усечена.

         TASM2 #4-5/Док              = 229 =

                         Если строка будет меньше отведенного под нее  по-
                         ля,  то  в режиме MASM она будет справа дополнена
                         пробелами, а в режиме Ideal свободное место может
                         быть использовано.

                         Если вы хотите включить в структуру другую струк-
                         туру или объединение, то это надо сделать до пер-
                         вой директивы определения данных,  либо используя
                         имя ранее определенной структуры.

                         При использовании вложенных структур и  объедине-
                         ний  доступ к их элементам осуществляется при по-
                         мощи оператора (.).  При использовании  вложенных
                         структур  для  доступа  к их элементам необходимо
                         применение нескольких операторов (.).


         См.также:       ENDS,UNION

         Пример:         STRUC B
                         B1 DD 0
                         B2 DB ?
                         ENDS

                         STRUC A
                          B DW ?
                          C DD ?
                           binst  B <>
                                 STRUC
                                  D DB 'XYZ'
                                  E DQ  1.0
                                 ENDS
                            ENDS

                         ainst A <>
                            mov al,[ainst.binst.b2] ; 2 уровня
                            mov al,[ainst.d]        ; 1 уровень




         TASM2 #4-5/Док              = 230 =

                                         SUBSTR                                
         -----------------------------------------------------------------

         Назначение:     Определение новой строки как подстроки из сущест-
                         вующей строки.

         Режим:          MASM51, Ideal

         Синтаксис:      <имя> SUBSTR <строка>,<позиция>[,<размер>]

         Замечания:      Аргументу <имя> присваивается значение, состоящее
                         из символов <строки>,  начиная с <позиции> длиной
                         <размер>.  Если  вы не указали аргумент <размер>,
                         то подстрока начинается с номера  символа  <пози-
                         ция>,  а  заканчивается  там  же,  где и исходная
                         строка.

                         Аргумент <строка> может принимать следующие  зна-
                         чения:
                         - строка, заключенная в скобки ();
                         - ранее  определенный  текст макроса;
                         - оператор замещения строки выражением (%).

         См.также:       CATSTR,INSTR,SIZESTR

         Пример:         N = 0A
                         HEXC SUBSTR <0123456789ABCDEF>,N+1,1 ; HEXC="A"



         TASM2 #4-5/Док              = 231 =

                                         SUBTTL                                
         -----------------------------------------------------------------

         Назначение:     Установка подзаголовка для файла листинга.

         Режим:          MASM

         Синтаксис:      SUBTTL <текст>

         Замечания:      Подзаголовок  появляется в начале страницы, после
                         имени исходного файла и заголовка, установленного
                         директивой TITLE.

                         Текст программы  может  содержать необходимое вам
                         количество директив SUBTTL. Каждая из этих дирек-
                         тив  изменят подзаголовок,  который будет помещен
                         на следующей странице листинга.

         См.также:       %SUBTTL

         Пример:         SUBTTL Video Driver





         TASM2 #4-5/Док              = 232 =

                                        %SUBTTL                                
         -----------------------------------------------------------------

         Назначение:     Установка подзаголовка для файла листинга.

         Режим:          MASM, Ideal

         Синтаксис:      %SUBTTL "<текст>"

         Замечания:      Подзаголовок  появляется в начале страницы, после
                         имени исходного файла и заголовка, установленного
                         директивой  %TITLE.  Аргумент <текст> должен быть
                         заключен в кавычки ("").

                         Текст программы может содержать  необходимое  вам
                         количество  директив %SUBTTL.  Каждая из этих ди-
                         ректив изменят подзаголовок,  который будет поме-
                         щен на следующей странице листинга.

         См.также:       SUBTTL

         Пример:         %SUBTTL "Video Driver"


                                                                               
         %SYMS
         -----------------------------------------------------------------

         Назначение:     Разрешение  вывода в файл листинга таблицы симво-
                         лических имен.

         Режим:          MASM, Ideal

         Синтаксис:      %SYMS

         Замечания:      Директива  %SYMS разрешает появление в файле лис-
                         тинга таблицы символических  имен  (Она  содержит
                         все символические имена,  определенные в програм-
                         ме).

                         Этот режим принимается по умолчанию.

         См.также:       %NOSYMS

         Пример:         %SYMS   ; Таблица символических имен  будет
                                 ; в листинге

         TASM2 #4-5/Док              = 233 =

                                                                               
         %TABSIZE
         -----------------------------------------------------------------

         Назначение:     Установка ширины поля табуляции в листинге.

         Режим:          MASM, Ideal

         Синтаксис:      %TABSIZE <ширина>

         Замечания:      Аргумент  <ширина> - это количество позиций между
                         табуляциями в файле листинга.  По  умолчанию  его
                         значение 8.

         См.также:       %PAGE,%PCNT,%BIN,%TEXT

         Пример:         %TABSIZE 4

                                         %TEXT                                 
         -----------------------------------------------------------------

         Назначение:     Установка ширины поля текста  программы  в  файле
                         листинга.

         Режим:          MASM, Ideal

         Синтаксис:      %TEXT <ширина>

         Замечания:      Аргумент <ширина>  -  это  количество  позиций  в
                         строке  файла  листинга,  отводимое  под исходный
                         текст.  Если длина строки исходного текста больше
                         значения  аргумента <ширина>,  то эта строка либо
                         будет усечена, либо перенесена на следующую стро-
                         ку.  Это  зависит  от того,  какая директива была
                         применена ранее - %TRUNC или %NOTRUNC.

         См.также:       %BIN,%DEPTH,%NOTRUNC,%PCNT,%TRUNC

         Пример:         %TEXT 80 ; 80 позиций в строке




         TASM2 #4-5/Док              = 234 =

                                                                               
         .TFCOND
         -----------------------------------------------------------------

         Назначение:     Изменение режима печати содержимого условных бло-
                         ков на противоположный.

         Режим:          MASM

         Синтаксис:      .TFCOND

         Замечания:      Эта  директива  изменяет действующий режим печати
                         содержимого условных блоков  на  противоположный.
                         Если  она  первый раз появляется в программе и вы
                         не использовали опцию командной строки /X, то бу-
                         дет установлен такой режим, при котором разрешена
                         печать содержимого условных блоков.  Если  же  вы
                         уже  использовали  опцию командной строки /X,  то
                         печать содержимого условных блоков будет запреще-
                         на.

         См.также:       %CONDS,.LFCOND,%NOCONDS,.SFCOND


                                                                               
         TITLE
         -----------------------------------------------------------------

         Назначение:     Установка заголовка для файла листинга.

         Режим:          MASM

         Синтаксис:      TITLE <текст>

         Замечания:      Заголовок появляется  в  начале  страницы,  после
                         имени исходного файла и до подзаголовка, установ-
                         ленного директивой SUBTTL.

                         Программа может содержать только  одну  директиву
                         TITLE.

         См.также:       SUBTTL,%SUBTTL,%TITLE

         Пример:         TITLE Video Driver




         TASM2 #4-5/Док              = 235 =

                                                                               
         %TITLE
         -----------------------------------------------------------------

         Назначение:     Установка заголовка для файла листинга.

         Режим:          MASM, Ideal

         Синтаксис:      %TITLE "<текст>"

         Замечания:      Заголовок появляется  в  начале  страницы,  после
                         имени исходного файла и до подзаголовка, установ-
                         ленного директивой %SUBTTL. Аргумент <текст> дол-
                         жен быть заключен в кавычки ("").

                         Программа может содержать только одну директиву
                         %TITLE.

         См.также:       SUBTTL,%SUBTTL,TITLE

         Пример:         %TITLE "Video Driver"


                                                                               
         %TRUNC
         -----------------------------------------------------------------

         Назначение:     Усечение слишком длинных полей листинга.

         Режим:          MASM, Ideal

         Синтаксис:      %TRUNC

         Замечания:      Директива   %TRUNC  отменяет  действие  директивы
                         %NOTRUNC.  Эта директива изменяет поля объектного
                         кода и текста программы в листинге таким образом,
                         что "слишком широкие" поля усекаются и информация
                         теряется.

                         Этот режим принимается по умолчанию.

         См.также:       %NOTRUNC

         Пример:           %TRUNC
                           DD 1,2,3,4,5 ; Вы не увидите в листинге все
                                        ; поля


         TASM2 #4-5/Док              = 236 =

                                                                               
         UDATASEG
         -----------------------------------------------------------------

         Назначение:     Определение начала неинициализированного сегмента
                         данных.

         Режим:          MASM, Ideal

         См.также:       .CODE,.DATA,.CONST,.DATA?,.FARDATA,.FARDATA?,
                         .MODEL,.STACK

                                                                               
         UFARDATA
         -----------------------------------------------------------------

         Назначение:     Определение начала неинициализированного сегмента
                         данных типа FAR.

         Режим:          MASM, Ideal

         См.также:       .CODE,.DATA,.DATA?,.FARDATA,.FARDATA?,.MODEL,
                         .STACK




         TASM2 #4-5/Док              = 237 =

                                         UNION                                 
         -----------------------------------------------------------------

         Назначение:     Определение объединения.

         Режим:          MASM, Ideal

         Синтаксис:      режим MASM:
                            <имя> UNION
                                  <поля>
                            [<имя>] ENDS

                         режим Ideal:
                            UNION <имя>
                                 <поля>
                            ENDS [<имя>]

         Замечания:      Различия в определении объединения в режимах MASM
                         и Ideal состоят в ином размещении аргумента <имя>
                         и  ключевых  слов  UNION и ENDS.  Турбо ассемблер
                         позволяет использовать  вложенные  объединения  и
                         объединять их со структурами.

                         UNION, точно  также как  STRUC, ожидает,  что все
                         запоминаемое  имеет  нулевое  смещение  от начала
                         объединения. Это приводит  к наложению полей  при
                         размещении,  позволяя  вам  обращаться  к памяти,
                         определенной в объединении, с различными  именами
                         и различными размерами данных. Длина  объединения
                         - это длина наибольшего запоминаемого, и не равна
                         сумме длин всех запоминаемых как в структуре.

                         Аргумент <имя> определяет объединение, так что вы
                         можете   использовать   это   имя   позднее   при
                         размещении  памяти  для  помещения  объединения с
                         этим  форматом.

                         Аргументы <поля> определяют  те поля, из  которых
                         состоит объединение. Каждое поле определяется при
                         помощи обычных директив распределения памяти (DW,
                         DB   и   т.д).   Имена   полей,   как   и  другие
                         символические имена, должны быть уникальными.

                         Возможно определение полей объединения по умолча-
                         нию.  Для этого при определении объединения необ-
                         ходимо поместить  это  значение  после  директивы

         TASM2 #4-5/Док              = 238 =

                         распределения  памяти (аналогично присвоению зна-
                         чения элементу данных). Если вы не хотите исполь-
                         зовать  значения,  принятые по умолчанию,  то для
                         инициализации поля используйте символ ?.

                         Будьте осторожны  при  определении  по  умолчанию
                         строк,  так как если строка не будет помещаться в
                         поле,  отведенное под нее,  то она будет усечена.
                         Если  строка будет меньше отведенного под нее по-
                         ля,  то в режиме MASM она будет справа  дополнена
                         пробелами, а в режиме Ideal свободное место может
                         быть использовано.

                         Если вы  хотите  включить  в  объединение  другую
                         структуру или объединение, то это надо сделать до
                         первой директивы определения данных, либо исполь-
                         зуя имя ранее определенного объединения.  При ис-
                         пользовании вложенных структур и объединений дос-
                         туп  к  их  элементам  осуществляется  при помощи
                         оператора (.).  При использовании вложенных  объ-
                         единений  для  доступа  к их элементам необходимо
                         применение нескольких операторов (.).

         См.также:       ENDS,UNION

         Пример:         UNION B
                          BMEM1 DW 0
                          BMEM2 DB ?
                         ENDS

                         UNION A
                           B DW ?
                           C DD ?
                            bunion  B <>
                                 STRUC
                                 D DB 'XYZ'
                                 E DD  1.0
                                 ENDS
                        ENDS

                         ainst A <>                   ; выделение памяти
                              mov al,[ainst.bunion.bmem1] ; несколько
                                                          ; уровней
                              mov al,[ainst.d]            ; 1 уровень



         TASM2 #4-5/Док              = 239 =

                                          USES                                 
         -----------------------------------------------------------------

         Назначение:     Указание регистров, используемых процедурой.

         Режим:          MASM, Ideal

         Синтаксис:      USES <данное>[,<данное>]...

         Замечания:      Эта  директива  используется  внутри блока  PROC/
                         ENDP. Используя ее, вы можете указать, какие дан-
                         ные должны быть сохранены при входе в  процедуру,
                         и восстановлены при выходе из нее.

                         Аргумент  <данное>  может   быть  регистром   или
                         данным, которое разрешено использовать в командах
                         POP и PUSH.

                         Обратите внимание на то, что регистры в директиве
                         должны быть разделены запятыми,  а не  пробелами,
                         как в PROC.  Вы можете также определить сохраняе-
                         мые регистры в директиве PROC,  но  использование
                         директивы USES улучшает чтение программы, а также
                         позволяет вводить ее в макроопределения.

                         Вы должны  использовать  эту  директиву до первой
                         инструкции в процедуре, которая генерирует код.

                         Запомните, что USES доступна только тогда,  когда
                         используется  вместе  с  языковым  расширением  в
                         операторе .MODEL.

         См.также:       ARG,LOCALS,PROC

         Пример:         COPY10 PROC
                          USES cx,si,di,foo
                               mov cx,10
                               mov foo,cx
                          REP movsb
                          RET   ; восстановление регистров cx,si,di и foo
                         COPY10 ENDP




         TASM2 #4-5/Док              = 240 =

                                          WARN                                 
         -----------------------------------------------------------------

         Назначение:     Разрешение предупреждающих сообщений.

         Режим:          MASM, Ideal

         Синтаксис:      WARN <класс>

         Замечания:      Если  вы  используете директиву WARN без аргумен-
                         тов, то будут разрешены все предупреждающие сооб-
                         щения.  Если за директивой WARN следует идентифи-
                         катор сообщения (аргумент <класс>), то только это
                         сообщение  будет  разрешено.  У каждого сообщения
                         есть трехбуквенный идентификатор:

                         ASS - предполагается,  что адрес сегмента - 16-ти
                               битный;
                         BRK - необходимы скобки;
                         ICG - генерация плохого кода;
                         LCD - переполнение счетчика перемещений;
                         OPI - открытый оператор IF;
                         OPP - открытая процедура;
                         OPS - открытый сегмент;
                         OVF - арифметическое переполнение;
                         PDC - конструкция, зависящая от прохода;
                         PRO - запись в память в защищенном режиме требует
                               изменения регистра CS.

                         Эти же идентификаторы используются опцией команд-
                         ной строки /W.

         См.также:       NOWARN

         Пример:           WARN OVF     ; Разрешение предупреждения об
                                        ; арифметическом переполнении
                         DW 1000*1234   ; Это предупреждение разрешено





         TASM2 #4-5/Док              = 241 =

                                                                               
         .XALL
         -----------------------------------------------------------------

         Назначение:     Включение  в файл листинга только тех макрорасши-
                         рений, которые генерируют код или данные.

         Режим:          MASM

         См.также:       .LALL,.SALL,%MACS,%NOMACS


                                                                               
         .XCREF
         -----------------------------------------------------------------

         Назначение:     Подавление листинга перекрестных ссылок.

         Режим:          MASM

         См.также:       %CREF,.CREF,%NOCREF

                                                                               
         .XLIST
         -----------------------------------------------------------------

         Назначение:     Подавление вывода файла листинга.

         Режим:          MASM

         См.также:       %LIST,.LIST,%NOLIST



Яндекс цитирования