Сообщение |
Описание |
---|---|
Divide by zero in asm evaluator |
Эта фатальная ошибка случается, если ассемблерное выражение выполняет деление на ноль. |
Evaluator stack overflow, Evaluator stack underflow |
Эта фатальная ошибка случается, если ассемблерное выражение слишком большое, чтобы вычислить его. Попытайтесь уменьшить количество условий. |
Invalid numeric format in asm evaluator |
Эта фатальная ошибка случается, если не числовое значение обнаружено анализатором синтаксиса. В обычной ситуации эта ошибка никогда не случается. |
Invalid Operator in asm evaluator |
Эта фатальная ошибка случается, если математический оператор обнаружен анализатором синтаксиса. В обычной ситуации эта ошибка никогда не случается. |
Unknown error in asm evaluator |
Эта фатальная ошибка случается, если внутренняя ошибка обнаружена анализатором синтаксиса. В обычной ситуации эта ошибка никогда не случается. |
Invalid numeric value |
Это предупреждение появляется, если результат преобразования из восьмеричного, двоичного или шестнадцатеричного представления в десятичное выходит за пределы поддерживаемого диапазона. |
Escape sequence ignored |
Эта ошибка появляется, если в строке С обнаружена последовательность не ANSI C. |
Asm syntax error -Prefix not found |
Это случается при попытке использовать неправильный префикс команды. |
Asm syntax error -Trying to add more than one prefix |
Это случается при попытке добавить в инструкции более одного префикса. |
Asm syntax error -Opcode not found |
Вы пытаетесь использовать неподдерживаемый или неизвестный код операции. |
Constant value out of bounds |
Эта ошибка появляется, если анализатор синтаксиса определил, что используемое вами значение находится вне границ, либо используется с кодом операции, либо с объявлением константы. |
Non-label pattern contains @ |
Это применяется только для ассемблеров стиля m68k и Intel. Сообщение появляется, если вы пытаетесь использовать идентификатор (НЕ метку) с префиксом @. |
Internal error in Findtype() |
Внутренняя ошибка в Findtype(). |
Internal Error in ConcatOpcode() |
Внутренняя ошибка в ConcatOpcode(). |
Internal Errror converting binary |
Внутренняя ошибка двоичного преобразования. |
Internal Errror converting hexadecimal |
Внутренняя ошибка шестнадцатеричного преобразования. |
Internal Errror converting octal |
Внутренняя ошибка восьмеричного преобразования. |
Internal Error in BuildScaling() |
Внутренняя ошибка в BuildScaling(). |
Internal Error in BuildConstant() |
Внутренняя ошибка в BuildConstant(). |
internal error in BuildReference() |
Внутренняя ошибка в BuildReference(). |
internal error in HandleExtend() |
Внутренняя ошибка в HandleExtend(). |
Internal error in ConcatLabeledInstr() |
Эта ошибка не должна никогда случиться. Если вы её увидели, то это новый баг в анализаторе ассемблера. Пожалуйста, контактируйте с разработчиками. |
Opcode not in table, operands not checked |
Это предупреждение появляется только при компиляции системного модуля или связанных с ним файлов. Не проверяйте его выполнение на операндах и кодах операций. |
@CODE and @DATA not supported |
Эти конструкции Turbo Pascal не поддерживаются. |
SEG and OFFSET not supported |
Эти конструкции Turbo Pascal не поддерживаются. |
Modulo not supported |
Операции с константами по модулю не поддерживаются. |
Floating point binary representation ignored |
Двоичное представление плавающей точки игнорируется. |
Floating point hexadecimal representation ignored |
Шестнадцатеричное представление плавающей точки игнорируется. |
Floating point octal representation ignored |
Восьмеричное представление плавающей точки игнорируется. Это предупреждения появляется, если константа с плавающей точкой объявлена в системе счисления, отличной от десятичной. Преобразование этих форматов невозможно. Вы должны использовать десятичное представление чисел с плавающей точкой. |
Identifier supposed external |
Это предупреждение появляется, если идентификатор не найден в таблице символов. |
Functions with void return value can’t return any value in asm code |
Только процедуры с возвращаемым значением могут возвращать набор значений. |
Error in binary constant |
Ошибка в двоичной константе. |
Error in octal constant |
Ошибка в восьмеричной константе. |
Error in hexadecimal constant |
Ошибка в шестнадцатеричной константе. |
Error in integer constant |
Ошибка в целочисленной константе. Эта ошибка случается, если вы пытаетесь использовать выражение с константами, которое является неправильным или его значение за пределами диапазона. |
Invalid labeled opcode |
Неправильный отмеченный код операции. |
Asm syntax error -error in reference |
Ошибка синтаксиса. |
Invalid Opcode |
Неправильный код операции. |
Invalid combination of opcode and operands |
Неправильная комбинация кода операции или операндов. |
Invalid size in reference |
Неправильный размер в ссылке. |
Invalid middle sized operand |
Средний операнд неправильного размера. |
Invalid three operand opcode |
Неправильный третий операнд кода операции. |
Assembler syntax error |
Ошибка синтаксиса. |
Invalid operand type |
Вы пытаетесь использовать неправильную комбинацию кода операции или операндов. Проверьте синтаксис и если вы уверены, что всё правильно, обратитесь к разработчику. |
Unknown identifier |
Идентификатор, к которому вы пытались получить доступ, не существует, или находится за пределами текущей области видимости. |
Trying to define an index register more than once |
Попытка определить более одного индексного регистра. |
Trying to define a segment register twice |
Попытка определить сегментный регистр дважды. |
Trying to define a base register twice |
Вы пытаетесь определить регистр базы дважды. |
Invalid field specifier |
Поле записи или объекта, к которому вы пытаетесь получить доступ, не существует, или неправильное. |
Invalid scaling factor |
Неправильный масштабный коэффициент. |
Invalid scaling value |
Неправильное масштабное значение. |
Scaling value only allowed with index |
Допустимыми масштабными значениями являются 1,2,4 или 8. |
Cannot use SELF outside a method |
Вы пытаетесь получить доступ к идентификатору SELF объекта за пределами метода. |
Invalid combination of prefix and opcode |
Код операции не может иметь префикс в этой команде. |
Invalid combination of override and opcode |
Этот код операции не может быть перегружен в этой комбинации. |
Too many operands on line |
Более трёх операндов в одной инструкции на m68k или i386. Вероятно, вы пытаетесь использовать неправильный синтаксис для этого кода операции. |
Duplicate local symbol |
Вы пытаетесь переопределить локальный идентификатор, такой как локальная метка. |
Unknown label identifer |
Нет такой метки. |
Undefined local symbol |
Неизвестный локальный идентификатор |
local symbol not found inside asm statement |
Эта метка не определена в текущей области видимости. |
Assemble node syntax error |
Ошибка синтаксиса вложений. |
Not a directive or local symbol |
Оператор ассемблера неправильный, или вы не используете директиву распознавания. |
I have a Visual Studio C/C++ project with a single assembly file main.asm
in it. During the process of building the project I get the errors:
1>main.asm(5): error A2008: syntax error : . 1>main.asm(6): error A2008: syntax error : . 1>main.asm(7): error A2008: syntax error : . 1>main.asm(8): error A2008: syntax error : , 1>main.asm(20): error A2008: syntax error : INVOKE
My code for main.asm is:
; program 3.1
; sample Assembly program - MASM (32-bit)
.386 ; Line 5
.MODEL FLAT, stdcall ; Line 6
.STACK 4096 ; Line 7
ExitProcess PROTO, dwExitCode:DWORD ; Line 8
.data
sum DWORD 0
.code
_main PROC
mov eax, 25
mov ebx, 50
add ebx, ebx
mov sum, eax
INVOKE ExitProcess, 0 ; Line 20
_main ENDP
END
A screenshot of Visual Studio with my code and the errors:
Why am I getting these errors and how can I fix them?
Michael Petch
45.3k8 gold badges104 silver badges190 bronze badges
asked Oct 11, 2020 at 8:59
7
Based on the errors you are showing on the line starting with .MODEL
, .STACK
, and .386
I can only gather that you are building for a 64-bit target rather than a 32-bit target. You likely also received errors related to the INVOKE
directive as well. None of these directives are supported by 64-bit MASM and thus are generating errors. In 64-bit code the model is always assumed to be flat and the calling conventions for CDECL, STDCALL, THISCALL, FASTCALL etc are all the same and follow the Windows 64-bit Calling Convention.
You have two choices:
-
Build a 32-bit application. In Visual Studio as part of the menu bars there is a pull down box for the platform. The platform can be adjusted in the toolbar by changing
x64
tox86
: -
Modify the code to work with 64-bit code. To build in 64-bit you have to replace
INVOKE
withCALL
and the Windows 64-bit calling convention must be used. You can remove the.STACK
,.MODEL
, and.386
directives. Modify the definition of the external procedures by declaring themEXTERN
with aPROC
type. The code could look something like:; program 3.1 ; sample Assembly program - MASM (64-bit) extern ExitProcess:PROC public mainCRTStartup .data sum DWORD 0 .code mainCRTStartup PROC ; Use mainCRTStartup if making a CONSOLE app without ; any C/C++ files AND if you haven't overridden the ; ENTRY point in the Visual Studio Project. sub rsp, 8+32 ; Align stack on 16 byte boundary and allocate 32 bytes ; of shadow space for call to ExitProcess. Shadow space ; is required for 64-bit Windows Calling Convention as ; is ensuring the stack is aligned on a 16 byte boundary ; at the point of making a call to a C library function ; or doing a WinAPI call. mov eax, 25 mov ebx, 50 add ebx, ebx mov sum, eax xor ecx, ecx ; Set Error Code to 0 (RCX is 1st parameter) call ExitProcess mainCRTStartup ENDP END
The entry point may be different for your environment depending on whether you are creating a GUI or CONSOLE application and whether your project has a C/C++ file present.
Function names in the 64-bit calling convention are not required to start with an underscore unlike 32-bit Windows code.
answered Oct 11, 2020 at 20:31
Michael PetchMichael Petch
45.3k8 gold badges104 silver badges190 bronze badges
Permalink
Cannot retrieve contributors at this time
description | title | ms.date | ms.custom | f1_keywords | helpviewer_keywords | ms.assetid |
---|---|---|---|---|---|---|
Learn more about: ML Nonfatal Error A2008 |
ML Nonfatal Error A2008 |
12/17/2019 |
error-reference |
A2008 |
A2008 |
ca24157f-c88a-4678-ae06-3bc3cd956001 |
syntax error :
A token at the current location caused a syntax error.
One of the following may have occurred:
-
A dot prefix was added to or omitted from a directive.
-
A reserved word (such as C or SIZE) was used as an identifier.
-
An instruction was used that was not available with the current processor or coprocessor selection.
-
A comparison run-time operator (such as
==
) was used in a conditional assembly statement instead of a relational operator (such as EQ). -
An instruction or directive was given too few operands.
-
An obsolete directive was used.
See also
ML Error Messages