ARM und Thumb mischen

Gast
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?
>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
Hi,

In der Doku steht auch, dass man die Direktiven "THUMB" bzw. "ARM" 
verwenden soll, doch diese erkennt mein ARM Compiler Toolchain in 
Microvision nicht. Kann mir da jemand bitte weiterhelfen?

liebe Grüße
Gast
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.