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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.