用8086汇编写的多线程任务的程序!

该博客介绍了如何使用8086汇编语言编写一个多线程任务调度程序,包括宏定义、任务状态检测和堆栈管理。程序通过中断向量注册各个任务,每个任务都有自己的堆栈,并在时钟中断中进行任务切换。同时,程序还展示了如何处理输入和显示任务运行状态。
摘要由CSDN通过智能技术生成
 ;定义了两个宏!!
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值