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(line-number) : [Error|Warning] Anumber:message

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