📄 os_cpu_a.lst
字号:
0052 D0D0 196 POP PSW
0054 D082 197 POP DPL
0056 D083 198 POP DPH
0058 D0F0 199 POP B
005A D0E0 200 POP ACC ;A is register but ACC is direct ram
201
005C D2AF 202 SETB EA ;after start, enable EA
005E 32 203 RETI
204
205
206
207 ; --------------------------------------------------
208 ; --------------------- OSCtxSw() ------------------
209 ; --------------------------------------------------
210
---- 211 RSEG ?PR?OSCtxSw?OS_CPU_A
0000 212 OSCtxSw:
213
214 ;-----------------
215 ; push registers
216 ;-----------------
0000 C0E0 217 PUSH ACC
0002 C0F0 218 PUSH B
0004 C083 219 PUSH DPH
0006 C082 220 PUSH DPL
0008 C0D0 221 PUSH PSW
000A C000 222 PUSH 00
000C C001 223 PUSH 01
000E C002 224 PUSH 02
0010 C003 225 PUSH 03
0012 C004 226 PUSH 04
0014 C005 227 PUSH 05
0016 C006 228 PUSH 06
0018 C007 229 PUSH 07
230
001A 231 OSCPUAUniformCtxSw:
232 ;assume register is pushed to hardware stack, in the format as discripted at the beginning
of this file
233 ;Before jump OSCPUAUniformCtxSw, OSCtxSw or OSIntCtxSw must first push registers to hardwar
e stack as this format.
234
235 ;----------------------
236 ;Get OSTCBCurRdy->OSTCBStkPtr to DPTR
237 ;-----------------------
238 ;high byte is at low address
239
240 ;OSTCBCurRdy to dptr
001A 758300 F 241 MOV DPH,#HIGH(OSTCBCur)
001D 758200 F 242 MOV DPL,#LOW (OSTCBCur)
0020 E0 243 MOVX A,@DPTR
0021 F8 244 MOV R0,A
0022 A3 245 INC DPTR
0023 E0 246 MOVX A,@DPTR
0024 8883 247 MOV DPH,R0
0026 F582 248 MOV DPL,A
249
A51 MACRO ASSEMBLER OS_CPU_A 10/16/2006 15:27:52 PAGE 5
250 ;OSTCBStkPtr to dptr
0028 E0 251 MOVX A,@DPTR
0029 F8 252 MOV R0,A
002A A3 253 INC DPTR
002B E0 254 MOVX A,@DPTR
002C 8883 255 MOV DPH,R0
002E F582 256 MOV DPL,A
257
258
259 ;--------------------
260 ;save stack
261 ;--------------------
262
263 ;store ?C_IBP
0030 E500 F 264 MOV A,?C_IBP
0032 F0 265 MOVX @DPTR,A
266
267 ;store simulated stack
0033 6008 268 JZ OSCPUASmltSaveOver ;simulated stack size == 0, that is A == 0x100
0035 F8 269 MOV R0,A
0036 270 OSCPUASmltSave:
0036 A3 271 INC DPTR
0037 E6 272 MOV A,@R0
0038 F0 273 MOVX @DPTR,A
0039 08 274 INC R0
003A B800F9 275 CJNE R0,#0,OSCPUASmltSave
003D 276 OSCPUASmltSaveOver:
277
278 ;store sp size
003D A3 279 INC DPTR
003E E581 280 MOV A,SP
0040 C3 281 CLR C
0041 9400 F 282 SUBB A,#StkBottom - 1
0043 F0 283 MOVX @DPTR,A
284
285 ;store hardware stack and registers
286 ;stack top is at high address
0044 F9 287 MOV R1,A ;caluate copy rotation times
0045 7800 F 288 MOV R0,#StkBottom - 1 ;start of stack defined by keilc system
0047 289 OSCPUASaveStk:
0047 08 290 INC R0
0048 A3 291 INC DPTR
0049 E6 292 MOV A,@R0
004A F0 293 MOVX @DPTR,A
004B D9FA 294 DJNZ R1,OSCPUASaveStk
295
296 ;-------------------
297 ;call OSTaskSwHook
298 ;-------------------
299
004D 120000 F 300 LCALL _?OSTaskSwHook
301
302 ;-------------------
303 ; OSTCBCur = OSTCBHighRdy
304 ;-------------------
305
0050 758300 F 306 MOV DPH,#HIGH (OSTCBHighRdy)
0053 758200 F 307 MOV DPL,#LOW (OSTCBHighRdy)
0056 E0 308 MOVX A,@DPTR
0057 FF 309 MOV R7,A ;store to R7/R6
0058 A3 310 INC DPTR
0059 E0 311 MOVX A,@DPTR
005A FE 312 MOV R6,A
313
005B 758300 F 314 MOV DPH,#HIGH (OSTCBCur)
005E 758200 F 315 MOV DPL,#LOW (OSTCBCur)
A51 MACRO ASSEMBLER OS_CPU_A 10/16/2006 15:27:52 PAGE 6
0061 EF 316 MOV A,R7
0062 F0 317 MOVX @DPTR,A
0063 EE 318 MOV A,R6
0064 A3 319 INC DPTR
0065 F0 320 MOVX @DPTR,A
321
322 ;-----------------
323 ; OSPrioCur = OSPrioHighRdy
324 ;-----------------
325
0066 758300 F 326 MOV DPH,#HIGH (OSPrioHighRdy)
0069 758200 F 327 MOV DPL,#LOW (OSPrioHighRdy)
006C E0 328 MOVX A,@DPTR
329
006D 758300 F 330 MOV DPH,#HIGH (OSPrioCur)
0070 758200 F 331 MOV DPL,#LOW (OSPrioCur)
0073 F0 332 MOVX @DPTR,A
333
334 ;-----------------
335 ; Restore Ctx
336 ;-----------------
0074 020000 F 337 LJMP OSCPUARstStk
338
339 ; -------------------------------------------
340 ; ---------------- OSIntCtxSw ---------------
341 ; -------------------------------------------
---- 342 RSEG ?PR?OSIntCtxSw?OS_CPU_A
0000 343 OSIntCtxSw:
344 ;------------------
345 ; adjust sp: delete stack content of OSIntExit(),OSIntCtxSw(). SP -= 4
346 ;------------------
347
0000 E581 348 MOV A,SP
0002 C3 349 CLR C
0003 9404 350 SUBB A,#4
0005 F581 351 MOV SP,A
352
0007 020000 F 353 LJMP OSCPUAUniformCtxSw
354
355 END
A51 MACRO ASSEMBLER OS_CPU_A 10/16/2006 15:27:52 PAGE 7
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C_IBP. . . . . . . . . . . D ADDR ----- EXT
?PR?OSCTXSW?OS_CPU_A. . . . C SEG 0077H REL=UNIT
?PR?OSINTCTXSW?OS_CPU_A . . C SEG 000AH REL=UNIT
?PR?OSSTARTHIGHRDY?OS_CPU_A C SEG 005FH REL=UNIT
?STACK. . . . . . . . . . . I SEG 0000H REL=UNIT
ACC . . . . . . . . . . . . D ADDR 00E0H A
B . . . . . . . . . . . . . D ADDR 00F0H A
DPH . . . . . . . . . . . . D ADDR 0083H A
DPL . . . . . . . . . . . . D ADDR 0082H A
EA. . . . . . . . . . . . . B ADDR 00A8H.7 A
OSCPUARSTHARDSTK. . . . . . C ADDR 003CH R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSCPUARSTSTK. . . . . . . . C ADDR 000FH R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSCPUASAVESTK . . . . . . . C ADDR 0047H R SEG=?PR?OSCTXSW?OS_CPU_A
OSCPUASMLTRSTOVER . . . . . C ADDR 0034H R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSCPUASMLTRSTSTK. . . . . . C ADDR 002EH R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSCPUASMLTSAVE. . . . . . . C ADDR 0036H R SEG=?PR?OSCTXSW?OS_CPU_A
OSCPUASMLTSAVEOVER. . . . . C ADDR 003DH R SEG=?PR?OSCTXSW?OS_CPU_A
OSCPUAUNIFORMCTXSW. . . . . C ADDR 001AH R SEG=?PR?OSCTXSW?OS_CPU_A
OSCTXSW . . . . . . . . . . C ADDR 0000H R SEG=?PR?OSCTXSW?OS_CPU_A
OSINTCTXSW. . . . . . . . . C ADDR 0000H R SEG=?PR?OSINTCTXSW?OS_CPU_A
OSPRIOCUR . . . . . . . . . X ADDR ----- EXT
OSPRIOHIGHRDY . . . . . . . X ADDR ----- EXT
OSRUNNING . . . . . . . . . X ADDR ----- EXT
OSSTARTHIGHRDY. . . . . . . C ADDR 0000H R SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSTCBCUR. . . . . . . . . . X ADDR ----- EXT
OSTCBHIGHRDY. . . . . . . . X ADDR ----- EXT
OS_CPU_A. . . . . . . . . . N NUMB -----
PSW . . . . . . . . . . . . D ADDR 00D0H A
SP. . . . . . . . . . . . . D ADDR 0081H A
STKBOTTOM . . . . . . . . . I ADDR 0000H R SEG=?STACK
TR0 . . . . . . . . . . . . B ADDR 0088H.4 A
TR1 . . . . . . . . . . . . B ADDR 0088H.6 A
_?OSTASKSWHOOK. . . . . . . C ADDR ----- EXT
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -