www.pudn.com > MessageQueue.zip > HAL.ASM


; 
;This module defines the the task switching function. 
; 
;Copyright (C) 2004  Liu Ge 
; 
;This program is free software; you can redistribute it and/or 
;modify it under the terms of the GNU General Public License 
;as published by the Free Software Foundation; either version 2 
;of the License, or (at your option) any later version. 
; 
;This program is distributed in the hope that it will be useful, 
;but WITHOUT ANY WARRANTY; without even the implied warranty of 
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
;GNU General Public License for more details. 
; 
;You should have received a copy of the GNU General Public License 
;along with this program; if not, write to the Free Software 
;Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
 
    .8086 
    .MODEL TINY 
 
public ___TaskSwitch 
public ___SystemLock 
public ___SystemUnlock 
 
extrn ___TaskSchedule:near 
extrn _SchedulerStack:word 
 
    .CODE 
     
___TaskSwitch proc 
    pushf 
    push ax 
    push bx 
    push cx 
    push dx 
    push si 
    push di 
    push bp 
 
    mov ax, sp 
    cli ; disable interrupt 
    mov  sp, offset _SchedulerStack + 1024 
    push ax  ;  push old sp 
 
    call ___TaskSchedule 
 
    mov sp, ax 
    sti ; enable interrupt 
 
    pop bp 
    pop di 
    pop si 
    pop dx 
    pop cx 
    pop bx 
    pop ax 
    popf 
    ret 
___TaskSwitch endp 
 
___SystemLock proc 
    cli 
    ret 
___SystemLock endp 
 
___SystemUnlock proc 
    sti 
    ret 
___SystemUnlock endp 
 
    END