Приложение C. Вопросы совместимости
Турбо Ассемблер в режиме MASM в высокой степени совместим с
ассемблером MASM версии 5.2. Однако стопроцентная совместимость -
это идеал, к которому можно только стремиться, т.к. формальная
спецификация языка отсутствует, и даже различные версии MASM не
полностью совместимы друг с другом.
Для большинства программ замена MASM на Турбо Ассемблер не
повлечет за собой каких-либо осложнений. В некоторых случаях в
Турбо Ассемблере появятся предупреждающие сообщения и сообщения
об ошибках там, где их в MASM не было, что обычно означает, что
ошибочный оператор не был выявлен макроассемблером MASM. Напри-
мер, MASM не обнаруживает ошибок в следующих операторах:
abc EQU [BP+2]
PUBLIC abc
и генерирует бессмысленный объектный код. В Турбо Ассемблере по-
добная конструкция, а также ряд других двусмысленных конструкций,
будут идентифицированы как ошибочные.
Если при ассемблировании программы пользователя с помощью
Турбо Ассемблера возникнут какие-либо затруднения, то можно попы-
таться использовать директиву QUIRKS. Например, если с помощью
следующей командной строки:
TASM /JQUIRKS MYFILE
программа будет ассемблирована правильно, то следует добавить в
начало исходного файла директиву QUIRKS. Еще лучше, используя
сведения из этого приложения, определить операторы, для которых
требуется директива QUIRKS, и после этого переписать соответству-
ющие строки исходного файла так, чтобы отпала необходимость ис-
пользования директивы QUIRKS.
Для максимальной совместимости с MASM следует использовать
директиву NOSMART и режим QUIRKS.
Одно- и двухпроходные режимы ассемблирования
В стандартном режиме Турбо Ассемблер выполняет ассемблирова-
ние за один проход, а MASM - за два прохода. Поэтому Турбо Ас-
семблер - более быстрый ассемблер по сравнению с MASM. Однако од-
нопроходность Турбо Ассемблера может привести к некоторой его
несовместимости с MASM при разрешении ссылок вперед и обработке
конструкций, зависящих от прохода. В TASM имеется параметр ко-
мандной строки (/m), с помощью которого можно задать число прохо-
дов. Если требуется обеспечить максимум совместимости с MASM, то
нужно указать двухпроходный режим (/m2). (См. Главу 2, где данный
параметр обсуждается более подробно.)
Использование данного параметра командной строки будет гене-
рировать режим, совместимый с MASM (два прохода), когда присутс-
твуют следующие конструкции:
- директивы IF1 и IF2;
- директивы ERR1 и ERR2;
- ссылки вперед с IFDEF и IFNDEF;
- опережающие ссылки с операцией .TYPE;
- рекурсивно определенные числа, такие, как
NMBR=NMBR+1;
- рекурсивно определенные текстовые макрокоманды или тексто-
вые макрокоманды, на которые имеются опережающие ссылки,
такие, как:
LNAME CATSTR LNAME,<1>
- макрокоманды, на которые имеются опережающие ссылки.
Переменные операционной среды
В Турбо Ассемблере не используются переменные среды для оп-
ределения параметров, используемых по умолчанию, что отвечает об-
щему подходу фирмы Borland, используемому при создании программ-
ных продуктов. Вместо этого параметры, используемые по умолчанию,
следует помещать в файл конфигурации, и для различных проектов
создавать соответствующие им файлы конфигурации.
Если при использовании MASM для конфигурирования нужным об-
разом системы использовались переменные операционной среды
INCLUDE или MASM, то для использования той же программы с Турбо
Ассемблером нужно создать файл конфигурации. Все те параметры,
которые были специфицированы, используя переменную среды MASM,
нужно поместить непосредственно в файл конфигурации. Каталоги,
указанные переменной INCLUDE, помещаются в файл конфигурации с
помощью параметра /I командной строки.
Формат фирмы Microsoft для двоичных чисел с плавающей точкой
В ранних версиях макроассемблера MASM для чисел с плавающей
точкой по умолчанию использовался формат, несовместимый с форма-
том для чисел с плавающей точкой стандарта IEEE. В MASM версии
5.1 числа с плавающей точкой генерируются в формате IEEE, но име-
ется директива .MSFLOAT, с помощью которой можно специфицировать
использование ранее использовавшегося формата фирмы Microsoft.
В Турбо Ассемблере не поддерживается старый формат чисел с
плавающей точкой и, следовательно, .MSFLOAT является для него не-
допустимой директивой.
Назад | Содержание | Вперед