Constant too large (Слишком большая константа)
Константа имеет, вообще говоря, правильный формат, однако ее значение превышает допустимую для данного режима величину. Например, числа, большие 0ffffh, можно использовать, если только директивой .386/.386P или .486/.486Р разрешены команды процессора 386 или i486.
CS not correctly assumed (Некорректное значение в регистре CS)
Адрес назначения в командах ближнего вызова и ближнего перехода не может находиться в другом сегменте. Например:
SEG1 SEGMENT LAB1 LABEL NEAR SEG1 ENDS SEG2 SEGMENT JMP LAB1 ; ошибка: неверный сегментный адрес SEG2 ENDS
Такие ошибки возникают только в режиме MASM. В режиме Ideal такие переходы и вызовы интерпретируются корректно.
CS override in protected mode (Переопределение регистра CS в защищенном режиме)
В защищенном режиме ассемблирования команд процессора 286, 386 или i486, установленном директивой Р286Р, P386P или Р486Р, в текущей команде требуется переопределение регистра CS. Например:
P286 .CODE CVAL DW ? mov CVAL,1 ; генерирует переопределение регистра CS
Это предупреждающее сообщение выдается, если в командной строке указан параметр /Р. В защищенном режиме команды, в которых переопределяется регистр CS, не будут выполняться без специальных подготовительных операций.
CS unreachable from current segment (CS недостижим из текущего сегмента)
При определении метки кода с помощью двоеточия (:) или с помощью директив LABEL или PROC сегментный регистр не указывает на текущий кодовый сегмент или группу, содержащую текущий кодовый сегмент. Например:
PROG1 SEGMENT ASSUME CS:PROG2 START: ; ошибка: неверно установлен регистр CS
Такие ошибки возникают только в режиме MASM. В режиме Ideal такие переходы и вызовы обрабатываются корректно.
Declaration needs name (В директиве объявления не указано имя)
Не указано имя идентификатора в директиве, для которой спецификация имени является обязательной. Например:
PROC ; ошибка: в директиве PROC указание имени обязательно ret ENDP
В директивах объявления, таких как SEGMENT, PROC или STRUC, обязательно должно быть указано имя идентификатора. В режиме MASM имя указывается перед именем директивы, а в режиме Ideal - после имени директивы.
Directive ignored in Turbo Pascal model (В режиме TPASCAL директива игнорируется)
В модуле Ассемблера, предназначенном для интерфейса с Турбо Паскалем, используется недопустимая директива. Режим интерфейса с Турбо Паскалем специфицируется директивой .MODEL. Более подробно интерфейс с Турбо Паскалем обсуждается в этой главе.
Directive not allowed inside structure definition (Недопустимая директива внутри определения структуры)
Внутри блока определения структуры указана недопустимая директива. Например:
X STRUC MEM1 DB ? ORG $+4 ; ошибка: директиву ORG нельзя указывать ; внутри структуры MEM2 DW ? ENDS
При определении вложенных структур нельзя определять новые структуры на внутренних уровнях. Например:
F00 STRUC F002 STRUC ; ошибка: определена новая структура ENDS ENDS
Для того чтобы использовать одну структуру внутри другой структуры, нужно сначала определить первую структуру, а после этого во второй структуре можно указывать имя первой.
Duplicate dummy arguments:_ (Недопустимо использование одинаковых имен для формальных параметров)
В директиве MACRO определено несколько формальных параметров с одинаковыми именами. Например:
XYZ MACRO A,A ; ошибка: дублируются имена формальных параметров DB A ENDM
Все формальные параметры макроопределения должны иметь различные имена.
ELSE or ENDIF without IF (ELSE или ENDIF без IF)
Для директивы ELSE или ENDIF нет парной директивы IF, обозначающей начало условно ассемблируемого блока. Например:
BUF DB 10 DUP(?) ENDIF ; ошибка: нет парной директивы IFxxx
Expecting METHOD keyword (Требуется ключевое слово METHOD)
В расширенном структурном операторе для определения объектов после порождающего объекта требуется ключевое слово METHOD.
Expecting offset quantity (Требуется указать величину смещения)
В качестве операнда выражения указано неверное значение вместо ожидаемого смещения внутри сегмента. Например:
CODE SEGMENT mov ax,LOW CODE CODE ENDS
Expecting offset or pointer quantity (Требуется указать смещение или указатель)
В качестве операнда выражения указано неверное значение вместо ожидаемого смещения внутри специфицированного сегмента. Например:
CODE SEGMENT mov ax,SEG CODE ; ошибка: СODE - это сегмент, ; а не адрес внутри сегмента CODE ENDS
Expecting pointer type (Операнд должен быть указателем)
Операндом текущей команды должен быть адрес памяти. Например:
LES di,4 ; неверно, т.к. 4 - константа
Expecting record field name (Требуется имя поля записи)
Вы использовали инструкцию SETFIELD или GETFIELD без последующего имени поля.
Expecting register ID (Требуется идентификатор регистра)
В части USES оператору CALL.METHOD требуются имена регистров.
Expecting scalar type (Операнд должен быть константой)
Операндом текущей команды должна быть константа. Например:
BB DB 4 rol ax,BB ; ошибка: вторым операндом операции ROL ; должна быть константа
Expecting segment or group quantity (Должно быть указано имя сегмента или группы)
В операторе вместо имени сегмента или группы указано имя, которое таковым не является. Например:
DATA SEGMENT ASSUME ds:F00 ; ошибка: F00 не является именем ; сегмента или группы F00 DW 0 DATA ENDS
Extra characters on line (Лишние символы в строке)
Выражение имеет корректный синтаксис, однако вслед за ним, на той же строке имеются еще лишние символы. Например:
ABC = 4 shl 3 3 ; нет знака операции ; между двумя тройками
Данная ошибка обычно является следствием другой ошибки, в результате которой анализатор выражений преждевременно заканчивает обработку выражения.
Forward reference needs override (Ошибка при использовании умолчания для ссылки вперед)
В результате использования умолчания для ссылки вперед было зарезервировано меньше памяти, чем это оказалось необходимо. Эта ошибка возникает тогда, когда имя идентификатора, по умолчанию означающее адрес ближнего перехода или вызова, переопределяется в программе как дальний адрес. Эта ошибка возникает также в тех случаях, когда не указан сегмент (отличный от предполагаемого по умолчанию) для доступа к переменной. Например:
ASSUME cs:DATA call A ; по умолчанию - ближний вызов A PROC FAR ; а здесь переопределяется как дальний mov ax,MEMVAR ; не известно, что требуется другой сегмент DATA SEGMENT MEMVAR DW ? ; здесь ошибка: требуется переопределение
Эти ошибки исправляются путем явного указания сегмента или типа перехода FAR.
Global type doesn"t match symbol type (Тип, указанный в директиве GLOBAL не совпадает с действительным типом имени идентификатора)
Это предупреждающее сообщение выдается, если объявление символического имени директивой GLOBAL находится в том же самом сегменте, где определяется это имя идентификатора, однако тип, указанный в директиве GLOBAL, не совпадает с действительным типом этого имени идентификатора.
1 2 3 4 5 6 7 8 9 10
8 8 8
|