2017-02-25 3 views
0

So laden Sie die Nummer 0xEFFFFFF2 in ein Register in ARM.
Was wird die Fäulnis darin sein?ARM-Baugruppe: Grundlegende Verwendung der MOV-Anweisung

MVN r0, #2D1 

Ist diese Anweisung gültig?

+0

Was haben Sie versucht und welches Problem haben Sie festgestellt? Sehen Sie zum Beispiel [this] (https://community.arm.com/processors/b/blog/posts/how-to-load-constants-in-assembly-for-arm-architecture) -Seite. –

+0

Ich markierte Keywords und (hoffentlich) verbesserte die Klarheit der Frage. – zx485

Antwort

0

mvn wird nur 0x2D1 in 0xFFFFFD2E umkehren, richtig? Sie benötigen die Umkehrung Ihrer gewünschten Nummer, die 0x1000000D ist, oder? Der Gnu-Assembler kodiert 0x2D1, die 2 bedeutet rechts drehen 4 und der 0xD1 ist der zu drehende Wert. Sie brauchen nicht zu befürchten, dass, wenn Sie den Maschinencode machen sich Sie nicht die 0x2D1 in der Assemblersprache legen Sie die gewünschte Rufnummer entweder diese

mov r0,#0xEFFFFFF2 

oder

mvn r0,#0x1000000D 

setzen tun müssen, oder

ldr r0,=0xEFFFFFF2 

ein Assembler wie Gnu Assembler wird versuchen, einen einzigen Befehl zu finden, die mov in diesem Fall löst es mvn r0, # 0x1000000D, einige andere Monteure können nicht t wählt ry und einfach sagen Sie Ihre Konstante ist schlecht für die mov Anweisung zwingt Sie, die mvn selbst zu tun. Oder Sie können den MVN selbst tun. Für gnu assembler die dritte Wahl wird es versuchen, mov, mvn, und wenn keiner für diese Konstante arbeitet, dann wird es den Wert in der Nähe platzieren und eine relative PC-Last (die zwei Worte .tex Raum verbraucht).

Verwandte Themen