Сообщения об ошибках 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; просмотров: 3942;
