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

📄 os_cpu_a.lst

📁 小型便携式温度计的源代码第二版
💻 LST
📖 第 1 页 / 共 3 页
字号:
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 + -