В процессе своей работы транслятор TASM формирует два типа ошибок: сообщения о неправильных или некорректных конструкциях в исходном ассемблерном тексте и сообщения о фатальных ошибках. Особенность последних в том, что при их возникновении TASM выдает соответствующее сообщение и немедленно прекращает ассемблирование исходного файла.
Сообщения об ошибках
- 32-bit segment not allowed without .386
- Argument needs type override
- Argument to operation or instruction has illegal size
- Arithmetic overflow
- ASSUME must be segment register
- Bad keyword in SEGMENT statement
- Can't add relative quantities
- Can't address with currently ASSUMEd segment registers
- Can't convert to pointer
- Can't emulate 8087 instruction
- Can't make variable public
- Can't override ES segment
- Can't subtract dissimilar relative quantities
- Can't use macro name in expression
- Can't use this outside macro
- Code or data emission to undeclared segment
- Constant assumed to mean Immediate const
- Constant too large
- CS not correctly assumed
- CS override in protected mode
- CS unreachable from current segment
- Declaration needs name
- Directive ignored in Turbo Pascal model
- Directive not allowed inside structure definition
- Duplicate dummy arguments:
- Expecting METHOD keyword
- Expecting offset quantity
- Expecting offset or pointer quantity
- Expecting pointer type
- Expecting record field name
- Expecting register ID
- Expecting scalar type
- Expecting segment or group quantity
- Extra characters on line
- Forward reference needs override
- Global type doesn't match symbol type
- ID not member of structure
- Illegal forward reference
- Illegal immediate
- Illegal indexing mode
- Illegal instruction
- Illegal instruction for currently selected processor(s)
- Illegal local argument
- Illegal local symbol prefix
- Illegal mаcro argument
- Illegal memory reference
- Illegal number
- Illegal origin address
- Illegal override in structure
- Illegal override register
- Illegal radix
- Illegal register for instruction
- Illegal register multiplier
- Illegal segment address
- Illegal use of constant
- Illegal use of register
- Illegal use of segment register
- Illegal USES register
- Illegal version ID
- Illegal warning ID
- Instruction can be compacted with override
- Invalid model type
- Invalid operand(s) to instruction
- Labels can't start with numeric characters
- Line too long - truncated
- Location counter overflow
- Method call requires object name
- Missing argument list
- Missing argument or <
- Missing argument size variable
- Missing COMM ID
- Missing dummy argument
- Missing end quote
- Missing macro ID
- Missing module name
- Missing or illegal type specifier
- Missing table member ID
- Missing term in list
- Missing text macro
- Model must be specified first
- Module is pass-dependant - compatibility pass was done
- Name must come first
- Near jump or call to different CS
- Need address or register
- Need colon
- Need expression
- Need file name after INCLUDE
- Need left parenthesis
- Need method name
- Need pointer expression
- Need quoted string
- Need register in expression
- Need right angle bracket
- Need right curly bracket
- Need right parenthesis
- Need right square bracket
- Need stack argument
- Need structure member name
- Not expecting group or segment quantity
- One non-null field allowed per union expansion
- Only one startup sequence allowed
- Open conditional
- Open procedure
- Open segment
- Open structure definition
- Operand types do not match
- Operation illegal for static table member
- Pass-dependant construction encountered
- Pointer expression needs brackets
- Positive count expecting
- Record field too large
- Record member not found
- Recursive definition not allowed for EQU
- Register must be AL or AX
- Register must be DX
- Relative jump out of range by __ bytes
- Relative quantity illegal
- Reserved word used as symbol
- Rotate count must be constant or CL
- Rotate count out of range
- Segment alignment not strict enough
- Segment attributes illegally redefined
- Segment name is superfluous
- String too long
- Symbol already defined:__
- Symbol already different kind
- Symbol has no width or mask
- Symbol is not a segment or already part of a group
- Text macro expansion exceeds maximum line length
- Too few operands to instruction
- Too many errors or warnings
- Too many initial values
- Too many register multipliers in expression
- Too many registers in expression
- Too many USES registers
- Trailling null value assumed
- Undefined symbol
- Unexpected end of file (no END directive)
- Unknown character
- Unmatched ENDP:_
- Unmatched ENDS:_
- User-generated error
- USES has no effect without language
- Value out of range
- 32-bit segment not allowed without .386
- 32-битовые флаги без директивы .386 не допускаются.
- Argument needs type override
- Требуется явно указать тип операнда. Требуется явно указать размер (тип) выражения, так как транслятор не может сделать этого, исходя только из контекста (см. урок 5). Отметим лишь, что такого рода ошибки исправляются с помощью оператора PTR, позволяющего сообщить транслятору истинный размер операнда.
- Argument to operation or instruction has illegal size
- Операнд операции или команды имеет недопустимый размер.
- Arithmetic overflow
- Арифметическое переполнение. Потеря значащих цифр при вычислении значения выражения.
- ASSUME must be segment register
- В директиве ASSUME должен быть указан сегментный регистр.
- Bad keyword in SEGMENT statement
- Неверное ключевое слово в операторе SEGMENT. Один из параметров директивы SEGMENT: тип выравнивания, тип объединения или тип сегмента, — имеет недопустимое значение.
- Can't add relative quantities
- Нельзя складывать относительные адреса.
- Can't address with currently ASSUMEd segment registers
- Невозможна адресация из текущих, установленных директивой assume, сегментных регистров. В выражении содержится ссылка на переменную, для доступа к которой не специфицирован сегментный регистр.
- Can't convert to pointer
- Невозможно преобразование в указатель.
- Can't emulate 8087 instruction
- Невозможна эмуляция команд сопроцессора 8087.
- Can't make variable public
- Переменная не может быть объявлена как PUBLIC. Скорее всего, это вызвано тем, что данная переменная была уже где-то ранее объявлена таким образом, что уже не может быть определена как общая (PUBLIC).
- Can't override ES segment
- Нельзя переопределить сегмент ES. Это сообщение характерно для операций типа цепочечных. В некоторых из них нельзя переопределять местоположение сегментной части адреса операнда.
- Can't subtract dissimilar relative quantities
- Недопустимое вычитание относительных адресов. Выражение содержит операцию вычитания двух адресов, которая для данных адресов является недопустимой. К примеру, это может случиться, если адреса находятся в разных сегментах.
- Can't use macro name in expression
- Недопустимо использование имени макрокоманды в качестве операнда выражения.
- Can't use this outside macro
- Использование данного оператора недопустимо вне макроопределения.
- Code or data emission to undeclared segment
- Не объявлен сегмент для кода или данных. Это может случиться, если предложение программы, генерирующее код или данные, не принадлежит ни одному из сегментов, объявленных директивами SEGMENT.
- Constant assumed to mean Immediate const
- Константа интерпретируется как непосредственная.
- Constant too large
- Слишком большая константа. Константа превышает допустимую для данного режима величину. Например, числа, большие 0ffffh, можно использовать, если только директивой .386/.386P или .486/.486Р разрешены команды процессора i386 или i486.1
- CS not correctly assumed
- Некорректное значение в регистре cs.
- CS override in protected mode
- Переопределение регистра CS в защищенном режиме. Это предупреждающее сообщение выдается, если в командной строке указан параметр /Р.
- CS unreachable from current segment
- CS недостижим из текущего сегмента. При определении метки кода с помощью двоеточия (:) или с помощью директив LABEL или PROC сегментный регистр не указывает на текущий кодовый сегмент или группу, содержащую текущий кодовый сегмент.
- Declaration needs name
- В директиве объявления не указано имя.
- Directive ignored in Turbo Pascal model
- В режиме TPASCAL директива игнорируется.
- Directive not allowed inside structure definition
- Недопустимая директива внутри определения структуры.
- Duplicate dummy arguments:
- Недопустимо использование одинаковых имен для формальных параметров
- Expecting METHOD keyword
- Требуется ключевое слово METHOD.
- Expecting offset quantity
- Требуется указать величину смещения.
- Expecting offset or pointer quantity
- Требуется указать смещение или указатель.
- Expecting pointer type
- Операнд должен быть указателем. Означает, что операндом текущей команды должен быть адрес памяти.
- Expecting record field name
- Требуется имя поля записи. Инструкция SETFIELD или GETFIELD использована без последующего имени поля.
- Expecting register ID
- Требуется идентификатор регистра
- Expecting scalar type
- Операнд должен быть константой.
- Expecting segment or group quantity
- Должно быть указано имя сегмента или группы.
- Extra characters on line
- Лишние символы в строке.
- Forward reference needs override
- Ошибка при использовании умолчания для ссылки вперед.
- Global type doesn't match symbol type
- Тип, указанный в директиве GLOBAL, не совпадает с действительным типом имени идентификатора.
- ID not member of structure
- Идентификатор не является полем структуры.
- Illegal forward reference
- Недопустимая ссылка вперед.
- Illegal immediate
- Недопустим непосредственный операнд.
- Illegal indexing mode
- Недопустимый режим индексации.
- Illegal instruction
- Недопустимая команда.
- Illegal instruction for currently selected processor(s)
- Недопустимая команда для выбранного в настоящий момент процессора.
- Illegal local argument
- Недопустимый локальный параметр.
- Illegal local symbol prefix
- Недопустимый префикс для локальных имен идентификаторов.
- Illegal mаcro argument
- Недопустимый параметр макрокоманды.
- Illegal memory reference
- Недопустима ссылка на память.
- Illegal number
- Недопустимое число.
- Illegal origin address
- Недопустимый начальный адрес.
- Illegal override in structure
- Недопустимое переопределение в структуре.
- Illegal override register
- Недопустимое переопределение регистра.
- Illegal radix
- Недопустимое основание системы счисления. В директиве .RADIX в качестве основания системы счисления указано недопустимое число. Основанием системы счисления могут быть только числа: 2, 8, 10 и 16. Эти числа интерпретируются как десятичные независимо от текущей системы счисления.
- Illegal register for instruction
- Недопустимый регистр в инструкции. В качестве операнда инструкций SETFIELD и GETFIELD использован недопустимый регистр.
- Illegal register multiplier
- Недопустимо указание множителя для регистра.
- Illegal segment address
- Недопустимый сегментный адрес.
- Illegal use of constant
- Недопустимо использование константы.
- Illegal use of register
- Недопустимо использование регистра.
- Illegal use of segment register
- Недопустимо использование сегментного регистра.
- Illegal USES register
- В директиве USES указан недопустимый регистр.
- Illegal version ID
- Недопустимый идентификатор версии.
- Illegal warning ID
- Недопустимый идентификатор предупреждающего сообщения.
- Instruction can be compacted with override
- Возможно сокращение длины команды, если явно указать тип имени. Из-за наличия ссылки вперед на имя идентификатора объектный код содержит дополнительные команды NOP. Этим самым транслятор резервирует место для размещения адреса идентификатора. При необходимости код можно сократить, убрав ссылку вперед, либо явно указать тип символического имени.
- Invalid model type
- Недопустимая модель памяти.
- Invalid operand(s) to instruction
- Недопустимый операнд(ы) для данной команды.
- Labels can't start with numeric characters
- Метки не могут начинаться с цифровых символов.
- Line too long - truncated
- Строка слишком длинная, и поэтому производится усечение.
- Location counter overflow
- Переполнение счетчика адреса.
- Method call requires object name
- В вызове метода необходимо имя объекта.
- Missing argument list
- Отсутствует список аргументов.
- Missing argument or <
- Отсутствует аргумент либо не указана угловая скобка <.
- Missing argument size variable
- Отсутствует переменная для размера блока параметров.
- Missing COMM ID
- Отсутствует идентификатор в директиве COMM.
- Missing dummy argument
- Отсутствует формальный параметр.
- Missing end quote
- Отсутствует закрывающая кавычка.
- Missing macro ID
- Отсутствует идентификатор макрокоманды.
- Missing module name
- Отсутствует имя модуля.
- Missing or illegal type specifier
- Отсутствует или неверно указан спецификатор типа.
- Missing table member ID
- Пропущен идентификатор элемента таблицы.
- Missing term in list
- Отсутствует член в списке параметров.
- Missing text macro
- Отсутствует текстовая макрокоманда.
- Model must be specified first
- Сначала должна быть указана модель памяти.
- Module is pass-dependant — compatibility pass was done
- Модуль зависит от прохода. Выполнен проход, обеспечивающий совместимость с MASM.
- Name must come first
- Имя должно быть указано первым.
- Near jump or call to different CS
- Адресат ближнего перехода или вызова находится в другом кодовом сегменте.
- Need address or register
- Требуется указать адрес или регистр.
- Need colon
- Требуется двоеточие.
- Need expression
- Требуется указать выражение.
- Need file name after INCLUDE
- В директиве INCLUDE должно быть указано имя файла.
- Need left parenthesis
- Отсутствует левая круглая скобка.
- Need method name
- Требуется имя метода.
- Need pointer expression
- Требуется выражение-указатель.
- Need quoted string
- Требуется указать строку в кавычках.
- Need register in expression
- В выражении требуется указать имя регистра.
- Need right angle bracket
- Отсутствует правая угловая скобка.
- Need right curly bracket
- Требуется правая фигурная скобка.
- Need right parenthesis
- Отсутствует правая круглая скобка.
- Need right square bracket
- Отсутствует правая квадратная скобка.
- Need stack argument
- Не указан стековый параметр в команде арифметики с плавающей запятой.
- Need structure member name
- Не указано имя поля структуры.
- Not expecting group or segment quantity
- Использование имени группы или сегмента недопустимо.
- One non-null field allowed per union expansion
- При расширении объединения допускается указывать только одно поле непустым.
- Only one startup sequence allowed
- Допускается только одна директива генерации кода инициализации.
- Open conditional
- Открытый условный блок. После завершающей программу директивы END обнаружен незакрытый условно ассемблируемый блок, открытый одной из директив IFxxx.
- Open procedure
- Открытая процедура. После завершающей программу директивы END обнаружен незакрытый директивой ENDР блок описания процедуры, открытый где-то в программе директивой PROC.
- Open segment
- Открытый сегмент. После завершающей программу директивы END обнаружен незакрытый директивой ENDS сегмент, открытый где-то в программе директивой SEGMENT.
- Open structure definition
- Не указан конец определения структуры (директива ENDS).
- Operand types do not match
- Не совпадают типы операндов. Тип одного из операндов команды не совпадает с типом другого операнда либо не является допустимым для данной команды.
- Operation illegal for static table member
- Для статического элемента таблицы операция не допускается.
- Pass-dependant construction encountered
- Обнаружена конструкция, зависящая от прохода. Данную ошибку можно исправить, убрав ссылки вперед либо указав нужное число проходов транслятора в опции командной строки /m.
- Pointer expression needs brackets
- Адресное выражение должно быть заключено в квадратные скобки.
- Positive count expecting
- Счетчик должен быть положительным.
- Record field too large
- Слишком длинное поле в записи.
- Record member not found
- Не найден статический элемент записи.
- Recursive definition not allowed for EQU
- Рекурсивное определение недопустимо в директиве EQU.
- Register must be AL or AX
- Допустимо указание только регистра al или ax.
- Register must be DX
- Допустимо указание только регистра dx.
- Relative jump out of range by __ bytes
- Адрес назначения условного перехода превышает допустимый предел на __ байт.
- Relative quantity illegal
- Недопустимый относительный адрес. Ссылка на адрес памяти не может быть разрешена на этапе ассемблирования.
- Reserved word used as symbol
- Зарезервированное слово используется в качестве имени идентификатора.
- Rotate count must be constant or CL
- Счетчик в командах сдвига должен быть указан с помощью константы или регистра cl.
- Rotate count out of range
- Недопустимое значение для счетчика сдвига.
- Segment alignment not strict enough
- Выравнивание сегмента недостаточно точное.
- Segment attributes illegally redefined
- Недопустимое переопределение атрибутов сегмента. Суть здесь в том, что пользователь может повторно открывать уже определенный ранее сегмент. Но при этом атрибуты этого сегмента должны иметь те же самые значения либо вообще быть опущены (тогда будут взяты прежние значения).
- Segment name is superfluous
- Имя сегмента игнорируется.
- String too long
- Слишком длинная строка. Длина указанной в кавычках строки превышает 255 символов.
- Symbol already defined: __
- Имя идентификатора уже определено.
- Symbol already different kind
- Имя идентификатора уже объявлено с другим типом.
- Symbol has no width or mask
- Имя идентификатора не может быть использовано в операциях WIDTH и MASK.
- Symbol is not a segment or already part of a group
- Имя идентификатора не является именем сегмента либо уже определено в группе.
- Text macro expansion exceeds maximum line length
- Расширение текстовой макрокоманды превышает максимально допустимую длину.
- Too few operands to instruction
- В команде не хватает операндов.
- Too many errors or warnings
- Слишком много ошибок или предупреждений. Число сообщений об ошибках превысило максимально возможное число — 100.
- Too many initial values
- Слишком много начальных значений.
- Too many register multipliers in expression
- В выражении содержится слишком много множителей для регистров.
- Too many registers in expression
- В выражении указано слишком много регистров.
- Too many USES registers
- Слишком много регистров в директиве USES.
- Trailling null value assumed
- Предполагается конечное пустое значение.
- Undefined symbol
- Идентификатор не определен.
- Unexpected end of file (no END directive)
- Неожиданный конец файла (нет директивы END).
- Unknown character
- Неизвестный символ.
- Unmatched ENDP:_
- Непарная директива ENDP:_.
- Unmatched ENDS:_
- Непарная директива ENDS:_.
- User-generated error
- Ошибка, сгенерированная пользователем. Сообщение выдается в результате выполнения одной из директив генерирования ошибки.
- USES has no effect without language
- USES игнорируется без спецификации языка.
- Value out of range
- Значение константы превышает допустимое значение.
Сообщения о фатальных ошибках
- Bad switch
- Can't find @file __
- Сan't locate file __
- Error writing to listing file
- Error writing to object file
- File not found
- File was changed or deleted while assembly in progress
- Insufficient memory to process command line
- Internal error
- Invalid command line
- Invalid number after _
- Out of hash space
- Out of memory
- Out of string space
- Too many errors found
- Unexpected end of file (no END directive)
- Bad switch
- Неверный параметр-переключатель командной строки.
- Can't find @file __
- Не найден файл подсказок __.
- Сan't locate file __
- Не обнаружен файл __. При выдаче этого сообщения нужно проверить, правильно ли указаны в имени файла имя дисковода и маршрут доступа к файлу, указанному в директиве INCLUDE.
- Error writing to listing file
- Ошибка при записи в файл листинга. Возможно, просто исчерпано место на диске.
- Error writing to object file
- Ошибка при записи в объектный файл. Возможно, просто исчерпано место на диске.
- File not found
- Не найден файл. В командной строке указано имя несуществующего исходного файла.
- File was changed or deleted while assembly in progress
- Файл был изменен или уничтожен в процессе ассемблирования.
- Insufficient memory to process command line
- Не хватает памяти для обработки командной строки.
- Internal error
- Внутренняя ошибка.
- Invalid command line
- Недопустимая командная строка
- Invalid number after _
- Недопустимый номер после _.
- Out of hash space
- Не хватает памяти под хеш-таблицы. Для каждого имени идентификатора в программе транслятор формирует один элемент таблицы идентификаторов. Эта таблица рассчитана на 16 384 имени идентификаторов. При необходимости это число можно увеличить, используя параметр командной строки /kh.
- Out of memory
- Не хватает памяти. Для ассемблирования пользовательского файла недостаточно свободной памяти.
- Out of string space
- Не хватает памяти под строки. Здесь имеется в виду выделяемый объем памяти для хранения строк, представляющих собой имена идентификаторов, имена файлов, информацию для разрешения опережающих ссылок, текстов макрокоманд. Допускается максимум 512 Кбайт памяти, но в результате компиляции исходной программы этот объем был превышен.
- Too many errors found
- Обнаружено слишком много ошибок. Трансляция прекращена, так как в исходном файле содержится слишком много ошибок.
- Unexpected end of file (no END directive)
- Неожиданный конец файла (отсутствует директива END).