swi.s
来自「这是一个基于C的操作系统的开发实现,借助的是OS设计思想,以用一些最为关键的技术」· S 代码 · 共 59 行
S
59 行
; ****************************************************************************
; * Simple Little Operating System - SLOS
; ****************************************************************************
; ****************************************************************************
; *
; * Module : swi.s
; * Project : SLOS
; * Version : 0.09
; * Originator : Andrew N. Sloss
; * History :
; *
; * 16th July 2003 Andrew N. Sloss
; * - added header information
; *
; ****************************************************************************
EXPORT coreSWIHandler
; ****************************************************************************
; * IMPORT
; ****************************************************************************
IMPORT eventsSWIHandler
AREA SWISLOS, CODE, READONLY
; ****************************************************************************
; * kernel swi handler event
; ****************************************************************************
coreSWIHandler
STMFD sp!,{r0-r12,lr} ; Store registers
LDR r10,[lr,#-4] ; Calculate address of SWI instruction
BIC r10,r10,#0xff000000 ; Mask off top 8 bits
MOV r1,sp ; second parameter to C routine...
; is pointer to register values.
MRS r2,SPSR ; move the spsr into gp register
STMFD sp!,{r2} ; store spsr onto the stack.
; This is only really
; needed in case of nested SWI's
BL swi_jumptable ; call C routine to handle SWI
LDMFD sp!,{r2} ; restore spsr from stack into r2
MSR SPSR_cxsf,r2 ; and restore it into spsr.
LDMFD sp!,{r0-r12,pc}^ ; restore registers and return.
; ---------------------------------------------------------------
; SWI Jump Table
; r0 - swi Number
; r1 - point to the r0-r12
; ---------------------------------------------------------------
swi_jumptable
MOV r0,r10 ; move SWI number into r0
B eventsSWIHandler ; calling c routine to handle swi call
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?