ARM und Thumb mischen

Gast #2773762
Lesenswert?

Liege ich mit dieser Annahme richtig:
1. Eine Funktion kann nur im ARM oder im Thumb-Modus sein. Eine Mischung 
aus beiden Befehlssätzen in einer Funktion ist nicht möglich.
2. Die unterschiedlichen Funktionen aber können unterschiedlichen Modis 
angehören. D. h. während Funktion-1 z. B. im ARM-Modus ist, kann 
Funktion-2 im Thumb-Modus sein.

Lieg ich richtig?
#2773796
Lesenswert?

>1. Frage: Kann man ARM und Thumb-Code miteinander vermischen?
Das Zauberwort heißt: Interworking
Geht aber nicht auf allen ARM Prozessoren. Welchen hast du denn?

>2. Frage: Wie kann ich zwischen ARM und Thumb-Code hin und herschalten
>(mit welchem Befehl)
Das entnimmst du der Doku deines ARM Kernes. Für einen ARM7TDMI sieht es 
folgender Maßen aus:
1
The operating state of the ARM7TDMI core can be switched between ARM 
2
state and Thumb state using the BX instruction.
[Quelle: ARM7TDMI Technical Reference Manual Revision: r4p1]

Gruß Oliver
Gast #2774546
Lesenswert?

Was aber verwirrend ist, dass da steht: Inline Assembler nicht 
verfügbar, wenn für Thumb-State kompiliert wird. Das stimmt aber nicht, 
in Microvision kann ich auch inline-Assemblercode angeben, obwohl ich 
für Thumb-State kompiliere. Könnt ihr mich da bitte aufklären?
Gast #2774619
Lesenswert?

Und was ist mit der "Branching-Technik":
Also langsam versteh ich den Assembler von Keil wirklich nicht. Kann mir 
bitte jemand erklären wieso das hier nicht geht:
1.
int main(void) {
 __asm {
   ; Dies ist ein simpler Kommentar
 }
}
--> Der Kommentar führt zum Syntax-Error

2.
int main(void) {
 __asm {
   start:
     MOV r1, #2
     MOV r2, r1
     LDR r0, =thumbMode+1
     MOV lr, pc
     BX r0
   thumbMode:
     MOV r0, #3
     MOV r1, r0
     BX lr
 }
}
--> Hier wird nach BX r0 leider nicht zur Stelle "thumbMode" gesprungen. 
Sondern wo ganz anders hin im Speicher.

Please help me :(

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren