Mensajes de diagnóstico del ensamblador de ARM
El ensamblador de Microsoft ARM(#1)emite advertencias de diagnóstico y errores cuando las encuentra. En este artículo se describen los mensajes más comunes.
Sintaxis
filename(line-number): [errorwarning] Anumber:message
Mensajes de diagnóstico: errores
A2193: esta instrucción genera un comportamiento impredecible
La arquitectura de ARM no puede garantizar lo que sucede cuando se ejecuta esta instrucción. Para más información sobre las formas bien definidas de esta instrucción, consulte el Manual de referencia de arquitectura de ARM.
ADD r0, r8, pc ; A2193: this instruction generates unpredictable behavior
A2196: la instrucción no se puede codificar en 16 bits
La instrucción especificada no se puede codificar como una instrucción Thumb de 16 bits. Especifique una instrucción de 32 bits o reordene el código para que la etiqueta de destino entre en el intervalo de una instrucción de 16 bits.
El ensamblador puede intentar codificar una rama en 16 bits y producir este error, aunque se pueda codificar una rama de 32 bits. Puede resolver este problema mediante el especificador para marcar .W explícitamente la rama como de 32 bits.
ADD.N r0, r1, r2 ; A2196: instruction cannot be encoded in 16 bits
B.W label ; OK
B.N label ; A2196: instruction cannot be encoded in 16 bits
SPACE 10000
label
A2202: No se permite la sintaxis de instrucciones previas a UAL en la región THUMB
El código thumb debe usar la sintaxis del lenguaje ensamblador unificado (UAL). Ya no se acepta la sintaxis anterior
ADDEQS r0, r1 ; A2202: Pre-UAL instruction syntax not allowed in THUMB region
ADDSEQ r0, r1 ; OK
A2513: La rotación debe ser uniforme
En el modo ARM, hay una sintaxis alternativa para especificar constantes. En lugar de escribir , puede escribir , que representa el valor constante que se obtiene girando el #<const> valor a la derecha por #<byte>,#<rot><byte><rot> . Al usar esta sintaxis, debe hacer que el valor de <rot> sea par.
MOV r0, #4, #2 ; OK
MOV r0, #4, #1 ; A2513: Rotation must be even
A2557: Número incorrecto de bytes para reescribir
En la estructura NEON, cargue y almacene las instrucciones ( , ), hay una sintaxis alternativa para especificar la VLDn reescribición en el registro VSTn base. En lugar de colocar un signo de exclamación (!) después de la dirección, puede especificar un valor inmediato que indique el desplazamiento que se va a agregar al registro base. Si usa esta sintaxis, debe especificar el número exacto de bytes cargados o almacenados por la instrucción.
VLD1.8 {d0-d3}, [r0]! ; OK
VLD1.8 {d0-d3}, [r0], #32 ; OK
VLD1.8 {d0-d3}, [r0], #100 ; A2557: Incorrect number of bytes to write back
Mensajes de diagnóstico: advertencias
A4228: el valor de alineación supera la alineación area; alineación no garantizada
La alineación especificada en una directiva es mayor que la ALIGN alineación del elemento que lo AREA incluye. Como resultado, el ensamblador no puede garantizar que ALIGN se respetará la directiva.
Para corregirlo, puede especificar en la directiva un atributo que sea igual o AREAALIGN mayor que la alineación deseada.
AREA |.myarea1|
ALIGN 8 ; A4228: Alignment value exceeds AREA alignment; alignment not guaranteed
AREA |.myarea2|,ALIGN=3
ALIGN 8 ; OK
A4508: El uso de esta constante rotada está en desuso
En el modo ARM, hay una sintaxis alternativa para especificar constantes. En lugar de escribir , puede escribir , que representa el valor constante que se obtiene girando el #<const> valor a la derecha por #<byte>,#<rot><byte><rot> . En algunos contextos, ARM ha dejado de usar estas constantes rotadas. En estos casos, use la sintaxis #<const> básica en su lugar.
ANDS r0, r0, #1 ; OK
ANDS r0, r0, #4, #2 ; A4508: Use of this rotated constant is deprecated
A4509: Esta forma de instrucción condicional está en desuso
ARM ha dejado de estar en desuso en esta forma de instrucción condicional en la arquitectura ARMv8. Se recomienda cambiar el código para usar ramas condicionales. Para ver qué instrucciones condicionales todavía se admiten, consulte el Manual de referencia de arquitectura de ARM.
Esta advertencia no se emite cuando se usa el modificador de línea de comandos -oldit.
ADDEQ r0, r1, r8 ; A4509: This form of conditional instruction is deprecated
Vea también
Referencia de ensamblador Command-Line ARM
Directivas de ensamblador de ARM