📄 swirv.s
字号:
;/*****************************************************************************/
;/* SWI.S: SWI Handler */
;/*****************************************************************************/
;/* This file is part of the uVision/ARM development tools. */
;/* Copyright (c) 2005-2006 Keil Software. All rights reserved. */
;/* This software may only be used under the terms of a valid, current, */
;/* end user licence from KEIL for a compatible version of KEIL software */
;/* development tools. Nothing else gives you the right to use this software. */
;/*****************************************************************************/
T_Bit EQU 0x20
PRESERVE8 ; 8-Byte aligned Stack
AREA SWI_Area, CODE, READONLY
ARM
EXPORT SWI_Handler
SWI_Handler
STMFD SP!, {R12, LR} ; Store R12, LR//在ARTX中没有保护SPSR
MRS R12, SPSR ; Get SPSR
STMFD SP!, {R8, R12} ; Store R8, SPSR//在ARTX中没有保护SPSR
TST R12, #T_Bit ; Check Thumb Bit
LDRNEH R12, [LR,#-2] ; Thumb: Load Halfword
BICNE R12, R12, #0xFF00 ; Extract SWI Number
LDREQ R12, [LR,#-4] ; ARM: Load Word
BICEQ R12, R12, #0xFF000000 ; Extract SWI Number
User_swi
LDR R8, SWI_Count ;
CMP R12, R8
BHS SWI_Dead ; Overflow
ADR R8, SWI_Table
LDR R12, [R8,R12,LSL #2] ; Load SWI Function Address
MOV LR, PC ; Return Address
BX R12 ; Call SWI Function
Exit_swi
LDMFD SP!, {R8, R12} ; Load R8, SPSR
MSR SPSR_cxsf, R12 ; Set SPSR
LDMFD SP!, {R12, PC}^ ; Restore R12 and Return
SWI_Dead B SWI_Dead ; None Existing SWI
SWI_Cnt EQU (SWI_End-SWI_Table)/4
SWI_Count DCD SWI_Cnt
IMPORT __SWI_0;ARTX占用
IMPORT __SWI_1;ARTX保留
IMPORT __SWI_2;ARTX保留
IMPORT __SWI_3;ARTX保留
IMPORT __SWI_4;ARTX保留
; IMPORT __SWI_5;ARTX保留
; IMPORT __SWI_6;ARTX占用
; IMPORT __SWI_7;ARTX占用
; IMPORT __SWI_8;用户SWI8
; IMPORT __SWI_9;用户SWI9
; IMPORT __SWI_10;用户SWI10
; IMPORT __SWI_11;用户SWI11
; IMPORT __SWI_12;用户SWI12
; IMPORT __SWI_13;用户SWI13
; IMPORT __SWI_14;用户SWI14
; IMPORT __SWI_15;用户SWI15
SWI_Table
DCD __SWI_0 ; SWI 0 Function Entry
DCD __SWI_1 ; SWI 1 Function Entry
DCD __SWI_2 ; SWI 2 Function Entry
DCD __SWI_3 ; SWI 3 Function Entry
DCD __SWI_4 ; SWI 4 Function Entry
; DCD __SWI_5 ; SWI 5 Function Entry
; DCD __SWI_6 ; SWI 6 Function Entry
; DCD __SWI_7 ; SWI 7 Function Entry
; DCD __SWI_8 ; SWI 8 Function Entry
; DCD __SWI_9 ; SWI 9 Function Entry
; DCD __SWI_10 ; SWI 10 Function Entry
; DCD __SWI_11 ; SWI 11 Function Entry
; DCD __SWI_12 ; SWI 11 Function Entry
; DCD __SWI_13 ; SWI 11 Function Entry
; DCD __SWI_14 ; SWI 11 Function Entry
; DCD __SWI_15 ; SWI 11 Function Entry
SWI_End
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -