📄 os_cpu_a.asm
字号:
.page
.text
_OSIntCtxSw:
.ref _OSTCBHighRdy
.ref _OSTCBCur
.ref _OSPrioHighRdy
.ref _OSPrioCur
.global _OSIntCtxSw
;模拟返回中断
;保存当前环境
;********************************************************************************
MOVW DP,#_OSTCBCur
MOVL XAR4,@_OSTCBCur ; |165|
MOVL XAR4,*+XAR4[0] ; |165|
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;保存被切换的RPC
SUBB SP,#2
POP AL
MOVB XAR0,#17
MOV *+XAR4[AR0],AL
POP AL
MOVB XAR0,#16
MOV *+XAR4[AR0],AL
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
POP ACC
MOV *+XAR4[2],AH ;保存task addr
MOV *+XAR4[3],AL
POP ACC
MOVB XAR0,#15
MOV *+XAR4[AR0],AH ;保存DBGSTAT
MOVB XAR0,#14
MOV *+XAR4[AR0],AL ;保存 IER
POP ACC
MOVB XAR0,#13
MOV *+XAR4[AR0],AH ;保存 DP
MOVB XAR0,#12
MOV *+XAR4[AR0],AL ;保存 ST1
POP ACC
MOVB XAR0,#11
MOV *+XAR4[AR0],AH ;保存 AR1
MOVB XAR0,#10
MOV *+XAR4[AR0],AL ;保存 AR0
POP ACC
MOVB XAR0,#9
MOV *+XAR4[AR0],AH ;保存 PH
MOVB XAR0,#8
MOV *+XAR4[AR0],AL ;保存 PL
POP ACC
MOVB XAR0,#7
MOV *+XAR4[AR0],AH ;保存 AH
MOVB XAR0,#6
MOV *+XAR4[AR0],AL ;保存 AL
POP ACC
MOVB XAR0,#5
MOV *+XAR4[AR0],AH ;保存 T
MOVB XAR0,#4
MOV *+XAR4[AR0],AL ;保存 ST0
POP AL
;********************************************************************************
;=================================================================================
MOVW DP,#_OSTCBHighRdy ; OSTCBCur = OSTCBHighRdy
MOVL ACC,@_OSTCBHighRdy
MOVW DP,#_OSTCBCur
MOVL @_OSTCBCur,ACC
MOVW DP,#_OSPrioHighRdy ;OSPrioCur = OSPrioHighRdy
MOV AL,@_OSPrioHighRdy
MOVW DP,#_OSPrioCur
MOV @_OSPrioCur,AL
;=================================================================================
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;模拟中断
;装载新任务的cpu环境
MOVW DP,#_OSTCBHighRdy
MOVL XAR4,@_OSTCBHighRdy ; |165|
MOVL XAR4,*+XAR4[0] ; |165|
;模拟中断
PUSH AL
MOVB XAR0,#4
MOV AL,*+XAR4[AR0] ;得到 ST0
MOVB XAR0,#5
MOV AH,*+XAR4[AR0] ;得到 T
PUSH ACC
MOVB XAR0,#6
MOV AL,*+XAR4[AR0] ;得到 AL
MOVB XAR0,#7
MOV AH,*+XAR4[AR0] ;得到 AH
PUSH ACC
MOVB XAR0,#8
MOV AL,*+XAR4[AR0] ;得到 PL
MOVB XAR0,#9
MOV AH,*+XAR4[AR0] ;得到 PH
PUSH ACC
MOVB XAR0,#10
MOV AL,*+XAR4[AR0] ;得到 AR0
MOVB XAR0,#11
MOV AH,*+XAR4[AR0] ;得到 AR1
PUSH ACC
MOVB XAR0,#12
MOV AL,*+XAR4[AR0] ;得到 ST1
MOVB XAR0,#13
MOV AH,*+XAR4[AR0] ;得到 DP
PUSH ACC
MOVB XAR0,#14
MOV AL,*+XAR4[AR0] ;得到 IER
MOVB XAR0,#15
MOV AH,*+XAR4[AR0] ;得到 DBGSTAT
PUSH ACC
MOV AH,*+XAR4[2] ;task addr
MOV AL,*+XAR4[3]
PUSH ACC
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;恢复的RPC
MOVB XAR0,#17
MOV *+XAR4[AR0],AH
MOVB XAR0,#16
MOV *+XAR4[AR0],AL
PUSH ACC
POP RPC
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IRET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -