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