Сообщения об ошибках MASM

 

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

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

Пример:

110 Sourse Lines (исходных строк)

145Total Lines (Всего строк)

21 Symbols (символьных имен)

25684 Bytes Symbol space free (байт свободного символьного пространства)

0 Warning Errors (возможных ошибок)

0 Severe Errors (критических ошибок)

Сообщения MASM, об ошибках обнаруженных во время трансляции приведены в порядке их номеров с короткими пояснениями в таблице 6.1.

 

Таблица 6.1 Сообщения MASM с пояснениями

Код Сообщение Пояснение
Extra characters on line Лишние символы в строке В командной строке получена достаточная для определения управляющей директивы информация, но в нее уже введены избыточные символы
  Unknouwn symbol type Неизвестный символьный тип MASM не смог распознать типоразмер, указанный в метке или внешней декларации
  Redefinition of symbols Переопределение символьного имени Если какое-то символьное имя определено в двух местах, то эта ошибка будет обнаружена на первом проходе, при повторном объявлении данного имени.
  Symbol is multi-defined Многократно определенное символьное имя Если какое-то символьное имя определено в двух местах, то эта ошибка будет фиксироваться на втором проходе при каждом объявлении данного символьного имени. (см. ошибки 4 и 26)
  Syntax error Синтаксическая ошибка Синтаксис конкретного оператора не совпадает ни с одной из распознаваемых синтаксических конструкций.  
  Type illegal in context Недопустимый в контексте тип Недопустимая размерность конкретного заданного типа
  Must be declared in pass 1 Должно быть объявление на первом проходе Существует ссылка на тот или иной компонент до его определения на первом проходе. К примеру: выражение вида IF DEBUG недопустимо, если символьное имя DEBUG не определено
  Symbol type usage illegal Неправильное использование символьного типа Неправильное использование символьного наименования PUBLIC
  Symbol is reserved word В качестве символьного имени использовано зарезервированное слово Попытка недопустимого использования зарезервированного слова ассемблера. К примеру, объявление переменной с именем MOV.
  Forward reference is illegal Ссылка вперед недопустима Попытка ссылки на некий компонент до его определения в первом проходе.
  Must be register Должен быть указан регистр Пользователь указал в качестве операнда символьное имя вместо регистра.
  Wrong type of register Неправильный тип регистра В директиве или инструкции указан тип регистра, отличный от требуемого. Например: INC CS, поскольку нельзя выполнить увеличение значения кодового сегмента.
  Must be segment of group Должен быть сегмент или группа Вместо требуемого сегмента или группы было указано нечто другое.
  Symbol has no segment Символьное имя без сегмента Попытка использования символьного имени с SEG, тогда как символьному имени сегмент не отводится.
  Must be symbol type Должен быть символьный тип Вместо одного из типов WORD, DW, QW, BYTE, и т.п. получено какое-то другое значение.
  Already defined locally Уже дано локальное определение Попытка определить EXTERN как какое-то символьное имя, ранее уже определенное как локальное.
  Segment parameters are changed Изменены параметры сегмента Список аргументов для SEGMENT отличается от того, который был при первом использовании сегмента.
  Non proper align/ combine type Несоответствующий счетный / комбинаторный тип Некорректные параметры SEGMENT. Следует проверить используемые счетный и комбинаторный типы, чтобы убедиться в том, что введены правильные типы.
  Reference to multi defined Ссылка на множествен-ное определение Инструкция ссылается на неоднократно определенное символьное имя (см ошибки с № 4 и 5)
Operand was expected Должен быть операнд Ассемблер обнаружил оператор вместо требуемого операнда
Operator was expected Должен быть оператор Ассемблер обнаружил операнд вместо требуемого оператора  
  Division by 0 or overflow Деление на ноль или переполнение Приведенное выражение дает деление на 0 или слишком большое число, не имеющее представления
  Shift count is negative Отрицательный сдвиговый счет Образовано выражение для сдвига. Дающее его отрицательное значение
  Operand types must match Типы операндов должны соответствовать Ассемблер обнаружил разные виды или размерности аргументов в той ситуации, в которой предполагается их соответствие. К примеру, оператор типа mov ax,bh является недопустимым; в качестве обоих операндов должны использоваться либо слова, либо байты.  
  Illegal use of external Недопустимое использование внешнего компонента Недопустимое использование внешнего определения.
  Must be record field name Должно быть имя поля записи Вместо наименования поля записи получено нечто иное
  Must be record or field name Должно быть имя записи или поля Вместо наименования поля или записи принято нечто иное.
  Operand must have size Операнд должен иметь размерность Операнд должен обладать размерностью, но она не указана. Часто эту ошибку можно исправить, использовав оператор PTR для указания типоразмера.
Must be var, label or constant Должна быть переменная, метка или константа Должна быть переменная, метка или константа, но вместо этого получено что-то другое.
Must be structure field name Должно быть имя поля структуры Вместо имени поля структуры получено что-то другое.
  Left operand must have segment В левом операнде должен быть указан сегмент Операнд требует указания сегмента. К примеру, выражение вида :symbol недопустимо, вместо этого должно быть seg:symbol.
  One operand must be const Один операнд должен быть константой Случай недопустимого использования оператора сложения.
  Operand must be same or 1 abs Операнды должны быть одного типа или 1 абс Недопустимое использование оператора вычитания.
Normal type operand expected Должен быть операнд нормального типа Получены STRUCT, WORD, BYTE или другой недопустимый операнд вместо требуемой метки переменной.
  Constant was expected Должна быть константа Должна быть константа, но вместо нее имя переменной.
  Operand must have segment Операнд должен иметь сегмент Недопустимое использование директивы SEG.
  Must be associated with data Должен быть компонент данных   Использование кодового компонента в том месте, где требуется компонент данных
  Must be associated with code Должен быть компонент данных Использование компонента данных в том месте где требуется компонент кода.
  Already have base register Базовый регистр уже есть В операнде использовано более одного базового регистра. Например: mov ax,[bx+bp]
  Already have index register Индексный регистр уже есть В операнде использовано более одного индексного регистра. Например: mov ax,[si+di]
  Must be index or base register Должен быть индексный или базовый регистр В инструкции должен быть задан индексный или базовый регистр, тогда как в квадратных скобках уже указан какой-то другой регистр. Например: mov ax, [bx+ax]
  Illegal use of register Неправильное использование регистра Использование какого-либо регистра в инструкции, не предусматривающей такое применение регистра или когда невозможно применение никакого регистра.
  Value is out of range Значение вне диапазона Значение превышает возможное для ячейки или регистра.. Например: mov al,5000 недопустимо.
  Operand not in IP segment Операнд не в сегменте IP Доступ к операнду невозможен, поскольку он находится вне текущего по IP сегмента
  Improper operand type Неподходящий тип операнда Способ использования некоторого операнда препятствует формированию операционного кода
  Relative jump out of range Относительный переход вне диапазона Условные переходы должны совершаться в пределах от –128 до +127 байтов относительно текущей инструкции, но какой-то отдельный переход оказался вне этого диапазона.
  Index displ. Must be constant Индексное смещение должно быть постоянным Недопустимое использование индексного смещения.
  Illegal register value Недопустимое значение регистра Указанное регистровое значение не укладывается в поле ‘reg’ (данное значение превышает 7)
  No immediate mode Непосредственный режим недопустим Непосредственные данные подставлены в качестве операнда для инструкции, которая не может использовать такие данные.
Byte register is illegal Недопустим байтовый регистр Использование одного из байтовых регистров в непредусмотренном для этого контексте. К примеру недопустим оператор вида PUSH AL; следует употребить вместо этого PUSH AX.
CS register illegal usage Недопустимое использование Попытка непредусмотренного использования регистра CS. Например, недопустимо выражение XCHG CS,AX
  Must be AX or AL Должен быть указан АХ или АL Спецификация некоторого регистра, иного, чем AX и AL, в такой ситуации, когда могут быть использованы только они. Например, инструкция IN требует указания в качестве её операнда регистры AX или AL
  Improper use of segment reg. Неправильно использован сегментный регистр Спецификация сегментного регистра в том месте, где он не может быть использован. Например, непосредственное перемещение в сегментный регистр.
  No or unreachable CS Отсутствует или недоступен CS Попытка перехода к недоступной метке.
  Operand combination illegal Недопустимая комбинация операндов Спецификация инструкции, включающей два операнда, с недопустимым в конкретном случае способом их взаимодействия.
  Near JMP/CALL to different CS Ближние JMP/CALL к разным CS Попытка выполнения NEAR <ближнего> перехода или обращения к ячейке в кодовом сегменте, определенном другим выражением ASSUME:CS
  Label can’t have seg. Override Для метки невозможно переопределение сегмента Недопустимое переопределение сегмента
  Must have upcode after prefix После префикса должен стоять операционный код Использование инструкции REPE, REPNE, REPZ или REPZN без указания после нее какого-либо операционного кода.
  Can’t override ES segment Невозможно переопределение сегмента ES Попытка переопределения сегмента ES в инструкции, которая не допускает такого переопределения. Например: недопустим оператор вида STOC DS:TARGET
  Can’t reach with segment reg. Нет доступа через сегментный регистр Данная переменная не входит ни в одну директиву типа ASSUME, обеспечивающую её доступность.
  Must be in segment block Выход из сегментного блока Попытка генерации кода вне сегмента
  Can’t use EVEN on BYTE segment EVEN на сегменте типа BYTE не используется Была использована директива EVEN, тогда как задействованный сегмент объявлен байтовым
  Illegal value for DUP count Недопустимое значение для счета DUP Счет DUP должен выражаться константой в виде положительного целого числа (больше нуля)
  Symbol already external Символьное имя уже объявлено внешним Попытка определения локальным некоторого символьного имени, которое уже объявлено внешним
  DUP is too large for linker Значение DUP превы-шает возможности компоновщика Организовано такое вложение операторов DUP, которое образовало слишком большую запись
  Usage of ? (intermediate) bad Неправильное (неопределенное) использование Неправильное использование неопределенного операнда (?). Например, нельзя записать ? +5
  Override with DUP is illegal Переопределение с DUP недопустимо Попытка использования DUP при переопределении в операторе инициализации STRUC
  Field cannot be overriden Поле не может быть переопределено Попытка задания значения для какого-то поля в операторе инициализации STRUC, которое не может быть переопределено.
  Override is wrong type Неправильный тип переопределения Попытка использования неправильной размерности при переопределении в операторе инициализации STRUC.  
  Register can’t be forward ref Недопустима ссылка вперед на регистр Имела место попытка ссылки вперед на сегмент
  Circular chain of EQU aliases Цикличность в EQU Оказалось, что EQU указывает сам на себя
  8087 opcode can’t be emulated Невозможна эмуляция операционного кода 8087 Текущий операционный код 8087 или операнды, которые с ним используются, образуют инструкцию, которую эмулятор не поддерживает
  End of file, no END directive Конец файла без директивы END Нет оператора окончания или допущена ошибка вложения.
  Data emitted with no segment Данные формируются вне сегмента Попытка генерации данных кодом, расположенным вне сегмента

 








Дата добавления: 2016-01-26; просмотров: 3582;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.