首页 > 代码库 > 小型多任务管理系统
小型多任务管理系统
汇编语言程序设计报告
设计题目
小型多任务管理系统
二、 设计内容
总体设计:
设计任务管理系统,对多个任务进行管理和调度,能够实现多个任务之间的切换,并保存信息。
三、 需求分析
1.功能描述:
设计一个多任务管理系统,对多个任务进行管理和调度,并可实现在多个任务之间的切换,保存信息,使任务能够通过屏幕显示运行结果或状态。
2.实现目标:
(1)可以采用公平级策略实现任务调度,即时间片轮转法,保证每个任务都能得到执行。
(2)可以采用优先级方式实现任务调度,对任务进行分级,高优先级的任务可以抢占式执行。
(3)可以创建任务队列,实现任务的有序执行。
(4)对内存和指令指针的管理,实现上下文信息的保存和切换。
(5)任务调度程序可以使用硬件中断或软件中断,通过中断服务程序来完成。
3.测试数据:
四、 概要设计
方案设计
两个十进制数加减法模块:
(1)首先从键盘分别获取两个十进制数;
(2)然后定义X,Y分别保存这两个十进制数;
(3)接着让用户选择加或者减,加则执行加法子程序,减则执行减法子程序最后定义Z保存两个数相加或相减的结果;
(4)输出Z。
显示系统时间日期模块
该模块主要完成的功能分为三个:显示当前系统的日期(包括年月日)、显示当前系统时间(具体到分秒)、退出该模块;
采用分层次的模块结构,使代码一目了然。
数字等腰三角形模块
(1)该模块主要完成一个功能:显示出来一个由数字1,2,3,4,5,6,7,8组成的等腰三角形,如下图所示:
1
212
32123
4321234
543212345
65432123456
7654321234567
876543212345678
这个子任务直接由系统调用,退出,不需要输入任何参数。
主要运用嵌套的模块结构,使代码循环有序。
总体结构图
显示
系统
时间
和日
期
小型多任务管理系统
显示
数字
等腰
三角
形
两个
十进
制数
字加
减法
两个
十进制数加减法结构图
|
|
显示系统时间和日期结构图
|
|
| ||||||
显示数字等腰三角形结构图
2、模块功能说明
模块功能
界面模块
功能:(a)提示用户已进入小型多任务管理系统;
(b)可在此界面模块进行选择需要执行的功能;
(c)如果选择数字1或按Tab键,则进入界面中的第二个模块执行add or sub功能,进行十进制数加减法计算;
(d)如果选择数字2或继续按Tab键,则进入界面中第三个模块执行input time功能,进行系统时间和日期显示功能;
(e)如果选择数字3或继续按Tab键,怎进入界面中第四个模块执行input graphical功能,进行数字等腰三角形显示功能;
(f)如果选择ESC键,则退出该系统,返回DOS。
(注:在每执行完一个模块后,按Tab键会执行下一个模块,一直循环执行,直到退出该系统)
通过截图显示功能:
两位十进制数加减法模块
功能:进行两个十进制数的加法计算;
进行两个十进制数的减法计算。
显示系统日期和时间模块
功能:通过选择D显示日期
通过选择T显示时间,
通过选择Q退出来显示用户需要的功能。
显示数字等腰三角形模块
功能:输出一个等腰三角形
五、详细设计及运行结果
流程图,函数之间相互调用的图示,程序设计主要代码,运行结果。
两个十进制数加减法功能模块
(1)流程图:
‘+’ ‘-’
|
Y
N
Y
N
(2)函数调用图:
|
‘+’ ‘-’
|
(3)程序设计主要代码:
输入模块主要代码:
X0:MOV AH,01H ;X0段的功能是接收从键盘输入的数字存入X,并在
屏幕上显示
INT21H
MOV DL,AL
CMP DL,13 ;比较DL是否为回车
JZ X1 ;如果DL为回车,则跳转至X1
MOV X[SI],DL ;如果DL不为回车,则将DL存入X
INC SI
LOOP X0
求和模块主要代码:
CLC
PUSHF
A0:MOV CX,10
MOV BX,90
A1:MOV DL,X[SI-1] ;A1的功能是实现加法运算,将X存入DL,从个位开始赋值
MOV AL,Y[DI-1]
POPF ;CF出栈
ADC AL,DL ;AL与DL相加并把结果存入AL
AAA ;处理进位
PUSHF ;CF入栈
ADD AL,30H ;将AL转成ASCⅡ码
MOV Z[BX],AL ;AL内容存入Z
DEC SI
DEC DI
DEC BX
LOOP A1 ;CX-1,并循环执行A1
INC BX
POPF
A2:CMP Z[BX],30H ;A2的功能是判断Z的高位是否为0,如果为0,则不显示
JNZ A3 ;如果Z的高位不为0,则跳转至A3
INC BX ;如果Z的高位为0,则BX+1
LOOP A2
A3:CURS 6,40 ;CURS为宏定义的光标定位函数
MSG INFOR3
MSG Z[BX]
求差模块主要代码:
CLC ;CF清零
PUSHF ;CF内容入栈
CALL CHANGE
CMP CX,0
JE NEXT1
CMP BX,‘<‘
JE A00 X<Y执行A00
CMP BX,‘>‘
JE B00 X>Y执行B00
NEXT1:CURS 6,40 X=Y输出0
MSG INFOR3
MSG LING
X>Y则执行:
B00:MOV CX,10
MOV BX,90
B11:
MOV AL,X[SI-1] ;B11的功能是实现加法运算,将X存入DL,从个位开始赋值
MOV DL,Y[DI-1]
POPF ;CF出栈
SBB AL,DL ;AL与DL相加并把结果存入AL
AAS ;处理进位
PUSHF ;CF入栈
ADD AL,30H ;将AL转成ASCⅡ码
MOV Z[BX],AL ;AL内容存入Z
DEC SI
DEC DI
DEC BX
LOOP B11
INC BX
POPF
B22:CMP Z[BX],30H ;B22的功能是判断Z的高位是否为0,如果为0,则不显示
JNZ B33 ;如果Z的高位不为0,则跳转至A3
INC BX ;如果Z的高位为0,则BX+1
LOOP B22
B33:
CURS 6,40
MSG INFOR3
MSG Z[BX]
X<Y时:
交换X与Y的位置,即用Z=Y-X,输出的时候在Z的前面加个负号
运行结果:
显示系统日期和时间模块
(1)流程图
(2)程序设计主要代码:
数据定义:
STR DB ‘ |********** Welcome! **********|‘,0DH,0AH
DB ‘| |* *|‘,0DH,0AH
DB ‘| |* This is a display program. *|‘,0DH,0AH
DB ‘| |* D: display Date *|‘,0DH,0AH
DB ‘| |* T: display Time *|‘,0DH,0AH
DB ‘| |* Q: Quit *|‘,0DH,0AH
DB ‘| |* *|‘,0DH,0AH
DB ‘| |********************************|‘,0DH,0AH
STR1 DB ‘| Please input a char: $‘
注:(a)以上代码是进入这个子任务时,显示在当前模块的菜单。
(b)这个菜单指示用户按键盘上键,选择所要完成的功能,
例如:D当前系统日期、T当前系统时间,Q退出这个子任务。菜单下有一条提示命令,光标定位在当前,提示用户输入要选择功能的键。
MSG2DB ‘INPUT ERROR!$‘
(c)当输入错误时,自动提示:INPUT ERROR!
DATEDISPLAYPROC NEAR ;显示当前系统日期
MOV AH,2AH
INT 21H
MOV AX,CX
MOV BX,10
LEA SI,DATEDIS+4
MOV CX,4
PUSH DX
TAB:
XOR DX,DX
DIV BX
ADD DL,30H
MOV [SI],DL
DEC SI
LOOP TAB
POP DX
MOVAL,DL
XOR AH,AH
DIV BL
ADD AX,3030H
LEA SI,DATEDIS+9
MOV [SI],AX
MOV AL,DH
XOR AH,AH
DIV BL
ADD AX,3030H
LEA SI,DATEDIS+6
MOV [SI],AX
CURS 21,5
MSG DATEDIS
RET
DATEDISPLAYENDP
(3)运行结果
通过截图显示功能:
显示等腰三角形模块
流程图:
准备产生空格,连续产生空格,调用REP1
是
否
|
否
自动回车换行
(2)程序主要代码
rep4: ;控制运行总行数
cmp cx,8
je one
cmp cx,7
je two
cmp cx,6
je three
cmp cx,5
je four
cmp cx,4
je five
cmp cx,3
je six
cmp cx,2
je seven
cmp cx,1
je eight
one:
curs 12,50
jmp continue
two:
curs 13,50
jmp continue
three:
curs 14,50
jmp continue
four:
curs 15,50
jmp continue
five:
curs 16,50
jmp continue
six:
curs 17,50
jmp continue
seven:
curs 18,50
jmp continue
eight:
curs 19,50
jmp continue
continue:
push ax
push bx
push cx
sub al,bl ;
jna left
mov cx,ax
mov ah,2
mov dl,20h
rep1: ;rep1在rep4控制每行产生的空格数
int 21h
loop rep1
left:mov cx,bx
mov ah,2
mov dl,30h
add dl,bl
rep2: ;rep2在rep4内,与rep1并列控制以1为界,产生左半边的逆序排列的数字
int 21h
dec dl
loop rep2
sub bl,1
jna next
mov cx,bx
add dl,2
rep3: ;rep3在rep4内,与rep1,rep2并列控制以1为界,产生右半边的升序排列的数字
int 21h
inc dl
loop rep3
next:mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop cx
pop bx
pop ax
inc bl
loop rep4
(3)运行结果:
注:程序编译连接运行截图如下:
六、调试情况,设计技巧及体会
1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。
2、在设计过程中的感受。
1.评价:
(1)通过本次汇编语言大赛,我们实现了小型多任务管理系统,同时,对于本次比赛中的要求基本都得到实现。
(2)对于这次比赛,我们也付出了很多,通过在网上查找相关资料,在图书馆翻阅相关书籍来了解多任务管理系统的具体要求及实现,三个人相互合作,共同努力。
(3)我们的代码具有高效性,可读性,通过多个子程序调用和宏指令等实现功能,将其写成多个模块,方便调用。
2.合理之处:
(1)可以采用优先级方式实现任务调度,对任务进行分级,高优先级的任务可以抢占式执行。
(2)可以创建任务队列,实现任务的有序执行。
(3)对内存和指令指针的管理,实现上下文信息的保存和切换。
(4)任务调度程序可以使用硬件中断或软件中断,通过中断服务程序来完成。
(5)可以采用分屏的方式显示运行结果,将显示器的屏幕划分成大小相等的4个显示子窗口。在各个子显示窗口中显示不同任务运行结果,按Tab键或进行数字输入选择切换不同的子窗口。整个系统按ESC键退出,返回DOS操作系统界面。
(6)实现的任务有:计算十进制数据相加求和,相减求差;画出等腰三角形;进行系统日期,时间输出。
3.不足之处:
未能实现通过时间片轮转法切换界面,而是通过Tab键来实现任务的切换。
改进方案:
(1)为每个进程被分配一个时间段;
(2)如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个任务;
(3)如果任务在时间片结束前阻塞或结束,则CPU当即进行切换。
5.感受:
(1)通过本次汇编语言大赛,我们实现了小型多任务管理系统,同时,对汇编语言的编写,运行,调试功能,有了充分的了解,并熟练掌握。
(2)对于这次比赛,我们也付出了很多,通过在网上查找相关资料,在图书馆翻阅相关书籍来了解多任务管理系统的具体要求及实现,三个人相互合作,共同努力。
(3)在本次比赛中,我们学到了比平时更多的知识,同时,也充分的应用了课堂上老师所讲的知识。
(4)我们对于技术上的知识得到了充分的应该,这让我们不局限与书本知识,而是去真的的进行实践操作,让我们的很大的提高。
附件:源程序清单
(注:源程序清单只需提交电子版,不需提交打印版)
汇编语言程序设计报告
设计题目
小型多任务管理系统
二、 设计内容
总体设计:
设计任务管理系统,对多个任务进行管理和调度,能够实现多个任务之间的切换,并保存信息。
三、 需求分析
1.功能描述:
设计一个多任务管理系统,对多个任务进行管理和调度,并可实现在多个任务之间的切换,保存信息,使任务能够通过屏幕显示运行结果或状态。
2.实现目标:
(1)可以采用公平级策略实现任务调度,即时间片轮转法,保证每个任务都能得到执行。
(2)可以采用优先级方式实现任务调度,对任务进行分级,高优先级的任务可以抢占式执行。
(3)可以创建任务队列,实现任务的有序执行。
(4)对内存和指令指针的管理,实现上下文信息的保存和切换。
(5)任务调度程序可以使用硬件中断或软件中断,通过中断服务程序来完成。
3.测试数据:
四、 概要设计
方案设计
两个十进制数加减法模块:
(1)首先从键盘分别获取两个十进制数;
(2)然后定义X,Y分别保存这两个十进制数;
(3)接着让用户选择加或者减,加则执行加法子程序,减则执行减法子程序最后定义Z保存两个数相加或相减的结果;
(4)输出Z。
显示系统时间日期模块
该模块主要完成的功能分为三个:显示当前系统的日期(包括年月日)、显示当前系统时间(具体到分秒)、退出该模块;
采用分层次的模块结构,使代码一目了然。
数字等腰三角形模块
(1)该模块主要完成一个功能:显示出来一个由数字1,2,3,4,5,6,7,8组成的等腰三角形,如下图所示:
1
212
32123
4321234
543212345
65432123456
7654321234567
876543212345678
这个子任务直接由系统调用,退出,不需要输入任何参数。
主要运用嵌套的模块结构,使代码循环有序。
总体结构图
显示
系统
时间
和日
期
小型多任务管理系统
显示
数字
等腰
三角
形
两个
十进
制数
字加
减法
两个
十进制数加减法结构图
主程序Main
(输入X和Y,判断执行加法或减法)
子程序qiuhe
(Z=X+Y,输出Z)
显示系统时间和日期结构图
主程序MAIN
(显示界面提示信息,根据键输入的字符调用各子程序)
子程序DATEDISPLAY
(调用DOS的2AH功能,取系统当前日期,将日期转换成对应的ASCII码值并显示)
子程序DATEDISPLAY
(调用DOS的2AH功能,取系统当前日期,将日期转换成对应的ASCII码值并显示)
显示数字等腰三角形结构图
2、模块功能说明
模块功能
界面模块
功能:(a)提示用户已进入小型多任务管理系统;
(b)可在此界面模块进行选择需要执行的功能;
(c)如果选择数字1或按Tab键,则进入界面中的第二个模块执行add or sub功能,进行十进制数加减法计算;
(d)如果选择数字2或继续按Tab键,则进入界面中第三个模块执行input time功能,进行系统时间和日期显示功能;
(e)如果选择数字3或继续按Tab键,怎进入界面中第四个模块执行input graphical功能,进行数字等腰三角形显示功能;
(f)如果选择ESC键,则退出该系统,返回DOS。
(注:在每执行完一个模块后,按Tab键会执行下一个模块,一直循环执行,直到退出该系统)
通过截图显示功能:
两位十进制数加减法模块
功能:进行两个十进制数的加法计算;
进行两个十进制数的减法计算。
显示系统日期和时间模块
功能:通过选择D显示日期
通过选择T显示时间,
通过选择Q退出来显示用户需要的功能。
显示数字等腰三角形模块
功能:输出一个等腰三角形
五、详细设计及运行结果
流程图,函数之间相互调用的图示,程序设计主要代码,运行结果。
两个十进制数加减法功能模块
(1)流程图:
‘+’ ‘-’
Z=X+Y
Y
N
Y
N
(2)函数调用图:
主程序Main
(输入X和Y,判断执行加法或减法)
‘+’ ‘-’
子程序qiuhe
(Z=X+Y,输出Z)
(3)程序设计主要代码:
输入模块主要代码:
X0:MOV AH,01H ;X0段的功能是接收从键盘输入的数字存入X,并在
屏幕上显示
INT21H
MOV DL,AL
CMP DL,13 ;比较DL是否为回车
JZ X1 ;如果DL为回车,则跳转至X1
MOV X[SI],DL ;如果DL不为回车,则将DL存入X
INC SI
LOOP X0
求和模块主要代码:
CLC
PUSHF
A0:MOV CX,10
MOV BX,90
A1:MOV DL,X[SI-1] ;A1的功能是实现加法运算,将X存入DL,从个位开始赋值
MOV AL,Y[DI-1]
POPF ;CF出栈
ADC AL,DL ;AL与DL相加并把结果存入AL
AAA ;处理进位
PUSHF ;CF入栈
ADD AL,30H ;将AL转成ASCⅡ码
MOV Z[BX],AL ;AL内容存入Z
DEC SI
DEC DI
DEC BX
LOOP A1 ;CX-1,并循环执行A1
INC BX
POPF
A2:CMP Z[BX],30H ;A2的功能是判断Z的高位是否为0,如果为0,则不显示
JNZ A3 ;如果Z的高位不为0,则跳转至A3
INC BX ;如果Z的高位为0,则BX+1
LOOP A2
A3:CURS 6,40 ;CURS为宏定义的光标定位函数
MSG INFOR3
MSG Z[BX]
求差模块主要代码:
CLC ;CF清零
PUSHF ;CF内容入栈
CALL CHANGE
CMP CX,0
JE NEXT1
CMP BX,‘<‘
JE A00 X<Y执行A00
CMP BX,‘>‘
JE B00 X>Y执行B00
NEXT1:CURS 6,40 X=Y输出0
MSG INFOR3
MSG LING
X>Y则执行:
B00:MOV CX,10
MOV BX,90
B11:
MOV AL,X[SI-1] ;B11的功能是实现加法运算,将X存入DL,从个位开始赋值
MOV DL,Y[DI-1]
POPF ;CF出栈
SBB AL,DL ;AL与DL相加并把结果存入AL
AAS ;处理进位
PUSHF ;CF入栈
ADD AL,30H ;将AL转成ASCⅡ码
MOV Z[BX],AL ;AL内容存入Z
DEC SI
DEC DI
DEC BX
LOOP B11
INC BX
POPF
B22:CMP Z[BX],30H ;B22的功能是判断Z的高位是否为0,如果为0,则不显示
JNZ B33 ;如果Z的高位不为0,则跳转至A3
INC BX ;如果Z的高位为0,则BX+1
LOOP B22
B33:
CURS 6,40
MSG INFOR3
MSG Z[BX]
X<Y时:
交换X与Y的位置,即用Z=Y-X,输出的时候在Z的前面加个负号
运行结果:
显示系统日期和时间模块
(1)流程图
(2)程序设计主要代码:
数据定义:
STR DB ‘ |********** Welcome! **********|‘,0DH,0AH
DB ‘| |* *|‘,0DH,0AH
DB ‘| |* This is a display program. *|‘,0DH,0AH
DB ‘| |* D: display Date *|‘,0DH,0AH
DB ‘| |* T: display Time *|‘,0DH,0AH
DB ‘| |* Q: Quit *|‘,0DH,0AH
DB ‘| |* *|‘,0DH,0AH
DB ‘| |********************************|‘,0DH,0AH
STR1 DB ‘| Please input a char: $‘
注:(a)以上代码是进入这个子任务时,显示在当前模块的菜单。
(b)这个菜单指示用户按键盘上键,选择所要完成的功能,
例如:D当前系统日期、T当前系统时间,Q退出这个子任务。菜单下有一条提示命令,光标定位在当前,提示用户输入要选择功能的键。
MSG2DB ‘INPUT ERROR!$‘
(c)当输入错误时,自动提示:INPUT ERROR!
DATEDISPLAYPROC NEAR ;显示当前系统日期
MOV AH,2AH
INT 21H
MOV AX,CX
MOV BX,10
LEA SI,DATEDIS+4
MOV CX,4
PUSH DX
TAB:
XOR DX,DX
DIV BX
ADD DL,30H
MOV [SI],DL
DEC SI
LOOP TAB
POP DX
MOVAL,DL
XOR AH,AH
DIV BL
ADD AX,3030H
LEA SI,DATEDIS+9
MOV [SI],AX
MOV AL,DH
XOR AH,AH
DIV BL
ADD AX,3030H
LEA SI,DATEDIS+6
MOV [SI],AX
CURS 21,5
MSG DATEDIS
RET
DATEDISPLAYENDP
(3)运行结果
通过截图显示功能:
显示等腰三角形模块
流程图:
准备产生空格,连续产生空格,调用REP1
是
否
REP3函数从小到大的数(右边)
否
自动回车换行
(2)程序主要代码
rep4: ;控制运行总行数
cmp cx,8
je one
cmp cx,7
je two
cmp cx,6
je three
cmp cx,5
je four
cmp cx,4
je five
cmp cx,3
je six
cmp cx,2
je seven
cmp cx,1
je eight
one:
curs 12,50
jmp continue
two:
curs 13,50
jmp continue
three:
curs 14,50
jmp continue
four:
curs 15,50
jmp continue
five:
curs 16,50
jmp continue
six:
curs 17,50
jmp continue
seven:
curs 18,50
jmp continue
eight:
curs 19,50
jmp continue
continue:
push ax
push bx
push cx
sub al,bl ;
jna left
mov cx,ax
mov ah,2
mov dl,20h
rep1: ;rep1在rep4控制每行产生的空格数
int 21h
loop rep1
left:mov cx,bx
mov ah,2
mov dl,30h
add dl,bl
rep2: ;rep2在rep4内,与rep1并列控制以1为界,产生左半边的逆序排列的数字
int 21h
dec dl
loop rep2
sub bl,1
jna next
mov cx,bx
add dl,2
rep3: ;rep3在rep4内,与rep1,rep2并列控制以1为界,产生右半边的升序排列的数字
int 21h
inc dl
loop rep3
next:mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop cx
pop bx
pop ax
inc bl
loop rep4
(3)运行结果:
注:程序编译连接运行截图如下:
六、调试情况,设计技巧及体会
1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。
2、在设计过程中的感受。
1.评价:
(1)通过本次汇编语言大赛,我们实现了小型多任务管理系统,同时,对于本次比赛中的要求基本都得到实现。
(2)对于这次比赛,我们也付出了很多,通过在网上查找相关资料,在图书馆翻阅相关书籍来了解多任务管理系统的具体要求及实现,三个人相互合作,共同努力。
(3)我们的代码具有高效性,可读性,通过多个子程序调用和宏指令等实现功能,将其写成多个模块,方便调用。
2.合理之处:
(1)可以采用优先级方式实现任务调度,对任务进行分级,高优先级的任务可以抢占式执行。
(2)可以创建任务队列,实现任务的有序执行。
(3)对内存和指令指针的管理,实现上下文信息的保存和切换。
(4)任务调度程序可以使用硬件中断或软件中断,通过中断服务程序来完成。
(5)可以采用分屏的方式显示运行结果,将显示器的屏幕划分成大小相等的4个显示子窗口。在各个子显示窗口中显示不同任务运行结果,按Tab键或进行数字输入选择切换不同的子窗口。整个系统按ESC键退出,返回DOS操作系统界面。
(6)实现的任务有:计算十进制数据相加求和,相减求差;画出等腰三角形;进行系统日期,时间输出。3.不足之处:
未能实现通过时间片轮转法切换界面,而是通过Tab键来实现任务的切换。
改进方案:
(1)为每个进程被分配一个时间段;
(2)如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个任务;
(3)如果任务在时间片结束前阻塞或结束,则CPU当即进行切换。
5.感受:
(1)通过本次汇编语言大赛,我们实现了小型多任务管理系统,同时,对汇编语言的编写,运行,调试功能,有了充分的了解,并熟练掌握。
(2)对于这次比赛,我们也付出了很多,通过在网上查找相关资料,在图书馆翻阅相关书籍来了解多任务管理系统的具体要求及实现,三个人相互合作,共同努力。
(3)在本次比赛中,我们学到了比平时更多的知识,同时,也充分的应用了课堂上老师所讲的知识。
(4)我们对于技术上的知识得到了充分的应该,这让我们不局限与书本知识,而是去真的的进行实践操作,让我们的很大的提高。
附件:源程序清单
(注:源程序清单只需提交电子版,不需提交打印版)
小型多任务管理系统