2
我開發一個程序,將引導其他程序,因此作爲一個結果,我需要保持寄存器傳遞給我的程序,這樣我可以跳躍到應有加載程序之前將其還原。這是一個裸機系統,沒有操作系統,沒有MMU(現在,但目前沒有使用)。存儲所有寄存器不會傷及任何
這裏是我的代碼,我只是想知道這是否是正確與否,因爲我沒有胳膊板來測試,我必須儘快提交此,
也是真的,相對於PC商店可以使用唯一來源寄存器的低位寄存器(R0-R7),我認爲這是不能夠訪問在某些指令高寄存器僅拇指問題由於有限的指令寬度。
reset: @ entry point, mapped in reset vector
/* Store registers for bootstrapping */
STR R0, [PC, #128]
STR R1, [PC, #128]
STR R2, [PC, #128]
STR R3, [PC, #128]
STR R4, [PC, #128]
STR R5, [PC, #128]
STR R6, [PC, #128]
STR R7, [PC, #128]
/* Following registers can't be used in pc relative load/store */
MOV R0, R8
STR R0, [PC, #128]
MOV R0, R9
STR R0, [PC, #128]
MOV R0, R10
STR R0, [PC, #128]
MOV R0, R11
STR R0, [PC, #128]
MOV R0, R12
STR R0, [PC, #128]
MOV R0, SP
STR R0, [PC, #128]
MOV R0, LR
STR R0, [PC, #128]
MRS R0, CPSR
STR R0, [PC, #128]
MRS R0, SPSR
STR R0, [PC, #128]
ISB SY
B clear_regs
saved_regs:
.rept 32
.word 0x00000000
.endr
.align
clear_regs:
MOV R0, #0
MOV R1, #0
MOV R2, #0
MOV R3, #0
MOV R4, #0
MOV R5, #0
MOV R6, #0
MOV R7, #0
MOV R8, #0
MOV R9, #0
MOV R10, #0
MOV R11, #0
MOV R12, #0
MOV SP, #0
MOV LR, #0
但存儲多個不支持CPSR,SPSR也不支持PC相對尋址,我需要使用既然不能劃傷任何寄存器,或以其他方式我可以存儲一個寄存器,然後使用,作爲一個指針與回寫STMIA遞增的指針和重新使用該指針寫CPSR和SPSR .. 此外,我怎麼使用符號,以彙編改變那些相對偏移? – sgupta 2012-07-05 23:22:58
所有優點。您仍然需要在普通商店中儲存一些註冊商標。看到我上面的更新。 – 2012-07-05 23:30:37
難道你不認爲你需要第一STMIA之前添加4到R0? :P – sgupta 2012-07-05 23:54:49