📄 os_cpu_a.lst
字号:
0020 E7 485 MOV A,@R1
0021 F6 486 MOV @R0,A
0022 08 487 INC R0
0023 09 488 INC R1
0024 DEFA 489 DJNZ R6,?C0002
0026 490 ?C0003:
491 ; temp = OSTsakStackBotton[OSTaskID+1] - (unsigned char idata *)SP-1;
0026 7400 F 492 MOV A,#LOW (OSTsakStackBotton+1)
0028 2500 F 493 ADD A,OSTaskID
A51 MACRO ASSEMBLER OS_CPU_A 02/14/2009 14:56:15 PAGE 9
002A F9 494 MOV R1,A
002B E7 495 MOV A,@R1
002C D3 496 SETB C
497 ;SUBB A,sp
002D 9A 498 SUBB A,r2
002E FF 499 MOV R7,A
500 ; SP = (unsigned char )cp1 - 1;
002F 18 501 DEC R0;
0030 8881 502 MOV SP,R0
503 ; for(i = OSTaskID+1;i < OSNextTaskID+1; i++)
504 ; {
505 ; OSTsakStackBotton[i] -= temp;
506 ; }
0032 E500 F 507 MOV A,OSNextTaskID
0034 C3 508 CLR C
0035 9500 F 509 SUBB A,OSTaskID
0037 FE 510 MOV R6,A
0038 600F 511 JZ ?C0005
512
003A 7400 F 513 MOV A,#LOW (OSTsakStackBotton)
003C 2500 F 514 ADD A,OSTaskID
003E F9 515 MOV R1,A
003F EF 516 MOV A,R7
0040 F4 517 CPL A
0041 04 518 INC A
0042 FF 519 MOV R7,A
0043 520 ?C0004:
0043 09 521 INC R1
0044 EF 522 MOV A,R7
0045 27 523 ADD A,@R1
0046 F7 524 MOV @R1,A
0047 DEFA 525 DJNZ R6,?C0004
0049 526 ?C0005:
527 ; OSTaskID = OSNextTaskID;
0049 850000 F 528 MOV OSTaskID,OSNextTaskID
529 ; LoadCtx();
004C 020000 F 530 LJMP LoadCtx
531 ; }
004F 532 ?C0001:
533 ;
534 ; if( OSNextTaskID != OSTaskID)
004F E500 F 535 MOV A,OSNextTaskID
0051 6500 F 536 XRL A,OSTaskID
0053 6036 537 JZ ?C000r
538 ; {
539 ; cp2--;
540 ; cp1--;
541 ; while(cp2 != (unsigned char idata *)temp)
542 ; {
543 ; *cp2-- = *cp1--;
544 ; }
545 ;MOV A,R7
546 ;CLR C
547 ;SUBB A,R1
548 ;MOV R6,A
0055 E8 549 mov a,r0
0056 C3 550 clr c
0057 9F 551 subb a,r7
0058 FE 552 mov r6,a
0059 553 ?C0008:
0059 18 554 DEC R0
005A 19 555 DEC R1
005B E6 556 MOV A,@R0
005C F7 557 MOV @R1,A
005D DEFA 558 DJNZ R6,?C0008
005F 559 ?C0009:
A51 MACRO ASSEMBLER OS_CPU_A 02/14/2009 14:56:15 PAGE 10
560 ; temp = OSTsakStackBotton[OSTaskID+1] - (unsigned char idata *)SP-1;
005F 7400 F 561 MOV A,#LOW (OSTsakStackBotton+01H)
0061 2500 F 562 ADD A,OSTaskID
0063 F9 563 MOV R1,A
0064 E7 564 MOV A,@R1
0065 D3 565 SETB C
566 ;SUBB A,SP
0066 9A 567 SUBB A,r2
0067 FF 568 MOV R7,A
569 ; SP = (unsigned char )OSTsakStackBotton[OSNextTaskID+1];
0068 7400 F 570 MOV A,#LOW (OSTsakStackBotton+01H)
006A 2500 F 571 ADD A,OSNextTaskID
006C F9 572 MOV R1,A
006D E7 573 MOV A,@R1
006E F581 574 MOV SP,A
575 ; for(i = OSNextTaskID+1;i < OSTaskID+1; i++)
576 ; {
577 ; OSTsakStackBotton[i] += temp;
578 ; }
579
0070 E500 F 580 MOV A,OSTaskID
0072 C3 581 CLR C
0073 9500 F 582 SUBB A,OSNextTaskID
0075 600C 583 JZ ?C0011
584
0077 FE 585 MOV R6,A
0078 7400 F 586 MOV A,#LOW (OSTsakStackBotton)
007A 2500 F 587 ADD A,OSNextTaskID
007C F9 588 MOV R1,A
007D 589 ?C0010:
007D 09 590 INC R1
007E EF 591 MOV A,R7
007F 27 592 ADD A,@R1
0080 F7 593 MOV @R1,A
0081 DEFA 594 DJNZ R6,?C0010
595
0083 596 ?C0011:
597 ; OSTaskID = OSNextTaskID;
0083 850000 F 598 MOV OSTaskID,OSNextTaskID
599 ; SP--;
0086 1581 600 DEC SP
601 ; }
0088 602 ?C0007:
603 ; LoadCtx();
0088 020000 F 604 LJMP LoadCtx
008B 605 ?C000r:
606 IF 0 <> 0
mov SP,r2
ENDIF
008B 020000 F 609 LJMP LoadCtx
610 ;****************************************************************************************
611 ;/*****************************************************************************************
****************
612 ;** 函数名称: OSIntCtxSw
613 ;** 功能描述: 中断使任务放弃CPU环境保存函数
614 ;** 输 入: OSTaskID
615 ;** 输 出 : 无
616 ;** 全局变量: OSFastSwap
617 ;** 调用模块: 无
618 ;**
619 ;** 作 者: 陈明计
620 ;** 日 期: 2002年2月22日
621 ;**----------------------------------------------------------------------------------------
---------------
622 ;** 修 改: 陈明计
623 ;** 日 期: 2002年12月2日
A51 MACRO ASSEMBLER OS_CPU_A 02/14/2009 14:56:15 PAGE 11
624 ;**----------------------------------------------------------------------------------------
---------------
625 ;** 修 改:
626 ;** 日 期:
627 ;**----------------------------------------------------------------------------------------
---------------
628 ;******************************************************************************************
**************/
---- 629 RSEG ?PR?OSIntCtxSw?OS_CPU_A
0000 630 OSIntCtxSw:
631 USING 0
632 ;是否是优先级最低任务
0000 7402 633 MOV A,#2
0002 6500 F 634 XRL A,OSTaskID
0004 700F 635 JNZ OSIntCtxSw_0
636 ;是则不需要保存所有寄存器
637 ;SP=SP-13-4 ;4:两层函数调用堆栈,13:寄存器数目
0006 74EF 638 MOV A,#(-17)
0008 2581 639 ADD A,SP
000A F581 640 MOV SP,A
641 ;跳转到OSCtxSw,同时通知CPU中断处理完成
000C 7400 F 642 MOV A, #LOW OSCtxSw
000E C0E0 643 PUSH ACC
0010 7400 F 644 MOV A, #HIGH OSCtxSw
0012 C0E0 645 PUSH ACC
0014 32 646 RETI
647 ;需要保存所有寄存器
0015 648 OSIntCtxSw_0:
649 ;SP=SP-4 ;4:两层函数调用堆栈
0015 74FC 650 MOV A,#0FCH
0017 2581 651 ADD A,SP
0019 F581 652 MOV SP,A
653 ;设置标志:任务再次恢复运行时需要恢复所有寄存器
001B 900000 F 654 MOV DPTR,#OSMapTbl
001E E500 F 655 MOV A,OSTaskID
656
0020 93 657 MOVC A,@A+DPTR
0021 F4 658 CPL A
0022 5500 F 659 ANL A,OSFastSwap
0024 F500 F 660 MOV OSFastSwap,A
678 ;跳转到堆栈处理,同时通知CPU中断处理完成
0026 7400 F 679 MOV A, #LOW C_OSCtxSw
0028 C0E0 680 PUSH ACC
002A 7400 F 681 MOV A, #HIGH C_OSCtxSw
002C C0E0 682 PUSH ACC
002E 32 683 RETI
684
685 ;****************************************************************************************
686 END
A51 MACRO ASSEMBLER OS_CPU_A 02/14/2009 14:56:15 PAGE 12
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C0001. . . . . . . . . C ADDR 004FH R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C0002. . . . . . . . . C ADDR 0020H R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C0003. . . . . . . . . C ADDR 0026H R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C0004. . . . . . . . . C ADDR 0043H R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C0005. . . . . . . . . C ADDR 0049H R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C0007. . . . . . . . . C ADDR 0088H R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C0008. . . . . . . . . C ADDR 0059H R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C0009. . . . . . . . . C ADDR 005FH R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C000R. . . . . . . . . C ADDR 008BH R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C0010. . . . . . . . . C ADDR 007DH R SEG=?PR?C_OSCTXSW?OS_CPU_C
?C0011. . . . . . . . . C ADDR 0083H R SEG=?PR?C_OSCTXSW?OS_CPU_C
?PR?C_OSCTXSW?OS_CPU_C. C SEG 008EH REL=UNIT
?PR?LOADCTX?OS_CPU_A. . C SEG 0033H REL=UNIT
?PR?OSCTXSW?OS_CPU_A. . C SEG 000DH REL=UNIT
?PR?OSINTCTXSW?OS_CPU_A C SEG 002FH REL=UNIT
?STACK. . . . . . . . . I SEG 0001H REL=UNIT
ACC . . . . . . . . . . D ADDR 00E0H A
B . . . . . . . . . . . D ADDR 00F0H A
C_OSCTXSW . . . . . . . C ADDR 0000H R SEG=?PR?C_OSCTXSW?OS_CPU_C
DPH . . . . . . . . . . D ADDR 0083H A
DPL . . . . . . . . . . D ADDR 0082H A
EA. . . . . . . . . . . B ADDR 00A8H.7 A
LOADCTX . . . . . . . . C ADDR 0000H R SEG=?PR?LOADCTX?OS_CPU_A
LOADCTX_0 . . . . . . . C ADDR 0009H R SEG=?PR?LOADCTX?OS_CPU_A
LOADCTX_2 . . . . . . . C ADDR 002BH R SEG=?PR?LOADCTX?OS_CPU_A
LOADCTX_3 . . . . . . . C ADDR 0032H R SEG=?PR?LOADCTX?OS_CPU_A
OSCTXSW . . . . . . . . C ADDR 0000H R SEG=?PR?OSCTXSW?OS_CPU_A
OSFASTSWAP. . . . . . . D ADDR ----- EXT
OSINTCTXSW. . . . . . . C ADDR 0000H R SEG=?PR?OSINTCTXSW?OS_CPU_A
OSINTCTXSW_0. . . . . . C ADDR 0015H R SEG=?PR?OSINTCTXSW?OS_CPU_A
OSMAPTBL. . . . . . . . C ADDR ----- EXT
OSNEXTTASKID. . . . . . D ADDR ----- EXT
OSTASKID. . . . . . . . D ADDR ----- EXT
OSTSAKSTACKBOTTON . . . D ADDR ----- EXT
OS_CPU_A_ASM. . . . . . N NUMB -----
OS_ENTER_SUM. . . . . . D ADDR ----- EXT
PSW . . . . . . . . . . D ADDR 00D0H A
SP. . . . . . . . . . . D ADDR 0081H A
STACK . . . . . . . . . I ADDR 0000H R SEG=?STACK
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -