2
我正在研究爲ARM處理器(IRQ,Supervisor,User,...)的不同模式設置堆棧的主題。 由於設置不同的堆棧需要相同的指令序列(基本上只是堆棧地址更改),所以我會問我的問題,以解決設置IRQ堆棧的問題。 假設我有以下定義:DCD指令和IRQ堆棧
IRQ_Stack EQU 0x8000
NoInt EQU 0xC0
IRQ32md EQU 0x12
下面的代碼用於設置堆棧(I添加行號,以使註釋):
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
行1剛剛加載r2
爲通過將值加載到CPSR_c
來禁用中斷並進入IRQ模式 行的目的。 然後,在線,LDR
用於將IRQ_NewStack
標籤的(32位)地址加載到以IRQ模式分組的堆棧指針中。
請問您能解釋一下指令的用途嗎?
我在ARM手冊上看到DCD
用於「保留32位字」。當我讀「保留一個32位字」,我認爲這就像爲單個32位變量保留空間,這意味着DCD
充當EQU
(可能是EQU
只是DCD
的宏)。 但是,如果是這種情況,爲什麼我應該爲整個堆棧預留一個32位字,而這個字可以比一個32位字長?
謝謝。
我認爲你在你的代碼中有一個錯誤。它應該是'LDR r13_irq,= IRQ_Stack'或'LDR r13_irq,IRQ_NewStack'。 –
是的,你是對的......謝謝 – salvo