У меня есть код запуска для ARM926ej-s, который поддерживает ISA ARMv5TEJ.Код запуска выглядит, как показано ниже, но я переключил некоторые команды / данные с комментариями для ясности.Строки, которые мне до сих пор неясны, помечены комментарием "@???????????????????????????????????????????????????????
".
Интересно, зачем нам вычитать "#4
" из сохраненного значения (местоположение "arm926ejs_reset
")?в регистре "r3
"?А затем загрузите его в указатель стека через 4 строки, где мы устанавливаем стеки для первого режима процессора, который является режимом быстрого прерывания.
__start:
arm926ejs_reset:
@here there is image header data needed by ISROM
arm926ejs_reset_handler:
@here we disable MMU, I-cache, D-cache, flush them... and prepare the mcpu.
LDR r5, =inVirtMem
@here we enable MMU.
MOV pc, r5
NOP
NOP
NOP
inVirtMem:
ADR r3, arm926ejs_reset @load location of "arm926ejs_reset" label in r3
MOV r1, #IF_MASK
SUB r3, r3, #4 @???????????????????????????????????????????????????????
ORR r0, r1, #MODE_FIQ
MSR cpsr_cxsf, r0
MOV sp, r3 @???????????????????????????????????????????????????????????
SUB r3, r3, #FIQ_STACK_SIZE
...