Ich versuche derzeit ARM-Montage für Cortex-M-Kerne zu verstehen.Cortex M4 Thumb Assembly Adresse
Ich weiß, dass Funktionen im Thumb-Modus (der einzige Modus, den der Kern unterstützt) von ihrer Adresse aufgerufen werden und das LSB der Adresse hoch ist, um anzuzeigen, dass das Ziel ein Thumb-Code ist.
Bei der Montage schreibe ich vor der Funktion „Reset_Handler“ im Anschluss an dem Assembler zu sagen, dass die Daten auf dem Etikett ausführbar sind/eine Funktion:
.type Reset_Handler, %function
Reset_Handler:
MOV R0, R0 # just do something
Wenn ich lade jetzt die Adresse des Etiketts
LDR R0, =Reset_Handler
das LSB von R0 gesetzt ist.
Muss ich diese .type-Direktive vor jedes Etikett setzen, das ich als Funktion für indirekte Aufrufe verwenden möchte?
Oder gibt es eine Möglichkeit, den Assembler automatisch die richtige Adresse zu entscheiden?
Wenn ich den Code der Funktion in RAM kopieren und die Adresse dieser Funktion laden will, muss ich das LSB selbst löschen, um die "echte" Adresse zu erhalten, wo die Daten liegen, habe ich recht?
Ist in diesem Fall die Anweisung .type erforderlich? Ich weiß, dass es notwendig ist, sobald ich die Adresse in die Vektortabelle setzen möchte, da dies erfordert, dass das LSB gesetzt wird.
welchen Assembler verwenden Sie (die Assemblersprache ist vom Assembler definiert, ist sie nicht allgemein universell) –