DCD Unterricht und IRQ stack

Ich studiere das Thema der Einrichtung von einem Stapel für die verschiedenen Modi von einem ARM-Prozessor (IRQ, Supervisor, User, ...).
Da die Einrichtung verschiedene stacks erfordert die gleiche Folge von Anweisungen (im Grunde nur die stack-Adresse ändern) ich werde Sie bitten, meine Frage ist der Rückgriff auf das problem der Einstellung der IRQ-stack.
Vorausgesetzt, ich habe Folgendes definiert:

IRQ_Stack EQU 0x8000
NoInt     EQU 0xC0
IRQ32md   EQU 0x12

Der folgende code wird verwendet, um den setup-stack (ich Zeilennummern hinzufügen aktivieren Kommentare):

1. MOV r2, #NoInt|IRQ32md
2. MSR CPSR_c, r2
3. LDR r13_irq, =IRQ_NewStack
4. ...
5. ...
6. IRQ_NewStack:
7. DCD IRQ_Stack

Linie 1 nur Lasten r2 für den Zweck der Deaktivierung von interrupts und die Eingabe IRQ-Modus
in Zeile 2, durch das laden der Wert in CPSR_c.
Dann, auf der Linie 3, LDR verwendet wird, laden Sie die (32-bit) - Adresse des IRQ_NewStack label in der stack-pointer banked in IRQ-mode.

Könntest du bitte erklären Sie mir, was ist der Zweck der Instruktion auf Zeile 7?

Las ich auf der ARM-Handbuch, dass DCD wird verwendet, um "behalten sich eine 32-bit-Wort,". Wenn ich lese "behalten sich eine 32-bit-Wort,", ich denke, es ist wie das reservieren von Speicherplatz für ein einzelnes 32-bit-variable, was bedeutet, dass DCD fungiert als EQU (kann EQU ist nur ein makro für DCD...).
Aber, wenn dies der Fall ist, warum sollte ich reserve nur ein 32-bit-Wort für den ganzen Stapel, das wachsen kann, größer als eine 32-bit-Wort?

Dank.

  • Ich denke, Sie haben einen Fehler in Ihrem code. Es sollte entweder LDR r13_irq, =IRQ_Stack oder LDR r13_irq, IRQ_NewStack.
InformationsquelleAutor Salvatore | 2012-10-06
Schreibe einen Kommentar