Diagnosemeldungen des ARM-Assemblers
Die Microsoft ARM-Assembler, armasm und armasm64 geben Diagnosewarnungen und Fehler aus, wenn sie auftreten. In diesem Artikel werden die am häufigsten auftretenden Nachrichten beschrieben.
Syntax
filename ( zeilennummer ) : [Fehlerwarnung|] Eine Zahl : Meldung
Diagnosemeldungen – Fehler
A2193: Diese Anweisung generiert unvorhersehbares Verhalten
Die ARM-Architektur kann nicht garantieren, was geschieht, wenn diese Anweisung ausgeführt wird. Ausführliche Informationen zu den gut definierten Formen dieser Anweisung finden Sie im ARM-Architekturreferenzhandbuch.
ADD r0, r8, pc ; A2193: this instruction generates unpredictable behavior
A2196: Anweisung kann nicht in 16 Bits codiert werden
Die angegebene Anweisung kann nicht als 16-Bit-Daumenanweisung codiert werden. Geben Sie eine 32-Bit-Anweisung an, oder ordnen Sie code neu an, um die Zielbezeichnung in den Bereich einer 16-Bit-Anweisung zu übertragen.
Der Assembler versucht möglicherweise, eine Verzweigung in 16 Bits zu codieren und schlägt mit diesem Fehler fehl, auch wenn eine 32-Bit-Verzweigung encodierbar ist. Sie können dieses Problem beheben, indem Sie den .W
Bezeichner verwenden, um die Verzweigung explizit als 32-Bit zu kennzeichnen.
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: Prä-UAL-Anweisungssyntax im THUMB-Bereich nicht zulässig
Der Daumencode muss die UAL-Syntax (Unified Assembler Language) verwenden. Die alte Syntax wird nicht mehr akzeptiert.
ADDEQS r0, r1 ; A2202: Pre-UAL instruction syntax not allowed in THUMB region
ADDSEQ r0, r1 ; OK
A2513: Drehung muss gleichmäßig sein
Im ARM-Modus gibt es eine alternative Syntax zum Angeben von Konstanten. #<const>
Statt zu schreiben, können Sie schreiben#<byte>,#<rot>
, das den konstanten Wert darstellt, der durch Drehen des Werts <byte>
nach rechts <rot>
abgerufen wird. Wenn Sie diese Syntax verwenden, müssen Sie den Wert <rot>
sogar festlegen.
MOV r0, #4, #2 ; OK
MOV r0, #4, #1 ; A2513: Rotation must be even
A2557: Falsche Anzahl von Bytes zum Zurückschreiben
Auf den Laden- und Speicheranweisungen der NEON-Struktur (VLDn
, VSTn
) gibt es eine alternative Syntax zum Angeben des Rückschreibens in das Basisregister. Anstatt ein Ausrufezeichen (!) hinter der Adresse einzufügen, können Sie einen unmittelbaren Wert angeben, der den Offset angibt, der dem Basisregister hinzugefügt werden soll. Wenn Sie diese Syntax verwenden, müssen Sie die genaue Anzahl der Bytes angeben, die von der Anweisung geladen oder gespeichert wurden.
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
Diagnosemeldungen – Warnungen
A4228: Der Ausrichtungswert überschreitet die BEREICH-Ausrichtung; Ausrichtung nicht garantiert
Die in einer ALIGN
Direktive angegebene Ausrichtung ist größer als die Ausrichtung der eingeschlossenen AREA
. Daher kann der Assembler nicht garantieren, dass die ALIGN
Richtlinie berücksichtigt wird.
Um diese Warnung zu beheben, können Sie für die AREA
Direktive ein ALIGN
Attribut angeben, das gleich oder größer als die gewünschte Ausrichtung ist.
AREA |.myarea1|
ALIGN 8 ; A4228: Alignment value exceeds AREA alignment; alignment not guaranteed
AREA |.myarea2|,ALIGN=3
ALIGN 8 ; OK
A4508: Die Verwendung dieser gedrehten Konstante ist veraltet.
Im ARM-Modus gibt es eine alternative Syntax zum Angeben von Konstanten. #<const>
Statt zu schreiben, können Sie schreiben#<byte>,#<rot>
, das den konstanten Wert darstellt, der durch Drehen des Werts <byte>
nach rechts <rot>
abgerufen wird. In einigen Kontexten hat ARM die Verwendung dieser gedrehten Konstanten veraltet. Verwenden Sie in diesen Fällen stattdessen die grundlegende #<const>
Syntax.
ANDS r0, r0, #1 ; OK
ANDS r0, r0, #4, #2 ; A4508: Use of this rotated constant is deprecated
A4509: Diese Form der bedingten Anweisung ist veraltet.
Diese Form der bedingten Anweisung ist von ARM in der ARMv8-Architektur veraltet. Es wird empfohlen, den Code so zu ändern, dass bedingte Verzweigungen verwendet werden. Informationen dazu, welche bedingten Anweisungen weiterhin unterstützt werden, finden Sie im ARM-Architekturreferenzhandbuch.
Diese Warnung wird nicht ausgegeben, wenn der -oldit
Befehlszeilenschalter verwendet wird.
ADDEQ r0, r1, r8 ; A4509: This form of conditional instruction is deprecated
Siehe auch
Befehlszeilenverweis des ARM-Assemblers
ARM-Assemblyanweisungen