Дополнение для Borland C++ 3.1

Новые средства Турбо ассемблера версии 3.1

          Турбо ассемблер версии 3.1 предусматривает  следующие  новые
     средства:

          1. Расширенные инструкции SETFIELD и GETFIELD.

             Когда исходное  значение  совпадает  с целевым регистром,
             инструкция SETFIELD больше не выполняет операцию  OR  над
             исходным значением. Вместо этого SETFIELD будет обеспечи-
             вать, что неустановленные поля целевого региста будут ну-
             левыми.

             Аналогично, если  вы используете при совпадении исходного
             и целевого регистра инструкцию  GETFIELD,  то  инструкция
             больше  не будет генерировать нефункциональную инструкцию
             "MOV приемник, источник".

          2. Дополнительные параметры командной строки.

             Турбо ассемблер 3.1 позволяет  теперь  задавать  дополни-
             тельные объектные форматы, используемые отдельными компо-
             новщиками. Это следущие параметры:

     ----------------T-----------------------------------------------¬
     ¦    Параметр   ¦   Значение                                    ¦
     +---------------+-----------------------------------------------+
     ¦   /o          ¦   Генерируются стандартные совместимые с TLINK¦
     ¦               ¦   объектные файлы   с   разрешенной поддержкой¦
     ¦               ¦   оверлеев.                                   ¦
     ¦               ¦                                               ¦
     ¦   /oi         ¦   Генерируются объектные файлы в формате, сов-¦
     ¦               ¦   местимом с компоновщиком IBM.               ¦
     ¦               ¦                                               ¦
     ¦   /op         ¦   Генерируются объектные файлы в формате, сов-¦
     ¦               ¦   местимом с компоновщиком Phar Lap.          ¦
     ¦               ¦                                               ¦
     ¦   /os         ¦   Генерируются стандартные совместимые с TLINK¦
     ¦               ¦   объектные файлы   с   запрещенной поддержкой¦
     ¦               ¦   оверлеев. Этот параметр задается по  умолча-¦
     ¦               ¦   нию.                                        ¦
     L---------------+------------------------------------------------

          3. Новый атрибут сегмента и предупреждение о неинициализиро-
             ванном сегменте.

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

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

                 BSS SEGMENT PUBLIC WORD UNINIT 'BSS'

             Данная директива  будет генерировать следующее предупреж-
             дающее сообщение:

                Warning: Data or code written to uninitialized segment
                (Предупреждение: Данные или код записываются в  неини-
                циализированный сегмент)

                Для запрещения данного сообщения используйте директиву
                NOWARN UNI.  Вновь разрешить это сообщение можно с по-
                мощью директивы WARN UNI.

          4. Директивы PUSHSTATE и POPSTATE.

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

             Сохраняемая Турбо  ассемблером информация о состоянии со-
             держит:

             - текущую версию эмуляции (например, T310);
             - выбор режима (например, IDEAL, MASM, QUIRKS, MASM51);
             - переключатели EMUL и NOEMUL;
             - выбор текущего процессора и сопроцессора;
             - переключатели MULTERRS или NOMULTERRS;
             - переключатели SMART или NOSMART;
             - текущее основание системы счисления;
             - переключатели JUMPS или NOJUMPS;
             - переключатели LOCALS или NOLOCALS;
             - текущий префикс локального символа.

             Для возврате  последнего  сохраненного состояния из стека
             используйте директиву POPSTATE.

     ; примеры директив PUSHSTATE и POPSTATE

     ideal
     model small
     codeseg

     jumps
     locals  @@

             ; Показывает  изменение  состояние процессора,  основание
             ; чисел и режим JUMPS
             pushstate
             nojumps
             radix   2          ; Установить в двоичное основание
             p386
             jl      next1      ; После этого нет дополнительных NOPS
             mov     eax,100    ; Теперь 100 означает двоичное число
                                ; 100 или десятичное 4.
     next1:
             popstate           ; Восстановить JUMPS и режим не 386.

             ; Вернуться к директиве JUMPS, не 386 и десятичному осно-
             ; ванию

             jl      next2      ; Три дополнительных NOPS для
                                ; обработки JUMPS
             xor     eax,eax    ; Теперь не режим 386!

             mov     cx,100     ; Теперь 100 означает десятичное 100

             pushstate
             MULTERRS
             mov     ax,[bp+abc
             popstate

             mov     ax,[bp+abc


             ; Показазывает  запрещение  локальной  области   действия
             ; идентификаторов
             locals
     next2:
     @@a:    loop @@a
     next3:
     @@a:    loop @@a           ; Допутимо благодаря области действия
                                ; NEXT2: и NEXT3:

             pushstate
             nolocals
     next4:
     @@b:    loop @@b
     next5:
     @@b:    loop @@b           ; Это приведет к конфликту из-за
                                ; нелокальности
             popstate

             ; Показывает изменение префикса локального идентификатора
             ; и режим MASM/IDEAL
             pushstate
             masm
             locals @$

     testproc proc              ; Режим MASM для описания процедуры
              jmp    @$end

     @$end:   nop
     @@end:   ret
     testproc endp

     testproc2 proc
             jmp    @$end
     @$end:  nop                ; Это не приводит к конфликту с меткой
                                ; в TESTPROC
     @@end:  ret                ; Эта метка приведет к конфликту
     testproc2 endp
             popstate


             ; Теперь вернемся к @@ в качестве локального  префикса  и
             ; режиму IDEAL
     testproc2b proc            ; Это будет работать, так как мы снова
                                ; в режиме IDEAL
             ret
     testproc2b  endp           ; а это даст ошибку.

     proc    testproc3
             jmp    @$end2
     @$end2: nop
     @@end2: ret
     endp    testproc3

     proc    testproc4
             jmp    @$end2
     @$end2: nop                ; Эта метка не приведет к конфликту
     @@end2: ret                ; Эта метка не приведет к конфликту
                                ; с меткой в TESTPROC3
     endp    testproc4
     end


          5. Новые директивы процессора.

             Новые директивы  процессора добавлены для работы с платой
             486SX.

             .487 - разрешает ассемблирует инструкций  числового  про-
                    цессора 487.  Данная  инструкция работает только в
                    режиме MASM.

             P487 - разрешает ассемблирует инструкций  числового  про-
                    цессора 487.  Данная инструкция работает как в ре-
                    жиме MASM, так и в режиме Ideal.

          6. Подстановка текстовых присваиваний.

             Для улучшения совместимости с MASM в TASM 3.1 введены из-
             менения в характер постановки текстовых присваиваний. Это
             приводит к тому,  что старый код дает в TASM 3.1  ошибки,
             что можно устранить двумя способами:

             1) Используйте  директиву командной строки /UT300 для вы-
                бора обработки в стиле TASM 3.0.

             2) В начале строк,  которые вызывают ошибки в  TASM  3.1,
                но не в TASM 3.0,  явно используйте оператор текстовой
                макроподстановки %.

             Примером этого являются файлы WHEREIS.  Для WHEREIS, раз-
             мер  модели определятеся в командной строке следующим об-
             разом:

                TASM /dMDL=small iwhereis.asm

             Затем в IWHEREIS.ASM, код делает проверку, чтобы убедить-
             ся,  что определено MDL,  и, если это так, в TASM 3.0 ис-
             пользуется следующая строка кода:

                model MDL

             TASM 3.0 перед вычислением выражения автоматически  подс-
             тавляет значение MDL.  TASM 3.1 теперь требует от вас яв-
             ного указания оператора %:

                % model MDL


Исправления и добавления к "Руководству пользователя по Турбо ассемблеру"

Исправления На стp. 333 в Приложении D, "Утилиты," говорится, что спра- вочное средство Турбо ассемблера называется TASMHELP. Вы можете использовать TASMHELP как описывается в данном руководстве только если установите Турбо ассемблер в каталоге, отличном от Borland C ++. В противном случае следует использовать утилиту THELP, кото- рая модифицирована таким образом, что может обращаться к множест- ву справочных файлов с помощью меню. Утилиту THELP можно использовать следующим образом: 1) После установки Borland C++ и Турбо ассемблера вызовите THELP в ответ на подсказку DOS. 2) Чтобы вывести меню доступных справочных файлоа, нажмите клавиши ALT-F. 3) Для доступа к справочной информации по Турбо ассемблеру выберите файл TASM.TAH.
                       Назад | Содержание