亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? os_cpu_a.asm

?? 51下的操作系統(tǒng)
?? ASM
字號(hào):
;*********************************************************************************************************
;**				                               Small RTOS 51 
;**                                   The Real-Time Kernel For Keil c51
;**
;**                                  (c) Copyright 2002-2003, chenmingji
;**                                           All Rights Reserved
;**
;**                                                  V1.12.1
;**
;**
;**--------------------文件信息---------------------------------------------------------------------------
;**文   件   名: OS_CPU_A.ASM
;**創(chuàng)   建   人: 陳明計(jì)
;**版        本: V1.12.1
;**最后修改日期:  2002年2月5日
;**描       述:  Small RTOS 51 與CPU(8051系列)相關(guān)的匯編程序
;**---------------------歷史版本信息----------------------------------------------------------------------
;** 創(chuàng)建人: 陳明計(jì)
;** 版  本:V0.50
;** 日 期: 2002年2月22日
;** 描 述: 原始版本
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計(jì)
;** 版  本: V1.00
;** 日 期: 2002年6月10日
;** 描 述: 支持軟的非屏蔽中斷
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計(jì)
;** 版  本: V1.10.3
;** 日 期: 2002年9月16日
;** 描 述: 修改了LoadCtx代碼使之執(zhí)行更快,代碼更小
;**         
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計(jì)
;** 版  本: V1.10.4
;** 日 期: 2002年10月5日
;** 描 述: 將OS_CPU_A.ASM和OS_CPU_A_task16.ASM合并
;**
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計(jì)
;** 版  本: V1.11.0
;** 日 期: 2002年12月2日
;** 描 述: 根據(jù)新版本要求使任務(wù)堆棧包含Os_Enter_Sum,使優(yōu)先級(jí)最低
;**         的任務(wù)只保存少量寄存器;增加注釋
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計(jì)
;** 版  本: V1.12.0
;** 日 期: 2002年12月30日
;** 描 述: 根據(jù)新版本要求更改少量代碼
;**------------------------------------------------------------------------------------------------------
;** 修改人: 陳明計(jì)
;** 版  本: V1.12.1
;** 日 期: 2002年2月5日
;** 描 述: 更正LoadCtx中OS_MAX_TASKS為8或16的bug
;**---------------------當(dāng)前版本修訂-----------------------------------------------------------------------
;** 修改人:
;** 日 期:
;** 描 述:
;**
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
#include "OS_CPU.H"
#include "OS_CFG.H"

	NAME	OS_CPU_A_ASM

?PR?OSCtxSw?OS_CPU_A                     SEGMENT CODE ;INBLOCK 
?PR?OSIntCtxSw?OS_CPU_A                  SEGMENT CODE ;INBLOCK 
?PR?LoadCtx?OS_CPU_A                     SEGMENT CODE ;INBLOCK 
?PR?C_OSCtxSw?OS_CPU_C                   SEGMENT CODE 


	EXTRN	CODE (OSMapTbl)
	EXTRN	DATA (OSFastSwap)
	EXTRN	DATA (OSTaskID)
	EXTRN	DATA (OSNextTaskID)
	EXTRN	DATA (OSTsakStackBotton)
	EXTRN	DATA (Os_Enter_Sum)
IF EN_SP2  <> 0
	EXTRN	IDATA (Sp2)
ENDIF


	PUBLIC	LoadCtx
	PUBLIC	OSIntCtxSw
	PUBLIC	OSCtxSw
	PUBLIC	STACK 

;****************************************************************************************
;?STACK	SEGMENT IDATA

?STACK		SEGMENT   IDATA

		RSEG	?STACK
STACK:                                          ;堆棧
		DS	1

;****************************************************************************************
;/*********************************************************************************************************
;** 函數(shù)名稱: LoadCtx
;** 功能描述: 任務(wù)環(huán)境恢復(fù)函數(shù)
;** 輸 入: OSTaskID,OSFastSwap
;** 輸 出 : 無(wú)
;** 全局變量: 無(wú)
;** 調(diào)用模塊: 無(wú)
;** 
;** 作 者: 陳明計(jì)
;** 日 期: 2002年2月22日
;**-------------------------------------------------------------------------------------------------------
;** 修 改: 陳明計(jì)
;** 日 期: 2002年12月2日
;**-------------------------------------------------------------------------------------------------------
;** 修 改: 陳明計(jì)
;** 日 期: 2003年2月5日
;**-------------------------------------------------------------------------------------------------------
;** 修 改:
;** 日 期:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/

	RSEG  ?PR?LoadCtx?OS_CPU_A
LoadCtx:
	USING	0
	   
    POP     Os_Enter_Sum            ;恢復(fù)關(guān)中斷計(jì)數(shù)器
                                    ;判斷是否需要恢復(fù)所有寄存器
    MOV     A,OSTaskID
    CJNE    A,#OS_MAX_TASKS,LoadCtx_0
    SJMP    LoadCtx_2
LoadCtx_0:
    MOV     DPTR,#OSMapTbl
#if OS_MAX_TASKS < 9
    MOVC    A,@A+DPTR
    ANL     A,OSFastSwap
#else
    MOV     R6,OSFastSwap
    CLR     C
    SUBB    A,#8
    JNC     LoadCtx_1
    MOV     R6,OSFastSwap + 1
    MOV     A,OSTaskID
LoadCtx_1:
    MOVC    A,@A+DPTR
    ANL     A,R6
#endif
    JNZ     LoadCtx_2
                                    ;恢復(fù)寄存器
    POP     7
    POP     6
    POP     5
    POP     4
    POP     3
    POP     2
    POP     1
    POP     0
    POP     PSW
    POP     DPL
    POP     DPH
    POP     B
    POP     ACC
LoadCtx_2:
                                    ;判斷是否需要開中斷
    INC     Os_Enter_Sum
    djnz    Os_Enter_Sum,LoadCtx_3
    SET_EA                          ;開中斷
LoadCtx_3:
    RET

;****************************************************************************************
;/*********************************************************************************************************
;** 函數(shù)名稱: OSCtxSw
;** 功能描述: 任務(wù)主動(dòng)放棄CPU環(huán)境保存函數(shù)
;** 輸 入: OSTaskID
;** 輸 出 : 無(wú)
;** 全局變量: OSFastSwap
;** 調(diào)用模塊: 無(wú)
;** 
;** 作 者: 陳明計(jì)
;** 日 期: 2002年2月22日
;**-------------------------------------------------------------------------------------------------------
;** 修 改:
;** 日 期:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
    RSEG  ?PR?OSCtxSw?OS_CPU_A
OSCtxSw:
    USING	0
                                    ;設(shè)置標(biāo)志:任務(wù)再次恢復(fù)運(yùn)行時(shí)不必恢復(fù)所有寄存器
    MOV     DPTR,#OSMapTbl
    MOV     A,OSTaskID
#if OS_MAX_TASKS < 9
    MOVC    A,@A+DPTR
    ORL     A,OSFastSwap
    MOV     OSFastSwap,A
#else
    CLR     C
    SUBB    A,#8
    JC      OSCtxSw_1
    MOVC    A,@A+DPTR
    ORL     A,OSFastSwap
    MOV     OSFastSwap,A
    LJMP    C_OSCtxSw
OSCtxSw_1:
    MOV     A,OSTaskID
    MOVC    A,@A+DPTR
    ORL     A,OSFastSwap+1
    MOV     OSFastSwap+1,A
#endif
    LJMP    C_OSCtxSw
;****************************************************************************************
;/*********************************************************************************************************
;** 函數(shù)名稱: C_OSCtxSw
;** 功能描述: 堆棧處理函數(shù)
;** 輸 入: 無(wú)
;** 輸 出 : 無(wú)
;** 全局變量: OSTaskID,OSTsakStackBotton,SP
;** 調(diào)用模塊: LoadCtx
;** 
;** 作 者: 陳明計(jì)
;** 日 期: 2002年2月22日
;**-------------------------------------------------------------------------------------------------------
;** 修 改: 陳明計(jì)
;** 日 期: 2002年12月2日
;**-------------------------------------------------------------------------------------------------------
;** 修 改:
;** 日 期:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
	RSEG  ?PR?C_OSCtxSw?OS_CPU_C
C_OSCtxSw:
    PUSH    Os_Enter_Sum            ;保存關(guān)中斷計(jì)數(shù)器
    mov     r2,sp
    
;     cp1 = (unsigned char idata *)SP +1;
    MOV     R0,SP

IF EN_SP2  <> 0
    mov     sp,#(Sp2-1)             ;堆棧指向臨時(shí)空間,允許“軟非屏蔽中斷”
ENDIF

    INC     R0
;     temp = (unsigned char )OSTsakStackBotton[OSNextTaskID+1];
    MOV     A,#LOW (OSTsakStackBotton+01H)
    ADD     A,OSNextTaskID
    MOV     R1,A
    MOV     A,@R1
    MOV     R7,A
;     cp2 = OSTsakStackBotton[OSTaskID+1];
    MOV     A,#LOW (OSTsakStackBotton+01H)
    ADD     A,OSTaskID
    MOV     R1,A
    MOV     A,@R1
    MOV     R1,A
;     if( OSNextTaskID > OSTaskID)
    MOV     A,OSNextTaskID
    SETB    C
    SUBB    A,OSTaskID
    JC      ?C0001
;     {
;         while(cp2 != (unsigned char idata *)temp)
;         {
;             *cp1++ = *cp2++;
;         }
    MOV     A,R7
    CLR     C
    SUBB    A,R1
    MOV     R6,A
?C0002:
    MOV     A,@R1
    MOV     @R0,A
    INC     R0
    INC     R1
    DJNZ    R6,?C0002
?C0003:
;         temp = OSTsakStackBotton[OSTaskID+1] - (unsigned char idata *)SP-1;
    MOV     A,#LOW (OSTsakStackBotton+1)
    ADD     A,OSTaskID
    MOV     R1,A
    MOV     A,@R1
    SETB    C
    ;SUBB    A,sp
    SUBB    A,r2
    MOV     R7,A
;         SP = (unsigned char )cp1 - 1;
    DEC     R0;
    MOV     SP,R0
;         for(i = OSTaskID+1;i < OSNextTaskID+1; i++)
;         {
;             OSTsakStackBotton[i] -= temp;
;         }
    MOV     A,OSNextTaskID
    CLR     C
    SUBB    A,OSTaskID
    MOV     R6,A
    JZ      ?C0005

    MOV     A,#LOW (OSTsakStackBotton)
    ADD     A,OSTaskID
    MOV     R1,A    
    MOV     A,R7
    CPL     A
    INC     A
    MOV     R7,A
?C0004:
    INC     R1
    MOV     A,R7
    ADD     A,@R1    
    MOV     @R1,A
    DJNZ    R6,?C0004
?C0005:
;         OSTaskID = OSNextTaskID;
    MOV     OSTaskID,OSNextTaskID
;         LoadCtx();    
    LJMP    LoadCtx
;     }
?C0001:
; 
;     if( OSNextTaskID != OSTaskID)
    MOV     A,OSNextTaskID
    XRL     A,OSTaskID
    JZ      ?C000r
;     {
;          cp2--;
;          cp1--;
;         while(cp2 != (unsigned char idata *)temp)
;         {
;             *cp2-- = *cp1--;
;         }
    ;MOV     A,R7
    ;CLR     C
    ;SUBB    A,R1
    ;MOV     R6,A
    mov     a,r0
    clr     c
    subb    a,r7
    mov     r6,a
?C0008:
    DEC     R0
    DEC     R1
    MOV     A,@R0
    MOV     @R1,A
    DJNZ    R6,?C0008
?C0009:
;         temp = OSTsakStackBotton[OSTaskID+1] - (unsigned char idata *)SP-1;
    MOV     A,#LOW (OSTsakStackBotton+01H)
    ADD     A,OSTaskID
    MOV     R1,A
    MOV     A,@R1
    SETB    C
    ;SUBB    A,SP
    SUBB    A,r2
    MOV     R7,A
;         SP = (unsigned char )OSTsakStackBotton[OSNextTaskID+1];
    MOV     A,#LOW (OSTsakStackBotton+01H)
    ADD     A,OSNextTaskID
    MOV     R1,A
    MOV     A,@R1
    MOV     SP,A
;         for(i = OSNextTaskID+1;i < OSTaskID+1; i++)
;         {
;             OSTsakStackBotton[i] += temp;
;         }

    MOV     A,OSTaskID
    CLR     C
    SUBB    A,OSNextTaskID
    JZ      ?C0011

    MOV     R6,A
    MOV     A,#LOW (OSTsakStackBotton)
    ADD     A,OSNextTaskID
    MOV     R1,A    
?C0010:
    INC     R1
    MOV     A,R7
    ADD     A,@R1    
    MOV     @R1,A
    DJNZ    R6,?C0010

?C0011:
;         OSTaskID = OSNextTaskID;        
    MOV  	OSTaskID,OSNextTaskID
;         SP--;
    DEC  	SP
;     }
?C0007:
;     LoadCtx();
    LJMP 	LoadCtx
?C000r:
IF EN_SP2  <> 0
    mov     SP,r2
ENDIF
    LJMP 	LoadCtx
;****************************************************************************************
;/*********************************************************************************************************
;** 函數(shù)名稱: OSIntCtxSw
;** 功能描述: 中斷使任務(wù)放棄CPU環(huán)境保存函數(shù)
;** 輸 入: OSTaskID
;** 輸 出 : 無(wú)
;** 全局變量: OSFastSwap
;** 調(diào)用模塊: 無(wú)
;** 
;** 作 者: 陳明計(jì)
;** 日 期: 2002年2月22日
;**-------------------------------------------------------------------------------------------------------
;** 修 改: 陳明計(jì)
;** 日 期: 2002年12月2日
;**-------------------------------------------------------------------------------------------------------
;** 修 改:
;** 日 期:
;**-------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
	RSEG  ?PR?OSIntCtxSw?OS_CPU_A
OSIntCtxSw:
	USING	0
                                        ;是否是優(yōu)先級(jí)最低任務(wù)
    MOV     A,#OS_MAX_TASKS
    XRL     A,OSTaskID
    JNZ     OSIntCtxSw_0
                                        ;是則不需要保存所有寄存器
;SP=SP-13-4                             ;4:兩層函數(shù)調(diào)用堆棧,13:寄存器數(shù)目
    MOV     A,#(-17)
    ADD     A,SP
    MOV     SP,A
                                        ;跳轉(zhuǎn)到OSCtxSw,同時(shí)通知CPU中斷處理完成
    MOV	    A, #LOW  OSCtxSw
    PUSH    ACC
    MOV	    A, #HIGH OSCtxSw
    PUSH    ACC
    RETI
                                        ;需要保存所有寄存器
OSIntCtxSw_0:
;SP=SP-4                                ;4:兩層函數(shù)調(diào)用堆棧
    MOV     A,#0FCH
    ADD     A,SP
    MOV     SP,A
                                        ;設(shè)置標(biāo)志:任務(wù)再次恢復(fù)運(yùn)行時(shí)需要恢復(fù)所有寄存器
    MOV     DPTR,#OSMapTbl
    MOV     A,OSTaskID
#if OS_MAX_TASKS < 9
    MOVC    A,@A+DPTR
    CPL     A
    ANL     A,OSFastSwap
    MOV     OSFastSwap,A    
#else
    CLR     C
    SUBB    A,#8
    JC      OSIntCtxSw_1    
    MOVC    A,@A+DPTR
    CPL     A    
    ANL     A,OSFastSwap
    MOV     OSFastSwap,A 
    SJMP    OSIntCtxSw_2
OSIntCtxSw_1:
    MOV     A,OSTaskID
    MOVC    A,@A+DPTR
    CPL     A    
    ANL     A,OSFastSwap+1
    MOV     OSFastSwap+1,A 
OSIntCtxSw_2:
#endif
                                        ;跳轉(zhuǎn)到堆棧處理,同時(shí)通知CPU中斷處理完成
    MOV	    A, #LOW  C_OSCtxSw
    PUSH    ACC
    MOV	    A, #HIGH C_OSCtxSw
    PUSH    ACC
    RETI

;****************************************************************************************
	END

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
岛国一区二区在线观看| 国产精品欧美一区二区三区| 色拍拍在线精品视频8848| 成人在线综合网站| 国产福利一区二区三区在线视频| 免费成人小视频| 美国毛片一区二区三区| 轻轻草成人在线| 日本欧美大码aⅴ在线播放| 丝袜美腿成人在线| 青青草原综合久久大伊人精品优势| 午夜视频在线观看一区| 日韩国产一二三区| 日本欧美一区二区三区乱码| 精品影院一区二区久久久| 激情久久五月天| 国产aⅴ综合色| 91免费版在线看| 欧美日韩在线直播| 日韩午夜在线播放| 久久午夜羞羞影院免费观看| 欧美国产97人人爽人人喊| 中文字幕在线观看一区二区| 亚洲午夜一二三区视频| 日韩不卡手机在线v区| 狠狠色丁香婷综合久久| 成人精品鲁一区一区二区| 色婷婷综合久久久中文一区二区 | 97aⅴ精品视频一二三区| 色就色 综合激情| 欧美日韩一级二级三级| 精品国产一区二区三区不卡| 国产欧美一区二区精品秋霞影院| 亚洲欧洲色图综合| 亚洲福利视频一区| 国产在线观看免费一区| 99久久99久久精品免费观看 | 亚洲自拍偷拍麻豆| 蜜桃av一区二区在线观看| 国产毛片精品国产一区二区三区| 色综合久久久久综合体桃花网| 欧美日韩不卡在线| 久久亚洲一级片| 亚洲一级二级在线| 国内精品免费在线观看| 92国产精品观看| 精品久久久久久最新网址| 中日韩av电影| 爽好久久久欧美精品| 粉嫩在线一区二区三区视频| 在线视频一区二区三| 26uuu精品一区二区三区四区在线| 中文字幕一区二区三区蜜月| 日本va欧美va欧美va精品| 99re8在线精品视频免费播放| 在线综合视频播放| 国产精品乱子久久久久| 乱一区二区av| 欧美三级三级三级| 国产精品久久久久影院色老大 | 韩国v欧美v亚洲v日本v| 欧美在线观看视频在线| 国产亚洲视频系列| 日韩中文欧美在线| 成人福利电影精品一区二区在线观看| 欧美剧情片在线观看| 国产精品灌醉下药二区| 老司机午夜精品| 欧美伊人久久久久久久久影院| 久久久久高清精品| 日本成人中文字幕| 91精彩视频在线观看| 欧美国产97人人爽人人喊| 精品午夜久久福利影院| 欧美精品色一区二区三区| 亚洲视频狠狠干| 福利电影一区二区| 久久日韩粉嫩一区二区三区| 偷拍一区二区三区| 一本大道久久a久久综合婷婷| 久久久精品国产免费观看同学| 日韩国产欧美在线播放| 欧亚一区二区三区| 成人欧美一区二区三区小说| 国产一区二区三区电影在线观看 | 亚洲欧美国产三级| 成+人+亚洲+综合天堂| 2021中文字幕一区亚洲| 理论电影国产精品| 欧美一卡二卡三卡| 日韩国产精品91| 欧美日韩高清一区| 亚洲成va人在线观看| 在线一区二区三区做爰视频网站| 国产欧美日本一区视频| 国产一本一道久久香蕉| 国产亚洲一本大道中文在线| 激情综合一区二区三区| 精品久久人人做人人爰| 精品综合免费视频观看| 欧美成人乱码一区二区三区| 青娱乐精品视频| 日韩三级视频在线观看| 琪琪久久久久日韩精品| 91精品国产综合久久精品app| 亚洲成人一二三| 欧美日韩一区精品| 日韩成人精品在线| 欧美一卡2卡3卡4卡| 久久成人综合网| 精品少妇一区二区三区在线视频 | 制服丝袜亚洲精品中文字幕| 五月婷婷激情综合| 91精品国产综合久久久蜜臀粉嫩| 奇米一区二区三区av| 日韩精品一区二区三区在线 | av色综合久久天堂av综合| 国产精品家庭影院| 91在线小视频| 亚洲444eee在线观看| 欧美一区二区在线视频| 九一九一国产精品| 日本一区二区三区视频视频| 99综合电影在线视频| 亚洲影院在线观看| 91精品国产欧美一区二区成人| 伦理电影国产精品| 欧美国产日本韩| 在线观看www91| 美女免费视频一区| 中文子幕无线码一区tr| 91丝袜高跟美女视频| 亚洲国产精品久久久男人的天堂| 日韩视频在线观看一区二区| 国产一区二区三区免费看| 亚洲欧美中日韩| 欧美日韩高清一区二区| 国产米奇在线777精品观看| 亚洲欧美国产三级| 日韩一区二区电影网| 国产suv一区二区三区88区| 亚洲自拍另类综合| 久久丝袜美腿综合| 日本高清不卡视频| 久久www免费人成看片高清| 国产精品女主播在线观看| 欧美少妇bbb| 国产成人免费在线| 亚洲国产视频在线| 久久久国产精品午夜一区ai换脸| 欧洲激情一区二区| 国产精品一二一区| 亚洲成a人v欧美综合天堂下载 | 亚洲一级二级三级在线免费观看| 日韩免费观看高清完整版在线观看 | 国产99精品视频| 亚洲成人自拍偷拍| 中文字幕乱码日本亚洲一区二区| 欧美精品日韩精品| 99久久99久久精品免费看蜜桃| 免费人成黄页网站在线一区二区| 中文字幕一区二区三区av| 在线不卡一区二区| 色综合天天综合在线视频| 久久精品国产亚洲一区二区三区| 亚洲同性同志一二三专区| 日韩三级高清在线| 欧美少妇xxx| 91亚洲精品一区二区乱码| 激情综合色综合久久综合| 亚洲一区在线播放| 国产精品久久久久一区二区三区| 日韩欧美国产一区在线观看| 色先锋久久av资源部| 成人精品视频一区二区三区尤物| 日本v片在线高清不卡在线观看| 亚洲男人的天堂在线观看| 国产亚洲视频系列| 日韩美女一区二区三区四区| 欧美三级视频在线| 91福利国产成人精品照片| 成人一区二区三区视频在线观看| 老司机精品视频在线| 日韩中文字幕区一区有砖一区| 一二三区精品福利视频| 一色屋精品亚洲香蕉网站| 国产日韩精品视频一区| 欧美va亚洲va国产综合| 欧美一三区三区四区免费在线看 | 色94色欧美sute亚洲线路一久| 国产精品夜夜爽| 久久电影国产免费久久电影| 丝袜诱惑制服诱惑色一区在线观看| 亚洲精品日日夜夜| 亚洲视频一区在线| 亚洲色图在线播放| 国产精品久久久久久久久果冻传媒| 国产女人18水真多18精品一级做| 久久久久国产精品麻豆ai换脸| www亚洲一区|