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