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

📄 context.asm

📁 realtime RTOS NEW
💻 ASM
字号:
;*
;==============================================================================
; Copyright (C) 2004 RuanHaiShen, All rights reserved.
; SUMMARY: 
;   timer service.
;
; DESCRIPTION:
;   See http://www.01s.org for documentation, latest information, license 
;   and contact details.
;   email:ruanhaishen@01s.org
;============================================================================*/
;*===========================================================================*/
[BITS 16]


%define  FUN(name)   global  name
%define  VAR(name)   extern  name

;*===========================================================================*/
FUN(___switch_start)

___switch_start:      
        mov     bp, sp
        mov     ax, [bp+4]      ; load next sp
        mov     bx, [bp+6]
        mov     ss, bx
        mov     sp, ax

        pop     es
        pop     di
        pop     si
        pop     bp
        retf

;*===========================================================================*/
FUN(___switch_to)

___switch_to:
        push    bp
        mov     bp, sp
        push    si
        push    di
        push    es

        les     bx, [bp+0x06]      ; current ptr
        mov     [es:bx+2], ss
        mov     [es:bx+0], sp

        mov     ax, [bp+0x0a]      ; load next sp
        mov     bx, [bp+0x0c]
        mov     ss, bx
        mov     sp, ax

        pop     es
        pop     di
        pop     si
        pop     bp
        retf

;*===========================================================================*/
VAR(__sched_lock)
VAR(___do_tick)
VAR(___schedule)
FUN(___timer_irs)

___timer_irs:
        cli
        pusha
        push    es
        push    ds

        mov     bx, seg __sched_lock
        mov     es, bx
        inc     byte [es:__sched_lock]
        sti
;-----------------------------------
        pushf
        push    seg timer_out
        push    timer_out
        mov     al, 0x20;
        mov     dx, 0x20;
        out     dx, al;
        call    far ___do_tick
        iret
;-----------------------------------
timer_out:
        mov     bx, seg __sched_lock
        mov     es, bx
        dec     byte [es:__sched_lock]
        call    far ___schedule

        pop     ds
        pop     es
        popa
        iret
        
;*===========================================================================*/

        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -