;定义了两个宏!!
TIMEOFF macro
in al,21h
and al,0feh
or al,01
out 21h,al
endm
TIMEON macro
in al,21h
and al,0feh
out 21h,al
endm
DATAS SEGMENT
spmain dw ?
ssmain dw ?
spsub1 dw ?
sssub1 dw ?
spsub2 dw ?
sssub2 dw ?
spsub3 dw ?
sssub3 dw ?
spsub4 dw ?
sssub4 dw ?
spsub5 dw ?
sssub5 dw ?
spcst dw ?
sscst dw ?
task_cur db 0
issuspend db 1fh ;检测任务状态!低5位对应5个任务,为1代表就绪,为0代表挂起!!第六个切换任务任何时候都运行
cur_input db 0 ;当前输入任务,只有当前输入任务是正在运行的任务,那么此任务才有输入功能!
input_task db 0 ;为1代表当前为输入状态
count1 dw ? ;记录每秒任务1运行的次数!
count2 dw ? ;记录每秒任务2运行的次数!
count3 dw ? ;记录每秒任务3运行的次数!
count4 dw ? ;记录每秒任务4运行的次数!
count5 dw ? ;记录每秒任务5运行的次数!
count dw 0 ;记录ppp的运行次数,预设滴答为364/s,固20次调用一次系统时间中断!
ccount dw 0 ;0-20
change dw 0 ;
sign_out db 0;1为退出信号
infor1 db 'Task1 is running!',0ah,0dh,'$'
infor2 db 'Task2 is running!',0ah,0dh,'$'
infor3 db 'Task3 is running!',0ah,0dh,'$'
infor4 db 'Task4 is running!',0ah,0dh,'$'
infor5 db 'Task5 is running!',0ah,0dh,'$'
DATAS ENDS
STACKS SEGMENT
dw 99 dup(?)
smain dw ?
dw 99 dup(?)
ssub1 dw ?
dw 99 dup(?)
ssub2 dw ?
dw 99 dup(?)
ssub3 dw ?
dw 99 dup(?)
ssub4 dw ?
dw 99 dup(?)
ssub5 dw ?
dw 99 dup(?)
scst dw ?
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,stacks
mov ss,ax
mov sp,offset smain
;此处输入代码段代码
push ds
mov dx,offset addtask ;设置新增任务函数
mov ax,cs
mov ds,ax
mov ah,25h ;设置中断
mov al,82h
int 21h
pop ds
;通过以下方式注册5个函数!!
pushf
push cs
call sub1
pushf
push cs
call sub2
pushf
push cs
call sub3
pushf
push cs
call sub4
push
TIMEOFF macro
in al,21h
and al,0feh
or al,01
out 21h,al
endm
TIMEON macro
in al,21h
and al,0feh
out 21h,al
endm
DATAS SEGMENT
spmain dw ?
ssmain dw ?
spsub1 dw ?
sssub1 dw ?
spsub2 dw ?
sssub2 dw ?
spsub3 dw ?
sssub3 dw ?
spsub4 dw ?
sssub4 dw ?
spsub5 dw ?
sssub5 dw ?
spcst dw ?
sscst dw ?
task_cur db 0
issuspend db 1fh ;检测任务状态!低5位对应5个任务,为1代表就绪,为0代表挂起!!第六个切换任务任何时候都运行
cur_input db 0 ;当前输入任务,只有当前输入任务是正在运行的任务,那么此任务才有输入功能!
input_task db 0 ;为1代表当前为输入状态
count1 dw ? ;记录每秒任务1运行的次数!
count2 dw ? ;记录每秒任务2运行的次数!
count3 dw ? ;记录每秒任务3运行的次数!
count4 dw ? ;记录每秒任务4运行的次数!
count5 dw ? ;记录每秒任务5运行的次数!
count dw 0 ;记录ppp的运行次数,预设滴答为364/s,固20次调用一次系统时间中断!
ccount dw 0 ;0-20
change dw 0 ;
sign_out db 0;1为退出信号
infor1 db 'Task1 is running!',0ah,0dh,'$'
infor2 db 'Task2 is running!',0ah,0dh,'$'
infor3 db 'Task3 is running!',0ah,0dh,'$'
infor4 db 'Task4 is running!',0ah,0dh,'$'
infor5 db 'Task5 is running!',0ah,0dh,'$'
DATAS ENDS
STACKS SEGMENT
dw 99 dup(?)
smain dw ?
dw 99 dup(?)
ssub1 dw ?
dw 99 dup(?)
ssub2 dw ?
dw 99 dup(?)
ssub3 dw ?
dw 99 dup(?)
ssub4 dw ?
dw 99 dup(?)
ssub5 dw ?
dw 99 dup(?)
scst dw ?
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,stacks
mov ss,ax
mov sp,offset smain
;此处输入代码段代码
push ds
mov dx,offset addtask ;设置新增任务函数
mov ax,cs
mov ds,ax
mov ah,25h ;设置中断
mov al,82h
int 21h
pop ds
;通过以下方式注册5个函数!!
pushf
push cs
call sub1
pushf
push cs
call sub2
pushf
push cs
call sub3
pushf
push cs
call sub4
push