📄 context.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 + -