www.pudn.com > r&s1.10°æ±¾£«Îĵµ.rar > context.asm


        [BITS 16] 
 
 
%define  FUN(name)   global  name 
%define  VAR(name)   extern  name 
 
 ;########################################################## 
 
global  __task_init_bkp 
 
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 
        retf 
         
__task_init_bkp: 
        pop     ds 
        popf 
        retf 
 
 ;########################################################## 
FUN(___switch_to) 
___switch_to: 
        push    bp 
        mov     bp, sp 
        push    si 
        push    di 
        push    es 
 
        push    seg __task_bkp 
        push    __task_bkp 
         
        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 
 
        retf 
         
__task_bkp: 
        pop     es 
        pop     di 
        pop     si 
        pop     bp 
        retf 
 
;########################################################## 
extern ___timer_interrupt 
 
FUN(___timer_intr_s) 
___timer_intr_s: 
 
        pusha 
        push    es 
        push    ds 
 
        call    far ___timer_interrupt 
 
        pop     ds 
        pop     es 
        popa 
        iret