Forum: Mikrocontroller und Digitale Elektronik Frage zu MOV bzw. MOVW


von Jakob K. (jaykob)


Lesenswert?

Hi,

ich hab ne Überungsaufgabe zur Assemblerprogrammierung vor mir liegen 
und find leider auf eine Frage, auch nach längerer Recherche keine 
Antwort.

Vielleicht kann mir jemand helfen?


Achja: ARM-Cortex-M-Ebene


Mit MOV- bzw. MOVW- Befehlen können nur Wertkonstanten von max. 12 bzw. 
16 Bit Länge in ein Register geladen werden.

a) Warum ist die Länge so begrenzt?
b) Wie kann ein 32 Bit Wert in ein Register geladen werden? (Mit ARM 
Befehl angeben)

Zu Teilaufgabe a) hab ich leider weder im Skript, noch im Internet was 
gefunden.

Teilaufgabe b) würde ich folgendermaßen lösen:

1. Die 16 höchstwertigen (MSB) Bits mit MOV in das entsprechende 
Register schreiben, also MOV R0, R1

2. Diese Bits um 16 Stellen nach links verschieben: LSL R0, R0, #16

3. Die 16 niederwertigsten Bits (LSB) duazuaddieren: ADD R0, R0, R2

Könnt ihr mir bitte helfen, ich bin fast am verzweifeln.

von (prx) A. K. (prx)


Lesenswert?

Jakob K. schrieb:

> a) Warum ist die Länge so begrenzt?

Weiss nicht ob dir die Antwort gefällt, aber sowas ist hauptsächlich 
eine Grundentscheidung desjenigen, der den Befehlssatz definiert hat. 
Ist ja nicht beliebig viel Platz in 16 bzw 32 Bits Befehlswort.

> b) Wie kann ein 32 Bit Wert in ein Register geladen werden? (Mit ARM
> Befehl angeben)

Oft: Datentabelle irgendwo in dem relativ zum PC adressierbaren 
Codebereich. Ist nicht die schnellste Version, aber die kürzeste.

> Teilaufgabe b) würde ich folgendermaßen lösen:

Zusammensetzen ist richtig. Aber nicht so, das geht besser. Jedenfalls 
beim CM3/4, also Thumb-2. Schau dir lieber noch einmal den Befehlssatz 
an. Und zwar genau.

von Andreas B. (andreas_b77)


Lesenswert?

Statt Zusammensetzen gibt es noch die Möglichkeit, den Wert separat 
abzulegen und dann aus dem Speicher zu laden. Wenn der Wert in der Nähe 
der Lade-Instruktion liegt (als Konstante im Programmspeicher), geht das 
mit einem Befehl.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.