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