Red de conocimiento informático - Conocimiento sistemático - ¿Dónde está el error en el ensamblador?

¿Dónde está el error en el ensamblador?

Durante el proceso de compilación del programa fuente, el ensamblador dará un mensaje de error en pantalla en cualquier momento si detecta un error de idioma en una determinada declaración. Si el operador especifica un

nombre de archivo de lista (es decir, .LST), el ensamblador también mostrará un mensaje de error

debajo del archivo de lista para que el operador pueda encontrar inmediatamente el error y Dar correcto

. El formato del mensaje de error MASM5.0 es el siguiente:

Línea del archivo del programa fuente: ADVERTENCIA/ERROR Código del mensaje de error: Mensaje de descripción del error

Entre ellos, el código de descripción del error consiste de cinco caracteres, el primero es la letra A

, que indica un error del programa en lenguaje ensamblador, luego hay un número, especificando el tipo de error

Específicamente: '2' indica un; error grave, '4' indica una advertencia de error grave, '5' indica una advertencia recomendada y los últimos tres dígitos son el número de error.

Número de error

Descripción del error

Error de anidamiento del bloque

Error de anidamiento. Los procedimientos almacenados anidados, secciones de programas, estructuras, macros o bloques repetidos no pueden finalizar normalmente

. Por ejemplo, si una declaración anidada tiene una declaración de terminación externa pero ninguna

declaración de terminación interna

1

caracteres adicionales en la línea

Caracteres adicionales en la línea

Caracteres adicionales en la declaración, posiblemente porque se dieron demasiados argumentos en la declaración

2

Error interno: regístrese ya Definición

Este es un error interno. Si se produce este error, tenga en cuenta la entrada en la que se produjo el error

y póngase en contacto con Microsoft mediante el formulario de solicitud de ayuda del producto

3

Especificador de tipo desconocido

Especificador de tipo desconocido. Por ejemplo, escriba mal los caracteres tipográficos, escriba BYTE como

BIT, escriba NEAR como NAER, etc.

4

Redefinición de símbolos

Redefinición de símbolos. El mismo identificador se define en dos lugares. En el primer

escaneo del ensamblaje, la segunda posición de la definición del identificador dio un error

Error

5

Los símbolos son multidefinido

Los símbolos están multidefinidos. El mismo identificador se define en dos lugares. Este error ocurre cada vez que se encuentra un identificador en el segundo escaneo del ensamblaje

6

Error de etapa entre escaneos

Error de fase entre escaneos. Este error ocurre si el identificador obtiene una dirección diferente en el segundo escaneo

. Si utiliza la opción /D al iniciar MASM,

se generará el primer archivo de lista escaneado, lo que puede ayudarle a encontrar este error

7

Ya Hay una cláusula ELSE

Ya existe una declaración ELSE. Hay más de una declaración ELSE en el bloque condicional

8

Debe estar en el bloque condicional

No en el bloque condicional. Generalmente hay una declaración ENDIF o ELSE, pero no una declaración IF

9

El símbolo no está definido

El símbolo no está definido

El símbolo no está definido, se hace referencia a un identificador no definido en el programa

10

Error de sintaxis

Error de sintaxis. Declaración no reconocida por el ensamblador

11

Tipo ilegal en contexto

Especifica un tipo ilegal. Por ejemplo, especifique BYTE para un procedimiento almacenado en lugar de

NEAR o FAR

12

Los nombres de los grupos deben ser únicos

Nombres de los grupos debe ser único. Los símbolos utilizados como nombres de grupo se utilizarán como otros símbolos

13

Deben declararse al pasar 1

Deben definirse en el primer escaneo. Este error ocurre si se hace referencia al símbolo

en el primer escaneo antes de definirlo.

14

Declaración pública ilegal

Se especifica ilegalmente un identificador como tipo PUBLIC

15

Símbolo Ya no es un tipo

Redefine un símbolo para que se convierta en otro tipo. símbolo. Por ejemplo, redefina el nombre del segmento

como un nombre de variable

16

Las palabras reservadas se utilizan como símbolos

Se utilizan palabras reservadas en lenguaje ensamblador Como identificador

17

Referencia directa ilegal

Referencia directa ilegal. Durante el primer escaneo, se hizo referencia a un símbolo indefinido

.

18

El operando debe ser un registro

La ubicación del operando debe ser un registro, pero existe un identificador

19

Error de tipo de registro

Error de registro

20

El operando debe ser un segmento o grupo

A nombre del segmento o grupo. Por ejemplo, la declaración ASSUME debe especificar el segmento o nombre de grupo de un registro de segmento

en lugar de otra etiqueta o nombre de variable

etc.

21

El símbolo no tiene segmento

El atributo de segmento del identificador es desconocido

22

El El operando debe ser un especificador de tipo.

El operando debe proporcionar una especificación de tipo, como NEAR, FAR, BYTE, etc.

23

El símbolo ya está definido localmente

El símbolo ya está definido localmente

Se intentó definir un identificador externo en una declaración EXTRN

El símbolo se ha definido localmente. p>

Identificador de pieza

24

Parámetro de segmentación cambiado

Parámetro de segmentación cambiado. Como si el mismo identificador estuviera definido en diferentes segmentos

25

Alineación/tipo de fusión incorrecto

Uso de tipo local/de fusión en la definición del segmento Se produjo un error

26

Hacer referencia a múltiples símbolos definidos

Instrucción que hace referencia a múltiples símbolos definidos

27

Número de acción esperada

Requiere un operando, solo operandos

28

Operandos esperados

Requiere un operando, pero solo operandos

29

Dividir entre 0 o desbordamiento

Dividir entre 0 o desbordamiento

30

Recuento de desplazamiento negativo

Negativo valor de expresión de desplazamiento del operando SHL o SHR

31

El tipo de operando debe coincidir

El tipo de operando no debe coincidir. Los dos operandos de la instrucción de doble operando tienen diferentes longitudes

Uno es un byte y el otro es una palabra

32

Uso ilegal de externo

Error de uso de símbolo externo

33

Debe ser un nombre de campo de registro

Debe ser un nombre de campo de registro. Otro símbolo en la posición de un nombre de campo de registro

34

Debe ser un nombre de registro o un nombre de campo

Debe ser un nombre de registro o un campo de registro nombre. Otro símbolo en la posición de un nombre de registro o nombre de campo

35

El operando debe tener tamaño

Especifica la longitud del operando (por ejemplo, BYTE, WORD , etc.). Esto generalmente se puede corregir usando la operación PTR

36

Debe ser una variable, etiqueta o constante

La posición del nombre de la variable, etiqueta o constante debe ser reemplazado por otra cosa Reemplazo

37

Debe ser un nombre de campo de estructura

Debe ser un nombre de campo de estructura. Otro símbolo

Símbolo

38

El operando izquierdo debe ser información del segmento

El lado izquierdo del operando debe ser información del segmento. Si DA1 y DA2 son nombres de variables,

La siguiente afirmación es incorrecta: "MOV AX,DA1:DA2".

Se debe utilizar la ubicación DA1

Nombre del registro del segmento

39

Un operando debe ser una constante

Un operando debe ser una constante .

40

Los operandos deben estar en el mismo segmento de programa o una constante

El operador "-" se utiliza incorrectamente. Por ejemplo, "MOV AL,-VAR", donde VAR es el nombre de la variable

, se debe incluir una constante en la operación. Otro ejemplo es restar dos nombres de variables con segmentos diferentes

Error

41

Se esperaba usar operandos de tipo normal

Requiere el uso de operandos normales.

42

Constante esperada

Requiere una constante.

43

El operando debe tener un segmento

Error de uso del operador SEG.

44

Debe estar asociado a datos

Hay un segmento asociado a código donde debe estar asociado a datos

45

Debe estar asociado con código

Existe una sección asociada con datos donde debe estar asociado con código

Existe donde debe estar asociado con código La sección asociada con el código

no tiene constantes. Segmento de datos

46

Múltiples registros base

Utilice múltiples registros de direcciones base al mismo tiempo. Por ejemplo, "MOV AX,[SI][BP]"

47

Múltiples registros de índice

Utilice múltiples registros de direcciones al mismo tiempo. Por ejemplo, "MOV AX ,[SI][DI]"

48

debe ser un registro de índice o un registro de dirección base

Esta instrucción solo requiere el uso del registro de direcciones base o cambiar el registro de direcciones sin requerir el uso de

otros registros.

49

Uso ilegal del registro

Error

50

Valor fuera de rango

El valor es demasiado grande y excede el valor permitido. Por ejemplo, "MOV AL ,100H"

51

El operando no está en el segmento de código CS ASSUME actual

El operando no está en el código actual segmento. Normalmente, esto significa que la dirección de destino de la instrucción de transferencia no está en el segmento de código CS actual

52

Tipo de operador incorrecto

Tipo de operador incorrecto. Por ejemplo "mov var1,var2". Ambos operandos

son operandos de memoria y no se pueden ensamblar

53

%ld bytes fuera de rango

. p>

El rango de salto de la instrucción de transferencia condicional excede -128~127 bytes. Fábrica de errores, mensaje

El mensaje también indica el número de bytes excedidos

54

El desplazamiento del índice debe ser constante

Dirección variable El desplazamiento del índice direccionado debe ser constante

55

Valor de registro ilegal

Valor de registro ilegal. El código objeto expresa un valor de registro mayor que 7

56

Modo Inmediato Ilegal

No se permite el direccionamiento inmediato. Por ejemplo, "MOV DS, CODE", donde CODE es el nombre del segmento

, no se puede pasar al registro de segmento DS como un valor inmediato

57

Tamaño inmediato del operando

Tamaño inmediato del operando

El modo inmediato es ilegal

El modo intermedio es ilegal

El modo intermedio es ilegal

Modo intermedio ilegal

El modo intermedio es ilegal

El modo intermedio es ilegal

El modo intermedio es ilegal

Intermedio el modo es ilegal

No permitido Utilice una dirección intermedia. Ejemplo: uso de memoria de palabras dobles

Operador

58

Registro de bytes ilegal

Las instrucciones que requieren registros de palabras usan registros de bytes.

Por ejemplo, PUSH,POP significa

El registro de operando debe ser un registro de palabra

59

Uso ilegal del registro CS

El instrucción incorrecta Se utiliza el registro de segmento CS: "MOV CS,AX" CS no se puede utilizar como

operando de destino

60

Debe ser un registro de bytes.

Debe ser un registro acumulador

Requiere otro registro en AX o AL. Por ejemplo, "SHL

DS,1"

62

CS faltante o inalcanzable

Intentando saltar a la ejecución CS marca inalcanzable . Generalmente se refiere a una instrucción

ASSUME faltante en la que CS está asociado con un segmento de código

63

Combinación de operandos ilegal

En un double En la instrucción de operando, la combinación de los dos operandos es incorrecta

. La combinación de operandos de los dos operandos en la instrucción es incorrecta

64

Cierre JMP/CALL a un CS diferente

Intente usar la instrucción de transferencia de atributo NEAR para saltar a una dirección que no está en el segmento de código actual

Dirección

65

La etiqueta no puede tener una anulación de segmento

Segmento error de prefijo

66

Debe haber instrucciones después del prefijo. Debe haber instrucciones después del prefijo.

Debe haber instrucciones, REPE, después del repetido. prefijo REP.

67

El operando de destino no puede cubrir ES

El operando de destino en la instrucción de operación de cadena no puede ser reemplazado por otros registros de segmento ES

68

No se puede utilizar el direccionamiento del registro de segmento

El operando se encuentra en la instrucción, pero la instrucción ASSUME no indica en qué registro de segmento se encuentra el segmento en el que se encuentra el operando. está relacionado con

Almacenamiento

69