首页 > 代码库 > 小型多任务管理系统

小型多任务管理系统



         汇编语言程序设计报告

  1. 设计题目

    小型多任务管理系统

     

    二、    设计内容

          总体设计:

    设计任务管理系统,对多个任务进行管理和调度,能够实现多个任务之间的切换,并保存信息。

     

    三、 需求分析

    1.功能描述:

    设计一个多任务管理系统,对多个任务进行管理和调度,并可实现在多个任务之间的切换,保存信息,使任务能够通过屏幕显示运行结果或状态。

    2.实现目标:

    1可以采用公平级策略实现任务调度,即时间片轮转法,保证每个任务都能得到执行。

    2)可以采用优先级方式实现任务调度,对任务进行分级,高优先级的任务可以抢占式执行。

    3)可以创建任务队列,实现任务的有序执行。

    4)对内存和指令指针的管理,实现上下文信息的保存和切换。

    5)任务调度程序可以使用硬件中断或软件中断,通过中断服务程序来完成。

    3.测试数据:

    技术分享

     

    技术分享

     

     

    四、 概要设计

     

  1. 方案设计

     

    两个十进制数加减法模块:

    1)首先从键盘分别获取两个十进制数;

    2)然后定义X,Y分别保存这两个十进制数;

    3)接着让用户选择加或者减,加则执行加法子程序,减则执行减法子程序最后定义Z保存两个数相加或相减的结果;

    4)输出Z

     

    显示系统时间日期模块

  1. 该模块主要完成的功能分为三个:显示当前系统的日期(包括年月日)、显示当前系统时间(具体到分秒)、退出该模块;

  2. 采用分层次的模块结构,使代码一目了然。

     

    数字等腰三角形模块

    1)该模块主要完成一个功能:显示出来一个由数字1,2,3,4,5,6,7,8组成的等腰三角形,如下图所示:

                               

     

       1

                                 212

                                32123

                               4321234

                              543212345

                             65432123456

                            7654321234567

                           876543212345678

  3. 这个子任务直接由系统调用,退出,不需要输入任何参数。

  4. 主要运用嵌套的模块结构,使代码循环有序。

  5.  

     

     

    总体结构图

                 

    显示

    系统

    时间

    和日

     

     
     

    小型多任务管理系统

     

    显示

    数字

    等腰

    三角

     

    两个

    十进

    制数

    字加

    减法

     

    技术分享技术分享技术分享技术分享

     


            

 

 

 

 

 
 技术分享

 

 

 

 

 

 

 

 

 

 

 

 

 

 


两个

 

 

 

 

 

 

 

十进制数加减法结构图

 

主程序Main

(输入XY,判断执行加法或减法)

 

                           

        
  技术分享
   技术分享
 
   技术分享
 
 

子程序qiuhe

Z=X+Y,输出Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


显示系统时间和日期结构图

 

主程序MAIN

(显示界面提示信息,根据键输入的字符调用各子程序)

 

 

                 

技术分享技术分享技术分享      

      
  技术分享
 
 

子程序DATEDISPLAY 

(调用DOS2AH功能,取系统当前日期,将日期转换成对应的ASCII码值并显示)

 
 

子程序DATEDISPLAY 

(调用DOS2AH功能,取系统当前日期,将日期转换成对应的ASCII码值并显示)

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


显示数字等腰三角形结构图

  

技术分享 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2、模块功能说明

模块功能

 

  1. 界面模块

    功能:(a)提示用户已进入小型多任务管理系统;

        b)可在此界面模块进行选择需要执行的功能;

                  c)如果选择数字1或按Tab键,则进入界面中的第二个模块执行add or sub功能,进行十进制数加减法计算;

                  d)如果选择数字2或继续按Tab键,则进入界面中第三个模块执行input time功能,进行系统时间和日期显示功能;

                  e)如果选择数字3或继续按Tab键,怎进入界面中第四个模块执行input graphical功能,进行数字等腰三角形显示功能;

                  f)如果选择ESC键,则退出该系统,返回DOS

              (注:在每执行完一个模块后,按Tab键会执行下一个模块,一直循环执行,直到退出该系统)

     

    通过截图显示功能:

     

    技术分享

     

  2. 两位十进制数加减法模块

    功能:进行两个十进制数的加法计算;

    进行两个十进制数的减法计算。

     

  3. 显示系统日期和时间模块

    功能:通过选择D显示日期

    通过选择T显示时间,

    通过选择Q退出来显示用户需要的功能。

  4. 显示数字等腰三角形模块

    功能:输出一个等腰三角形

     

    五、详细设计及运行结果

     

    流程图,函数之间相互调用的图示,程序设计主要代码,运行结果。

  1. 两个十进制数加减法功能模块

    1)流程图:

     
     技术分享

     

     

     

     

     

     

     

     

     

     

     

     

     

     


              ‘+’                                                        ‘-’

    
 技术分享 技术分享
 

 

 


技术分享

 Z=X+Y

 

                                                                                                                                       Y

 
 技术分享

 


技术分享                                                                                                            N

 
 技术分享

 

 


技术分享                                                                   Y

                                                                                                           N

技术分享 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2)函数调用图:

 

 

 

        主程序Main

(输入XY,判断执行加法或减法)

 

                                ‘+’                                                                          ‘-’

技术分享技术分享                                                                                                              

 

 

 

 

 

    
  技术分享
 

        子程序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               ;ALDL相加并把结果存入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               ;ALDL相加并把结果存入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时:

交换XY的位置,即用Z=Y-X,输出的时候在Z的前面加个负号

 

  1. 运行结果:

     

    技术分享

     

    技术分享

     

    技术分享

     

     

  1. 显示系统日期和时间模块

     

    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)运行结果

     

     

    通过截图显示功能:

     

     

    技术分享

     

     

     

     

    技术分享

     

     

     

     

     

             技术分享

     

     

     

     

  2. 显示等腰三角形模块

     

     

  1. 流程图:

     

     

     

     

     

     

     

     

    技术分享  

     

     
     技术分享

     

     

     

     

     


  1. 技术分享

    准备产生空格,连续产生空格,调用REP1

     

        

  2.     
     技术分享
      技术分享
     

     


 
 技术分享

 

 

 

 

 


技术分享

REP3函数从小到大的数(右边)

 

技术分享               

  1.       
     技术分享
     
      技术分享
     
      

       自动回车换行

     

     

     

     

     

     


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:    rep1rep4控制每行产生的空格数

int 21h

loop rep1

left:mov cx,bx 

mov ah,2

mov dl,30h 

add dl,bl

rep2:   rep2rep4内,与rep1并列控制以1为界,产生左半边的逆序排列的数字

int 21h

dec dl

loop rep2

sub bl,1 

jna next 

mov cx,bx  

add dl,2 

rep3:   rep3rep4内,与rep1rep2并列控制以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. 改进方案:

    1)为每个进程被分配一个时间段;

    2)如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个任务;

    3)如果任务在时间片结束前阻塞或结束,则CPU当即进行切换

    5.感受:

    1)通过本次汇编语言大赛,我们实现了小型多任务管理系统,同时,对汇编语言的编写,运行,调试功能,有了充分的了解,并熟练掌握。

    2)对于这次比赛,我们也付出了很多,通过在网上查找相关资料,在图书馆翻阅相关书籍来了解多任务管理系统的具体要求及实现,三个人相互合作,共同努力。

    3)在本次比赛中,我们学到了比平时更多的知识,同时,也充分的应用了课堂上老师所讲的知识。

    4)我们对于技术上的知识得到了充分的应该,这让我们不局限与书本知识,而是去真的的进行实践操作,让我们的很大的提高。

     

    附件:源程序清单

    (注:源程序清单只需提交电子版,不需提交打印版)

     

     

     

     

             汇编语言程序设计报告

    1. 设计题目

      小型多任务管理系统

       

      二、    设计内容

            总体设计:

      设计任务管理系统,对多个任务进行管理和调度,能够实现多个任务之间的切换,并保存信息。

       

      三、 需求分析

      1.功能描述:

      设计一个多任务管理系统,对多个任务进行管理和调度,并可实现在多个任务之间的切换,保存信息,使任务能够通过屏幕显示运行结果或状态。

      2.实现目标:

      1可以采用公平级策略实现任务调度,即时间片轮转法,保证每个任务都能得到执行。

      2)可以采用优先级方式实现任务调度,对任务进行分级,高优先级的任务可以抢占式执行。

      3)可以创建任务队列,实现任务的有序执行。

      4)对内存和指令指针的管理,实现上下文信息的保存和切换。

      5)任务调度程序可以使用硬件中断或软件中断,通过中断服务程序来完成。

      3.测试数据:

      技术分享

       

      技术分享

       

       

      四、 概要设计

       

    1. 方案设计

       

      两个十进制数加减法模块:

      1)首先从键盘分别获取两个十进制数;

      2)然后定义X,Y分别保存这两个十进制数;

      3)接着让用户选择加或者减,加则执行加法子程序,减则执行减法子程序最后定义Z保存两个数相加或相减的结果;

      4)输出Z

       

      显示系统时间日期模块

    1. 该模块主要完成的功能分为三个:显示当前系统的日期(包括年月日)、显示当前系统时间(具体到分秒)、退出该模块;

    2. 采用分层次的模块结构,使代码一目了然。

       

      数字等腰三角形模块

      1)该模块主要完成一个功能:显示出来一个由数字1,2,3,4,5,6,7,8组成的等腰三角形,如下图所示:

                                 

       

         1

                                   212

                                  32123

                                 4321234

                                543212345

                               65432123456

                              7654321234567

                             876543212345678

    3. 这个子任务直接由系统调用,退出,不需要输入任何参数。

    4. 主要运用嵌套的模块结构,使代码循环有序。

    5.  

       

       

      总体结构图

                   

      显示

      系统

      时间

      和日

       

       
       

      小型多任务管理系统

       

      显示

      数字

      等腰

      三角

       

      两个

      十进

      制数

      字加

      减法

       

      技术分享技术分享技术分享技术分享

       


                

     

     

     

     

     
     技术分享

     

     

     

     

     

     

     

     

     

     

     

     

     

     


    两个

     

     

     

     

     

     

     

    十进制数加减法结构图

     

    主程序Main

    (输入XY,判断执行加法或减法)

     

                               

            
      技术分享
       技术分享
     
       技术分享
     
     

    子程序qiuhe

    Z=X+Y,输出Z

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


    显示系统时间和日期结构图

     

    主程序MAIN

    (显示界面提示信息,根据键输入的字符调用各子程序)

     

     

                     

    技术分享技术分享技术分享      

          
      技术分享
     
     

    子程序DATEDISPLAY 

    (调用DOS2AH功能,取系统当前日期,将日期转换成对应的ASCII码值并显示)

     
     

    子程序DATEDISPLAY 

    (调用DOS2AH功能,取系统当前日期,将日期转换成对应的ASCII码值并显示)

     
     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


    显示数字等腰三角形结构图

      

    技术分享 

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


    2、模块功能说明

    模块功能

     

    1. 界面模块

      功能:(a)提示用户已进入小型多任务管理系统;

          b)可在此界面模块进行选择需要执行的功能;

                    c)如果选择数字1或按Tab键,则进入界面中的第二个模块执行add or sub功能,进行十进制数加减法计算;

                    d)如果选择数字2或继续按Tab键,则进入界面中第三个模块执行input time功能,进行系统时间和日期显示功能;

                    e)如果选择数字3或继续按Tab键,怎进入界面中第四个模块执行input graphical功能,进行数字等腰三角形显示功能;

                    f)如果选择ESC键,则退出该系统,返回DOS

                (注:在每执行完一个模块后,按Tab键会执行下一个模块,一直循环执行,直到退出该系统)

       

      通过截图显示功能:

       

      技术分享

       

    2. 两位十进制数加减法模块

      功能:进行两个十进制数的加法计算;

      进行两个十进制数的减法计算。

       

    3. 显示系统日期和时间模块

      功能:通过选择D显示日期

      通过选择T显示时间,

      通过选择Q退出来显示用户需要的功能。

    4. 显示数字等腰三角形模块

      功能:输出一个等腰三角形

       

      五、详细设计及运行结果

       

      流程图,函数之间相互调用的图示,程序设计主要代码,运行结果。

    1. 两个十进制数加减法功能模块

      1)流程图:

       
       技术分享

       

       

       

       

       

       

       

       

       

       

       

       

       

       


                  ‘+’                                                        ‘-’

        
     技术分享 技术分享
     

     

     


    技术分享

     Z=X+Y

     

                                                                                                                                           Y

     
     技术分享

     


    技术分享                                                                                                            N

     
     技术分享

     

     


    技术分享                                                                   Y

                                                                                                               N

    技术分享 

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


    2)函数调用图:

     

     

     

            主程序Main

    (输入XY,判断执行加法或减法)

     

                                    ‘+’                                                                          ‘-’

    技术分享技术分享                                                                                                              

     

     

     

     

     

        
      技术分享
     

            子程序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               ;ALDL相加并把结果存入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               ;ALDL相加并把结果存入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时:

    交换XY的位置,即用Z=Y-X,输出的时候在Z的前面加个负号

     

    1. 运行结果:

       

      技术分享

       

      技术分享

       

      技术分享

       

       

    1. 显示系统日期和时间模块

       

      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)运行结果

       

       

      通过截图显示功能:

       

       

      技术分享

       

       

       

       

      技术分享

       

       

       

       

       

               技术分享

       

       

       

       

    2. 显示等腰三角形模块

       

       

    1. 流程图:

       

       

       

       

       

       

       

       

      技术分享  

       

       
       技术分享

       

       

       

       

       


    1. 技术分享

      准备产生空格,连续产生空格,调用REP1

       

          

    2.     
       技术分享
        技术分享
       

       


     
     技术分享

     

     

     

     

     


    技术分享

    REP3函数从小到大的数(右边)

     

    技术分享               

    1.       
       技术分享
       
        技术分享
       
        

         自动回车换行

       

       

       

       

       

       


    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:    rep1rep4控制每行产生的空格数

    int 21h

    loop rep1

    left:mov cx,bx 

    mov ah,2

    mov dl,30h 

    add dl,bl

    rep2:   rep2rep4内,与rep1并列控制以1为界,产生左半边的逆序排列的数字

    int 21h

    dec dl

    loop rep2

    sub bl,1 

    jna next 

    mov cx,bx  

    add dl,2 

    rep3:   rep3rep4内,与rep1rep2并列控制以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. 改进方案:

      1)为每个进程被分配一个时间段;

      2)如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个任务;

      3)如果任务在时间片结束前阻塞或结束,则CPU当即进行切换

      5.感受:

      1)通过本次汇编语言大赛,我们实现了小型多任务管理系统,同时,对汇编语言的编写,运行,调试功能,有了充分的了解,并熟练掌握。

      2)对于这次比赛,我们也付出了很多,通过在网上查找相关资料,在图书馆翻阅相关书籍来了解多任务管理系统的具体要求及实现,三个人相互合作,共同努力。

      3)在本次比赛中,我们学到了比平时更多的知识,同时,也充分的应用了课堂上老师所讲的知识。

      4)我们对于技术上的知识得到了充分的应该,这让我们不局限与书本知识,而是去真的的进行实践操作,让我们的很大的提高。

       

      附件:源程序清单

      (注:源程序清单只需提交电子版,不需提交打印版)

       

       

       

       

小型多任务管理系统