Condividi tramite


Messaggi di diagnostica assembler ARM

Gli assembler, gli armasm e gli armasm64 di Microsoft ARM generano avvisi e errori diagnostici quando li incontrano. Questo articolo descrive i messaggi più comunemente rilevati.

Sintassi

filename ( numero di riga ) : [avviso di errore|] Numero : messaggio

Messaggi di diagnostica - Errori

A2193: questa istruzione genera un comportamento imprevedibile

L'architettura arm non può garantire ciò che accade quando viene eseguita questa istruzione. Per informazioni dettagliate sulle forme ben definite di questa istruzione, vedere il manuale di riferimento sull'architettura arm.

    ADD r0, r8, pc         ; A2193: this instruction generates unpredictable behavior

A2196: l'istruzione non può essere codificata in 16 bit

L'istruzione specificata non può essere codificata come istruzione Thumb a 16 bit. Specificare un'istruzione a 32 bit o riorganizzare il codice per inserire l'etichetta di destinazione nell'intervallo di un'istruzione a 16 bit.

L'assembler può tentare di codificare un ramo in 16 bit e non riuscire con questo errore, anche se un ramo a 32 bit è encodable. È possibile risolvere questo problema usando l'identificatore .W per contrassegnare in modo esplicito il ramo come a 32 bit.

    ADD.N r0, r1, r2      ; A2196: instruction can't be encoded in 16 bits

    B.W label             ; OK
    B.N label             ; A2196: instruction can't be encoded in 16 bits
    SPACE 10000
label

A2202: sintassi dell'istruzione pre-UAL non consentita nell'area THUMB

Il codice thumb deve usare la sintassi UAL (Unified Assembler Language). La sintassi precedente non è più accettata

    ADDEQS r0, r1         ; A2202: Pre-UAL instruction syntax not allowed in THUMB region
    ADDSEQ r0, r1         ; OK

A2513: la rotazione deve essere pari

In modalità ARM è disponibile una sintassi alternativa per specificare le costanti. Anziché scrivere #<const>, è possibile scrivere #<byte>,#<rot>, che rappresenta il valore costante ottenuto ruotando il valore <byte> a destra di <rot>. Quando si usa questa sintassi, è necessario rendere uniforme il valore di <rot> .

    MOV r0, #4, #2       ; OK
    MOV r0, #4, #1       ; A2513: Rotation must be even

A2557: Numero errato di byte da scrivere

Nelle istruzioni di caricamento e archiviazione della struttura NEON (VLDn, VSTn), è disponibile una sintassi alternativa per specificare il writeback nel registro di base. Anziché inserire un punto esclamativo (!) dopo l'indirizzo, è possibile specificare un valore immediato che indica l'offset da aggiungere al registro di base. Se si usa questa sintassi, è necessario specificare il numero esatto di byte caricati o archiviati dall'istruzione .

    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

Messaggi di diagnostica - Avvisi

A4228: il valore di allineamento supera l'allineamento area; allineamento non garantito

L'allineamento specificato in una ALIGN direttiva è maggiore dell'allineamento dell'oggetto che lo racchiude AREA. Di conseguenza, l'assembler non può garantire che la ALIGN direttiva verrà rispettata.

Per correggere questo avviso, è possibile specificare nella AREA direttiva un ALIGN attributo uguale o maggiore dell'allineamento desiderato.

AREA |.myarea1|
ALIGN 8           ; A4228: Alignment value exceeds AREA alignment; alignment not guaranteed

AREA |.myarea2|,ALIGN=3
ALIGN 8           ; OK

A4508: l'uso di questa costante ruotata è deprecato

In modalità ARM è disponibile una sintassi alternativa per specificare le costanti. Anziché scrivere #<const>, è possibile scrivere #<byte>,#<rot>, che rappresenta il valore costante ottenuto ruotando il valore <byte> a destra di <rot>. In alcuni contesti Arm ha deprecato l'uso di queste costanti ruotate. In questi casi, usare invece la sintassi di base #<const> .

    ANDS r0, r0, #1                ; OK
    ANDS r0, r0, #4, #2            ; A4508: Use of this rotated constant is deprecated

A4509: questa forma di istruzione condizionale è deprecata

Questa forma di istruzione condizionale è stata deprecata da ARM nell'architettura ARMv8. È consigliabile modificare il codice per usare i rami condizionali. Per visualizzare le istruzioni condizionali ancora supportate, vedere il manuale di riferimento sull'architettura arm.

Questo avviso non viene generato quando viene usata l'opzione della -oldit riga di comando.

    ADDEQ r0, r1, r8              ; A4509: This form of conditional instruction is deprecated

Vedi anche

Riferimenti alla riga di comando dell'assembler ARM
Direttive assembly ARM