So ist es definiert:
https://developer.arm.com/documentation/dui0489/c/arm-and-thumb-instructions/pseudo-instructions/ldr-pseudo-instruction
Daniel schrieb:
> Gibt es eine Möglichkeit (as Schalter?) die Instruktionen beizubehalten?
Nicht dass ich wüsste.
Daniel schrieb:
> Schließlich soll Assember den Scharm haben, möglichst durchschaubaren
> Output zu erzeugen.
Naja, das ist nicht die Anforderung an die Entwicklung von Assemblern.
Es geht um die Erzeugung effizienten Codes und nachrangig um möglichst
einfache Assembler-Programmierung. Und MOV(.W) ist (deutlich)
effizienter als LDR; dass der Assembler automatisch das Bestmögliche
nutzt vereinfacht die Entwicklung.
Daniel schrieb:
> Schreibt ARM diese Tranformation vor?
LDR rX, =... ist eine Pseudo-Instruktion, deren Sinn es ist, in ein
"echtes" LDR (PC-relative) oder eben MOV (mit Immediate) umgewandelt zu
werden. Wenn du ein "echtes" LDR haben willst (warum?), codiere es
manuell:
1 | .text
|
2 | BITS16:
|
3 | .hword 0xABCD
|
4 |
|
5 | main:
|
6 | ldrh r2, BITS16
|
Daniel schrieb:
> Frage 2.
> Was ist der Unterschied zwischen movw und mov.w?
Siehe hier:
https://developer.arm.com/documentation/ddi0403/d/Application-Level-Architecture/Instruction-Details/Alphabetical-list-of-ARMv7-M-Thumb-instructions/MOV--immediate-?lang=en
. Beim Laden von Immediates besteht der Unterschied darin, wie der
Immediate-Wert in der Instruktion kodiert ist, weil ARM da verschiedene
Varianten für verschieden strukturierte Werte kennt. MOV.W benutzt
ThumbExpandImm_C, MOVW nutzt ZeroExtend. Siehe
https://developer.arm.com/documentation/ddi0403/d/Application-Level-Architecture/The-Thumb-Instruction-Set-Encoding/32-bit-Thumb-instruction-encoding/Modified-immediate-constants-in-Thumb-instructions?lang=en.
Bei MOV von Register nach Register gibt es nur eine MOV.W-Variante,
welche im Gegensatz zur 16bit-MOV-Variante noch die Flags setzen kann
(MOVS.W).
So im Detail muss man sich da aber normalerweise nicht mit beschäftigen,
wenn man nicht gerade einen eigenen (Dis)assembler oder Prozessor baut.
Daniel schrieb:
> Darf as die Instruktionen umschichten / reorder?
Definiere "umschichten". Instruktionen umsortieren tut er nicht.