Operand types do not match ассемблер

Operand types do not match ассемблер

Справочная система по языку Assembler

В процессе своей работы транслятор TASM формирует два типа ошибок: сообщения о неправильных или некорректных конструкциях в исходном ассемблерном тексте и сообщения о фатальных ошибках. Особенность последних в том, что при их возникновении TASM выдает соответствующее сообщение и немедленно прекращает ассемблирование исходного файла.

Выберите нужный тип ошибки:

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

Сообщения о фатальных ошибках

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).

Читайте также:  Panasonic kx tg7225ru инструкция

Open conditional (Открытый условный блок)

О бнаружена директива END, означающая конец исходного файла. Однако условно ассемблируемый блок, открытый одной из директив вида IFxxx, не был закрыт директивой ENDIF. Например:

Э та ошибка обычно выдается, если вместо директивы окончания условного блока ENDIF, ошибочно указана директива END.

Open procedure (Открытая процедура)

О бнаружена директива END, означающая конец исходного файла. Однако блок описания процедуры, открытый директивой PROC, не был закрыт директивой ENDР. Например:

Э та ошибка обычно выдается, если вместо директивы конца блока процедуры — ENDP ошибочно указана директива END.

Open segment (Открытый сегмент)

О бнаружена директива END, означающая конец исходного файла. Однако сегмент, открытый директивой SEGMENT, не был закрыт директивой ENDS. Например:

Э та ошибка обычно выдается, если вместо директивы конца сегмента — ENDS ошибочно указана директива END.

Open structure definition (Не указан конец определения структуры)

О бнаружена директива END, означающая конец исходного файла. Однако определение структуры, начало которой указано директивой STRUCTURE, не было завершено директивой ENDS. Например:

Э та ошибка обычно выводится, если вместо директивы конца структуры ENDS ошибочно указана директива END.

Operand types do not match (Не совпадают типы операндов)

Т ип одного из операндов команды не совпадает с типом другого операнда либо не является допустимым для данной команды. Например:

Operation illegal for static table member (Для статического элемента таблицы операция не допускается)

Д ля получения адреса статического элемента таблицы использована операция точки. Это не допускается.

Pass-dependant construction encountered (Обнаружена конструкция, зависящая от прохода)

Д ействие оператора возможно не совпадает с ожидаемым из-за однопроходности Турбо Ассемблера. Например:

Б ольшинство конструкций, с которыми связано это сообщение, может быть скорректировано так, чтобы это сообщение исчезло. Обычно для этого достаточно убрать ссылки вперед.

Читайте также:  0Xc0000098 при установке windows 10 с флешки

Pointer expression needs brackets (Адресное выражение должно быть заключено в квадратные скобки)

В режиме Ideal операнд, содержащий имя идентификатора, представляющее собой ссылку на память, не заключен в квадратные скобки. В режиме Ideal квадратные скобки означают ссылку на адрес памяти. Например:

Т .к. в режиме MASM квадратные скобки не обязательны, то это сообщение выдается как предупреждающее.

Positive count expecting (Счетчик должен быть положительным)

В выражении для DUP в качестве счетчика повторений указано отрицательное число. Например:

С четчик в операции DUP должен быть равен или больше 1.

Record field too large (Слишком длинное поле в записи)

В определении записи сумма длин всех полей превышает 32 бита. Например:

AREC RECORD RANGE:12,TOP:12,BOTTOM:12

Record member not found (Не найден статический элемент записи)

Э лемент записи задан в заполнителе указанной записи, который не является частью заданной записи.

Recursive definition not allowed for EQU (Рекурсивное определение не допустимо в директиве EQU)

В выражении директивы EQU содержится то же самое имя, которое определяется этой директивой. Например:

ABC EQU TWOTIMES ABC

Register must be AL or AX (Допустимо указание только регистра AL или AX)

Н еверен операнд команды. Допускается использовать только регистры AL и AX. Например:

Register must be DX (Допустимо указание только регистра DX)

Н еверен операнд команды. Допускается использовать только регистр DX. Например:

IN AL,cx ; ошибка: вместо СХ должен быть указан регистр DX

Relative jump out of range by __ bytes (Адрес назначения условного перехода превышает допустимый предел на __ байт)

А дрес назначения в команде условного перехода находится вне допустимого диапазона, т.е. не принадлежит интервалу (-127, +128) от текущего адреса. В 32-битовом сегменте адрес назначения условного перехода должен находиться в диапазоне от -32767 до +32768 байт от текущего адреса.

Читайте также:  Divinity original sin 2 телекинез

Relative quantity illegal (Недопустимый относительный адрес)

К оманда или директива содержит операнд, ссылающийся на адрес памяти таким способом, что эта ссылка не может быть разрешена на этапе ассемблирования. Такие ссылки в Турбо Ассемблере являются недопустимыми. Например:

Reserved word used as symbol (Зарезервированное слово используется в качестве имени идентификатора)

В программе пользователя определяется имя идентификатора, совпадающее с одним из зарезервированных слов Турбо Ассемблера. Программа будет ассемблироваться правильно, однако переопределять зарезервированные в Турбо Ассемблере слова не рекомендуется.

Rotate count must be constant or CL (Счетчик в командах сдвига должен быть указан с помощью константы или регистра CL)

В команде сдвига или циклического сдвига указан операнд, отличный от константы и регистра CL. Например:

В командах сдвига и циклического сдвига в качестве второго операнда можно указывать только константу или регистр CL.

Задание : найти максимальное слово в строке и вывести его. Вот мой код, но выдает ошибку в этой строке

1 ответ 1

Для masm и tasm нужно явно указывать, что вы хотите записать в регистр адрес (смещение), для этого используется ключевое слово offset :

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

Другой вариант — использовать команду lea (load effective address — загрузить "эффективный" адрес):

Несмотря на то что в правом операнде указаны квадратные скобки, в левый операнд в любом случае будет записан адрес правого операнда.

Ссылка на основную публикацию
Adblock detector