Сообщения об ошибках MASM и LINK
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

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

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

Пример:

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

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

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

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

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

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

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

 

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

Код Сообщение Пояснение
1 Extra characters on line Лишние символы в строке В командной строке получена достаточная для определения управляющей директивы информация, но в нее уже введены избыточные символы
  3 Unknouwn symbol type Неизвестный символьный тип MASM не смог распознать типоразмер, указанный в метке или внешней декларации

Продолжение таблицы 6.1

  4 Redefinition of symbols Переопределение символьного имени Если какое-то символьное имя определено в двух местах, то эта ошибка будет обнаружена на первом проходе, при повторном объявлении данного имени.                   
  5 Symbol is multi-defined Многократно определенное символьное имя Если какое-то символьное имя определено в двух местах, то эта ошибка будет фиксироваться на втором проходе
  10 Syntax error Синтаксическая ошибка Синтаксис конкретного оператора не совпадает ни с одной из распознаваемых синтаксических конструкций.
  11 Type illegal in context Недопустимый в контексте тип Недопустимая размерность конкретного заданного типа
  13 Must be declared in  pass 1 Должно быть объявление на первом проходе Существует ссылка на тот или иной компонент до его определения на первом проходе. К примеру: выражение вида IF DEBUG недопустимо, если символьное имя DEBUG не определено
  14 Symbol type usage illegal Неправильное использование символьного типа Неправильное использование символьного наименования PUBLIC
  16 Symbol is reserved word В качестве символьного имени использовано зарезервированное слово Попытка недопустимого использования зарезервированного слова ассемблера. К примеру, объявление переменной с именем MOV.
  17 Forward reference is illegal Ссылка вперед недопустима Попытка ссылки на некий компонент до его определения в первом проходе.
  18 Must be register Должен быть указан регистр Пользователь указал в качестве операнда символьное имя вместо регистра.
  19 Wrong type of register Неправильный тип регистра В директиве или инструкции указан тип регистра, отличный от требуемого. Например: INC CS, поскольку нельзя выполнить увеличение значения кодового сегмента.

Продолжение таблицы 6.1

  20 Must be segment of group   Должен быть сегмент или группа Вместо требуемого сегмента или группы было указано нечто другое
  21 Symbol has no segment Символьное имя без сегмента Попытка использования символьного имени с SEG, тогда как символьному имени сегмент не отводится
  22 Must be symbol type Должен быть символьный тип Вместо одного из типов WORD, DW, QW, BYTE, и т.п. получено какое-то другое значение
  23 Already defined locally Уже дано локальное определение Попытка определить EXTERN как какое-то символьное имя, ранее уже определенное как локальное
  24 Segment parameters are changed     Изменены параметры сегмента Список аргументов для SEGMENT отличается от того, который был при первом использовании сегмента
  25 Non proper align/ combine type Несоответствующий комбинаторный тип Некорректные параметры SEGMENT. Следует проверить используемые счетный и комбинаторный типы, чтобы убедиться в том, что введены правильные типы.
  26 Reference to multi defined Ссылка на множественное определение Инструкция ссылается на неоднократно определенное символьное имя
27 Operand was expected Должен быть операнд Ассемблер обнаружил оператор вместо требуемого операнда
28 Operator was expected Должен быть оператор Ассемблер обнаружил операнд вместо требуемого оператора
  29 Division by 0 or overflow Деление на ноль или переполнение Приведенное выражение дает деление на 0 или слишком большое число, не имеющее представления
  30 Shift count is negative Отрицательный сдвиговый счет Образовано выражение для сдвига. Дающее его отрицательное значение
  31 Operand types must match Типы операндов должны соответствовать Ассемблер обнаружил разные размерности аргументов. К примеру, оператор типа mov ax,bh является недопустимым; в качестве обоих операндов должны использоваться слова, либо байты.

Продолжение таблицы 6.1

  32 Illegal use of external Недопустимое использование внешнего компонента Недопустимое использование внешнего определения.
  33 Must be record field name Должно быть имя поля записи Вместо наименования поля записи получено нечто иное
  34 Must be record or field name Должно быть имя Вместо наименования поля или записи принято нечто иное
  35 Operand must have size Операнд должен иметь размерность Операнд должен обладать размерностью, но она не указана.
36 Must be constant ,var or label Должна быть константа, переменная или метка Должна быть переменная, метка или константа, но вместо этого получено что-то другое.
37 Must be structure field name Должно быть имя поля структуры Вместо имени поля структуры получено что-то другое.
  38 Left operand must have segment В левом операнде должен быть указан сегмент Операнд требует указания сегмента. К примеру, выражение вида :symbol недопустимо, вместо этого должно быть seg:symbol.
  39 One operand must be const Один операнд должен быть константой Случай недопустимого использования оператора сложения
  40 Operand must be same Операнды должны быть одного типа Недопустимое использование оператора вычитания
  41 Normal type operand expected Должен быть операнд нормального типа Получены STRUCT, WORD, BYTE или другой недопустимый операнд вместо требуемой метки переменной
42 Constant was expected Должна быть константа Должна быть константа, но вместо нее имя переменной

 

Продолжение таблицы 6.1

   43 Operand must have segment Операнд должен иметь сегмент Недопустимое использование директивы SEG
  44 Must be associated with data Должен быть компонент данных Использование кодового компонента в том месте, где требуется компонент данных
  45 Must be associated with code Должен быть компонент кода Использование компонента данных в том месте, где требуется компонент кода
  46 Already have base register Базовый регистр есть В операнде использовано более одного базового регистра. Например, mov ax,[bx+bp]
  47 Already have index register Индексный регистр есть В операнде использовано более одного индексного регистра. Например, mov ax,[si+di]
  48 Must be index or base register Должен быть индексный или базовый регистр В инструкции должен быть задан индексный или базовый регистр, тогда как в квадратных скобках уже указан какой-то другой регистр. Например: mov ax, [bx+ax]
  49 Illegal use of register Неправильное использование регистра Использование какого-либо регистра в инструкции, не предусматривающей такое применение регистра или когда невозможно применение никакого регистра
  50 Value is out of range Значение вне диапазона Значение превышает возможное для ячейки или регистра.
  51 Operand not in IP segment Операнд не в сегменте Доступ к операнду невозможен, поскольку он находится вне текущего по IP сегмента
  52 Improper operand type Неподходящий тип операнда Способ использования некоторого операнда препятствует формированию операционного кода
  53 Relative jump out of range Относительный переход вне диапазона Условные переходы должны совершаться в пределах от –128 до +127 байтов относительно текущей инструкции.

 

Продолжение таблицы 6.1

  54 Index displ. Must be constant Индексное смещение должно быть постоянным Недопустимое использование индексного смещения
  55 Illegal register value Недопустимое значение регистра Указанное регистровое значение не укладывается в поле ‘reg’ (данное значение превышает 7)
  56 No immediate mode Непосредственный режим недопустим Непосредственные данные подставлены в качестве операнда для инструкции, которая не может использовать такие данные
58 Byte register is illegal Недопустим байтовый регистр Использование одного из байтовых регистров в непредусмотренном для этого контексте. К примеру недопустим оператор вида PUSH AL; следует употребить вместо этого PUSH AX.
59 CS register illegal usage Недопустимое использование Попытка непредусмотренного использования регистра CS. Например, недопустимо выражение XCHG CS,AX
  60 Must be AX or AL Должен быть указан АХ или АL Спецификация некоторого регистра, иного, чем AX и AL, в такой ситуации, когда могут быть использованы только они. Например, инструкция IN требует указания в качестве её операнда регистры AX или AL
  61 Improper use of segment reg Неверно использован сегментный регистр Спецификация сегментного регистра в том месте, где он не может быть использован. Например, непосредственное перемещение в сегментный регистр
  62 No or unreachable CS Отсутствует или недоступен CS Попытка перехода к недоступной метке
  63 Operand combination illegal Недопустимая комбинация операндов Спецификация инструкции, включающей два операнда, с недопустимым в конкретном случае способом их взаимодействия
  64 Near JMP/CALL to different CS Ближние JMP/CALL к разным CS Попытка выполнения NEAR <ближнего> перехода или обращения к ячейке в кодовом сегменте, определенном другим выражением ASSUME:CS

Продолжение таблицы 6.1

  65 Label can’t have seg о verride Для метки невозможно переопределение сегмента Недопустимое переопределение сегмента
  66 Must have upcode after prefix После префикса должен быть операционный код Использование инструкции REPE, REPNE, REPZ или REPZN без указания после нее какого-либо операционного кода
  67 Can’t override ES segment Невозможно переопре-деление сегмента ES Попытка переопределения сегмента ES в инструкции, которая не допускает такого переопределения. Например: недопустим оператор вида STOC DS:TARGET
  68 Can’t reach with segment reg Нет доступа через сегментный регистр Данная переменная не входит ни в одну директиву типа ASSUME, обеспечивающую её доступность
  69 Must be in segment block Выход из сегментного блока Попытка генерации кода вне сегмента
  72 Illegal value for DUP count Недопустимое значение для счета DUP Счет DUP должен выражаться константой в виде положительного целого числа (больше нуля)
  73 Symbol already external Символьное имя уже объявлено внешним Попытка определения локальным некоторого символьного имени, которое уже объявлено внешним
  74 DUP is too large for linker Значение DUP больше возможного Организовано такое вложение операторов DUP, которое образовало слишком большую запись
  75 Usage of ? (intermediate) bad Неправильное использование Неправильное использование неопределенного операнда (?). Например, нельзя записать ? +5
  79 Override with DUP is illegal Переопределение с DUP недопустимо Попытка использования DUP при переопределении в операторе инициализации STRUC

Продолжение таблицы 6.1

  80 Field cannot be overriden Поле не может быть переопределено Попытка задания значения для какого-то поля в операторе инициализации STRUC, которое не может быть переопределено
  81 Override is wrong type Неправильный тип переопределения Попытка использования неправильной размерности при переопределении в операторе инициализации STRUC
  82 Register can’t be forward ref Недопустима ссылка вперед на регистр Имела место попытка ссылки вперед на сегмент
  83 Circular chain of EQU aliases Цикличность в EQU Оказалось, что EQU указывает сам на себя
  85 End of file, no END directive Конец файла без директивы END Нет оператора окончания или допущена ошибка вложения
  86 Data emitted with no segment Данные формируются вне сегмента Попытка генерации данных кодом, расположенным вне сегмента

 

     После трансляции исходного текста программу и получения модуля с расширением .obj, программу обрабатывает компоновщик LINK, который формирует исполняемый модуль программы. При компоновке программы также могут быть выявлены ошибки. Наиболее распространенные ошибки и сообщения о них приведены в таблице 6.2.  

 

Таблица 6.2 − Сообщения компоновщика LINK с пояснениями                                                            

Сообщения Пояснения
Cannot find library: имя _файла .lib. Enter new file spec. Не найдена библиотека: имя_файла lib.  Ввести новую спецификацию файла: Компоновщик не может найти файл “имя_файла”.lib. Пользователь должен ответить на выданный ему запрос, задав новое имя файла, новую спецификацию пути или то и другое.  

Продолжение таблицы 6.2

Warning: no stack is segment Предупреждение: нет стекового сегмента Программа пользователя не содержит стекового сегмента, который специфицирован с комбинаторным типом, специфицированным как stack.
Cannot open response file Невозможно открыть объектный файл LINK не может найти объектный файл, указанный пользователем. Обычно это происходит при ошибке ввода с клавиатуры
Cannot nest response file Вложение ответного файла невозможно Пользователь указал в объектном файле другой объектный файл
Cannot open run file Невозможно открыть рабочий файл Диск или корневая система заполнены. Чтобы освободить место, надо удалить или переместить файлы
Cannot open temporary file Невозможно открыть временный файл Диск или корневая система заполнены. Чтобы освободить место, надо удалить или переместить файлы
Common area longer than 65535K Общая зона превышает 65535К В программе общие переменные занимают более 64К.  Эта ошибка не может произойти с объектными файлами, сформированными  MASM
Is not a valid library Имя_файла не является правильной библиотекой Неправильная спецификация некоторого файла как библиотечного
Insufficient stack space Недостаточное пространство стека Не хватает памяти для работы компоновщика
Invalid object module Неправильный объектный модуль Один из объектных модулей оказался неправильным. Следует попытаться  выполнить повторную компиляцию.
No object modules specified Не указаны объектные модули Пользователь не задал компоновщику имен объектных файлов
Out of space on run file Нет места для рабочего файла Заполнен диск, на который записывается EXE-файл. Следует освободить необходимое для этого место на диске и повторить попытку.
Stack size exceeds 65535 bytes Размер стека превышает 65535 байтов Размер, указанный для стека с применением опции /STACK, превышает 65535 байтов

 

 

Отладчики программ

Дата: 2018-11-18, просмотров: 511.