⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_cpu_a.lst

📁 一个分选系统的软件:用SmallRtos操作系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
0021 F6              487         MOV     @R0,A
0022 08              488         INC     R0
0023 09              489         INC     R1
0024 DEFA            490         DJNZ    R6,?C0002
0026                 491     ?C0003:
                     492     ;         temp = OSTsakStackBotton[OSTaskID+1] - (unsigned char idata *)SP-1;
0026 7400     F      493         MOV     A,#LOW (OSTsakStackBotton+1)
A51 MACRO ASSEMBLER  OS_CPU_A                                                             12/21/2004 15:11:28 PAGE     9

0028 2500     F      494         ADD     A,OSTaskID
002A F9              495         MOV     R1,A
002B E7              496         MOV     A,@R1
002C D3              497         SETB    C
                     498         ;SUBB    A,sp
002D 9A              499         SUBB    A,r2
002E FF              500         MOV     R7,A
                     501     ;         SP = (unsigned char )cp1 - 1;
002F 18              502         DEC     R0;
0030 8881            503         MOV     SP,R0
                     504     ;         for(i = OSTaskID+1;i < OSNextTaskID+1; i++)
                     505     ;         {
                     506     ;             OSTsakStackBotton[i] -= temp;
                     507     ;         }
0032 E500     F      508         MOV     A,OSNextTaskID
0034 C3              509         CLR     C
0035 9500     F      510         SUBB    A,OSTaskID
0037 FE              511         MOV     R6,A
0038 600F            512         JZ      ?C0005
                     513     
003A 7400     F      514         MOV     A,#LOW (OSTsakStackBotton)
003C 2500     F      515         ADD     A,OSTaskID
003E F9              516         MOV     R1,A    
003F EF              517         MOV     A,R7
0040 F4              518         CPL     A
0041 04              519         INC     A
0042 FF              520         MOV     R7,A
0043                 521     ?C0004:
0043 09              522         INC     R1
0044 EF              523         MOV     A,R7
0045 27              524         ADD     A,@R1    
0046 F7              525         MOV     @R1,A
0047 DEFA            526         DJNZ    R6,?C0004
0049                 527     ?C0005:
                     528     ;         OSTaskID = OSNextTaskID;
0049 850000   F      529         MOV     OSTaskID,OSNextTaskID
                     530     ;         LoadCtx();    
004C 020000   F      531         LJMP    LoadCtx
                     532     ;     }
004F                 533     ?C0001:
                     534     ; 
                     535     ;     if( OSNextTaskID != OSTaskID)
004F E500     F      536         MOV     A,OSNextTaskID
0051 6500     F      537         XRL     A,OSTaskID
0053 6036            538         JZ      ?C000r
                     539     ;     {
                     540     ;          cp2--;
                     541     ;          cp1--;
                     542     ;         while(cp2 != (unsigned char idata *)temp)
                     543     ;         {
                     544     ;             *cp2-- = *cp1--;
                     545     ;         }
                     546         ;MOV     A,R7
                     547         ;CLR     C
                     548         ;SUBB    A,R1
                     549         ;MOV     R6,A
0055 E8              550         mov     a,r0
0056 C3              551         clr     c
0057 9F              552         subb    a,r7
0058 FE              553         mov     r6,a
0059                 554     ?C0008:
0059 18              555         DEC     R0
005A 19              556         DEC     R1
005B E6              557         MOV     A,@R0
005C F7              558         MOV     @R1,A
005D DEFA            559         DJNZ    R6,?C0008
A51 MACRO ASSEMBLER  OS_CPU_A                                                             12/21/2004 15:11:28 PAGE    10

005F                 560     ?C0009:
                     561     ;         temp = OSTsakStackBotton[OSTaskID+1] - (unsigned char idata *)SP-1;
005F 7400     F      562         MOV     A,#LOW (OSTsakStackBotton+01H)
0061 2500     F      563         ADD     A,OSTaskID
0063 F9              564         MOV     R1,A
0064 E7              565         MOV     A,@R1
0065 D3              566         SETB    C
                     567         ;SUBB    A,SP
0066 9A              568         SUBB    A,r2
0067 FF              569         MOV     R7,A
                     570     ;         SP = (unsigned char )OSTsakStackBotton[OSNextTaskID+1];
0068 7400     F      571         MOV     A,#LOW (OSTsakStackBotton+01H)
006A 2500     F      572         ADD     A,OSNextTaskID
006C F9              573         MOV     R1,A
006D E7              574         MOV     A,@R1
006E F581            575         MOV     SP,A
                     576     ;         for(i = OSNextTaskID+1;i < OSTaskID+1; i++)
                     577     ;         {
                     578     ;             OSTsakStackBotton[i] += temp;
                     579     ;         }
                     580     
0070 E500     F      581         MOV     A,OSTaskID
0072 C3              582         CLR     C
0073 9500     F      583         SUBB    A,OSNextTaskID
0075 600C            584         JZ      ?C0011
                     585     
0077 FE              586         MOV     R6,A
0078 7400     F      587         MOV     A,#LOW (OSTsakStackBotton)
007A 2500     F      588         ADD     A,OSNextTaskID
007C F9              589         MOV     R1,A    
007D                 590     ?C0010:
007D 09              591         INC     R1
007E EF              592         MOV     A,R7
007F 27              593         ADD     A,@R1    
0080 F7              594         MOV     @R1,A
0081 DEFA            595         DJNZ    R6,?C0010
                     596     
0083                 597     ?C0011:
                     598     ;         OSTaskID = OSNextTaskID;        
0083 850000   F      599         MOV         OSTaskID,OSNextTaskID
                     600     ;         SP--;
0086 1581            601         DEC         SP
                     602     ;     }
0088                 603     ?C0007:
                     604     ;     LoadCtx();
0088 020000   F      605         LJMP        LoadCtx
008B                 606     ?C000r:
                     607     IF 0  <> 0
                                 mov     SP,r2
                             ENDIF
008B 020000   F      610         LJMP        LoadCtx
                     611     ;****************************************************************************************
                     612     ;/*****************************************************************************************
                             ****************
                     613     ;** 函数名称: OSIntCtxSw
                     614     ;** 功能描述: 中断使任务放弃CPU环境保存函数
                     615     ;** 输 入: OSTaskID
                     616     ;** 输 出 : 无
                     617     ;** 全局变量: OSFastSwap
                     618     ;** 调用模块: 无
                     619     ;** 
                     620     ;** 作 者: 陈明计
                     621     ;** 日 期: 2002年2月22日
                     622     ;**----------------------------------------------------------------------------------------
                             ---------------
                     623     ;** 修 改: 陈明计
A51 MACRO ASSEMBLER  OS_CPU_A                                                             12/21/2004 15:11:28 PAGE    11

                     624     ;** 日 期: 2002年12月2日
                     625     ;**----------------------------------------------------------------------------------------
                             ---------------
                     626     ;** 修 改:
                     627     ;** 日 期:
                     628     ;**----------------------------------------------------------------------------------------
                             ---------------
                     629     ;******************************************************************************************
                             **************/
----                 630             RSEG  ?PR?OSIntCtxSw?OS_CPU_A
0000                 631     OSIntCtxSw:
                     632             USING   0
                     633                                             ;是否是优先级最低任务
0000 7408            634         MOV     A,#8
0002 6500     F      635         XRL     A,OSTaskID
0004 700F            636         JNZ     OSIntCtxSw_0
                     637                                             ;是则不需要保存所有寄存器
                     638     ;SP=SP-13-4                             ;4:两层函数调用堆栈,13:寄存器数目
0006 74EF            639         MOV     A,#(-17)
0008 2581            640         ADD     A,SP
000A F581            641         MOV     SP,A
                     642                                             ;跳转到OSCtxSw,同时通知CPU中断处理完成
000C 7400     F      643         MOV     A, #LOW  OSCtxSw
000E C0E0            644         PUSH    ACC
0010 7400     F      645         MOV     A, #HIGH OSCtxSw
0012 C0E0            646         PUSH    ACC
0014 32              647         RETI
                     648                                             ;需要保存所有寄存器
0015                 649     OSIntCtxSw_0:
                     650     ;SP=SP-4                                ;4:两层函数调用堆栈
0015 74FC            651         MOV     A,#0FCH
0017 2581            652         ADD     A,SP
0019 F581            653         MOV     SP,A
                     654                                             ;设置标志:任务再次恢复运行时需要恢复所有寄存器
001B 900000   F      655         MOV     DPTR,#OSMapTbl
001E E500     F      656         MOV     A,OSTaskID
                     657     
0020 93              658         MOVC    A,@A+DPTR
0021 F4              659         CPL     A
0022 5500     F      660         ANL     A,OSFastSwap
0024 F500     F      661         MOV     OSFastSwap,A    
                             
                                 
                                 
                                 
                                 
                                 
                                 
                                 
                                 
                             
                                 
                                 
                                 
                                 
                                 
                             
                             
                     679                                             ;跳转到堆栈处理,同时通知CPU中断处理完成
0026 7400     F      680         MOV     A, #LOW  C_OSCtxSw
0028 C0E0            681         PUSH    ACC
002A 7400     F      682         MOV     A, #HIGH C_OSCtxSw
002C C0E0            683         PUSH    ACC
002E 32              684         RETI
                     685     
                     686     ;****************************************************************************************
A51 MACRO ASSEMBLER  OS_CPU_A                                                             12/21/2004 15:11:28 PAGE    12

                     687             END
A51 MACRO ASSEMBLER  OS_CPU_A                                                             12/21/2004 15:11:28 PAGE    13

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 + -