?? os_cpu_a.asm
字號:
NAME OS_CPU_A_ASM
PUBLIC ?C_XBP, C_XBP
PUBLIC _?OSTickISR
EXTRN CODE(_?C_OSCtxSw)
EXTRN CODE(_?OSIntEnter), CODE(_?OSTimeTick), CODE(_?OSIntExit)
PUBLIC _?LoadCtx, Stack, _?OSCtxSw, _?OSIntCtxSw
LoadXBP MACRO
MOV DPH, C_XBP
MOV DPL, C_XBP+1
ENDM
SaveXBP MACRO
PUSH IE
CLR EA
MOV C_XBP, DPH
MOV C_XBP+1, DPL
POP IE
ENDM
LoadReg MACRO REG
MOVX A, @DPTR
MOV REG, A
ENDM
SaveReg MACRO REG
MOV A, REG
MOVX @DPTR, A
ENDM
PUSHA MACRO
PUSH PSW
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
IRP REG, <R0, R1, R2, R3, R4, R5, R6, R7>
MOV A, REG
PUSH ACC
ENDM
ENDM
POPA MACRO
IRP REG, <R7, R6, R5, R4, R3, R2, R1, R0>
POP ACC
MOV REG, A
ENDM
POP DPL
POP DPH
POP B
POP ACC
POP PSW
ENDM
DT?C_XBP SEGMENT DATA
RSEG DT?C_XBP
?C_XBP:
C_XBP:
DS 1
?STACK SEGMENT IDATA
RSEG ?STACK
Stack:
PR?LoadCtx SEGMENT CODE
RSEG PR?LoadCtx
_?LoadCtx:
LoadXBP
LoadREG SP
INC DPTR
MOV R0, SP
LC_1:
LoadREG @R0
INC DPTR
DEC R0
CJNE R0, #Stack-1, LC_1
SaveXBP
POPA
RET
PR?OSCtxSw SEGMENT CODE
RSEG PR?OSCtxSw
_?OSCtxSw:
PUSHA
OSCS_1:
LoadXBP
MOV A, SP
CLR C
SUBB A, #Stack-1
INC A
CLR C
XCH A, DPL
SUBB A, DPL
JNC SC_1
DEC DPH
SC_1:
MOV DPL,A
SaveXBP
SaveREG SP
INC DPTR
MOV R0, SP
SC_2:
SaveREG @R0
INC DPTR
DEC R0
CJNE R0, #Stack-1, SC_2
POPA
LJMP _?C_OSCtxSw
PR?OSIntCtxSw SEGMENT CODE
RSEG PR?OsIntCtxSw
_?OSIntCtxSw:
DEC SP
DEC SP
DEC SP
DEC SP
LJMP OSCS_1
CSEG AT 0BH
LJMP _?OSTickISR
PUBLIC OSTickRate
DT?OSTickISR SEGMENT DATA
RSEG DT?OSTickISR
OSTickRate:
DS 1
OSTickCntr:
DS 1
EXTRN CODE(_?UserTickTimer)
PR?OSTickISR SEGMENT CODE
RSEG PR?OSTickISR
_?OSTickISR:
LCALL ResetIntrHw
PUSHA
LCALL _?UserTickTimer
DEC OSTickCntr
MOV A, OSTickCntr
JNZ OSTI_1
MOV OSTickCntr, OSTickRate
LCALL _?OSIntEnter
LCALL _?OSTimeTick
LCALL _?OSIntExit
OSTI_1:
POPA
RET
ResetIntrHw:
RETI
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -