汇编语言程序设计,计算比赛成绩


一、设计内容与设计要求

1.课程设计目的:

《汇编语言程序设计》是计算机专业的重要的专业基础课,通过本课程设计使学生进一步巩固课堂所学,全面熟悉、掌握8088宏汇编语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力。

2.课题题目

1)测量任意程序的运行时间

2)读入一个文本文件并以DEBUG中的D命令格式显示。

3)文件加密程序

4)编写一个时钟程序

5)画网格线

6)画脉冲波图形

7)用“*”画菱形框

8)计算比赛成绩

3.设计要求:

1)在一周内学生须上机16小时以上,程序调试完后,须由指导老师在机器上检查运行结果,经教师认可后的源程序可通过打印机输出。

2)分组及安排

A.每组同学必须完成所指定的题目,每个同学须自己完成设计,应有不同的思路。

B.按学号分组,第一组为1、9、17、25、33号同学,第二组为2、10、18、26、34号,第三组为3、11、19、27、35号,依次类推,其中第一组做第一题,第二组做第二题,依次类推。

3)按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。

4)不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计,成绩的考核按上机表现、答辩成绩及课程设计说明书来综合评定。成绩分为优、良、中、及格、不及格五级分评定。

 

 

 

 

二、进度安排

第15 周  

星期三  14时:00分——18时:00分

星期日  8时:00分——12时:00分

第16 周  星期一  14时:00分——18时:00分

星期三  8时:00分——12时:00分

星期三  14时:00分——18时:00分

星期五  8时:00分——12时:00分


课题1.测量任意程序的运行时间

    要求:该程序驻留内存

    思路:DOS操作系统中,程序的调入运行及程序的终止均是通过相应的软中断来实现的。若窃取相应软中断,记录下程序开始调入运行的时间及程序终止的时间,则可测量出该程序运行的时间。

    提示要点:与之相关的软中断分别为:

    程序开始执行:4BH号系统功能调用(INT  21H)

    程序结束: INT 20H

               INT 27H

               00H、3lH、4CH号系统功能调用(INT 21H)

课题2.读入一个文本文件并以DEBUG中的D命令格式显示。

    要求:A、以DEBUG中的D命令格式显示一个文本文件。

          B、文件名从键盘键入。

    思路:A、打开相应文件,读内容至程序缓冲区。

          B、按要求显示。

课题3.文件加密程序

     要求:A、文件名从键盘输入。

           B、加密密钥从键盘输入。

     思路:从原文件读取内容至缓冲区,对其加密后,重新写回文件原来的地方。

     提示要点:A、加密可使用“异或”操作。

               B、相关中断为3DH,3EH,3FH,40H,42H号系统功能调用(INT 21H)

课题4.编写一个时钟程序

     要求:A、驻留内存。     

B、不影响其它程序运行。

C、把时钟信号显示在屏幕固定位置(最好为右上角)。

     思路:先从系统实时钟取得当前时间,每隔约0.05秒定时器向CPU发出一次8号中断请求,是一个硬中断。窃取 INT  1CH中断服务程序。

课题5.画网格线

要求:A、背景为蓝色、横线为红色、直线为黄色。

B、按用户输入的起点和终点坐标、列距和行距的大小画出任意条横竖线。

C、参数以十进制数形式输入,格式如下:

    Please enterstarting point (x1,y1):XX, XX

    Please enterending point (x2,y2):XX, XX

    Please enterdistance (row,col):XX, XX

课题6.画脉冲波图形

      要求:用户以十进制数形式从键盘输入脉冲高度、脉冲宽度和颜色参数(格式同上)后,以屏幕中间行为脉冲中间行,从左到右、满屏画出相应的脉冲波图形。

课题7.用“*”画菱形框

要求:A、背景为蓝色、“*”为红色,菱形框画在屏幕中间,菱形中间为空格。

B、用户以十进制数形式输入菱形宽度和高度(格式同上)。

课题8.计算比赛成绩

要求:A、7个评委,每个评委给分范围为0~10分(整数)。

B、7个评委的给分中,去掉一个最高分和一个最低分,余下5位评委的平均分即为参加者的得分(精确到小数点后一位)。

C、将分数在屏幕中间位置处用红色显示出来。

 

 


目  录

 

1.         题目... 1

2.         程序总体设计方案、思路... 1

3.         程序设计框图... 1

4.         源程序清单... 5

5.         程序调试结果及分析... 12

6.         设计总结... 13

 

 


1.      题目

计算比赛成绩

要求:A、7个评委,每个评委给分范围为0~10分(整数)。

B、7个评委的给分中,去掉一个最高分和一个最低分,余下5位评委的平均分即为参加者的得分(精确到小数点后一位)。

C、将分数在屏幕中间位置处用红色显示出来。

2.      程序总体设计方案、思路

程序总体设计可分为三个部分,三个子函数,先定义一段7个字节的内存空间ARRY存放7个评委给出的分数,定义两个2字节存放最大和最小分数、2个字节存放平均分数以及一些信息字符串,第一个子函数DIB用于输入7个分数,第二个子函数FIND用于找出7个分数中的最大值和最小值并存放到预先定义的两个字节中,第三个子函数C_DISP计算出7个分数的平均值并输出显示,先将7个数相加,加完后再减去存放在内存里的最大和最小分数,最后除以5得到平均值,最后结合显示器中断调用(INT 10H)输出平均分数,程序大致就这个过程。

3.      程序设计框图

汇编程序流程图

                             

                 图3.1 程序流程图,从开始到结束调用了三个子程序。

 

 

DIB子程序流程图

                                 

                                  图3.2 DIB子程序流程图,输入7个数字到ARRY数组,

                 这个流程图的工序有些复杂,但还是准确表达子程序的思想。


FIND子程序流程图

                                    

            图3.3 FIND子程序是一个利用了一个简单的算法来找出ARRY

数组里的最大和最小值,并存储和显示出来。

 

 

 C_DISP子程序流程图(简约流程图)

  


                图3.4 子程序C_DISP的流程图,其实这个子程序是比较

复杂的,程序里面用字母’A’替代了10,在累加和输出以及求平均数时的小数处理细节没有写出来。

 

 

 

4.      源程序清单

;2009年6月3日星期三 9:6:51

DATA SEGMENT

  ARRY DB 8DUP(?)

  MAX_MIN DB0,'A'

  SCORE DB 2DUP(?)

  MESSAGE DB'Please enter the seven consecutive Score(0~10):$'

  MESSAGE_MAXDB 0DH,0AH,'Max score:$'

  MESSAGE_MINDB 0DH,0AH,'Min score:$'

  MESSAGE_AVEDB 0DH,0AH,'Average score:$'

DATA ENDS

CODE SEGMENT

  ASSUMECS:CODE,DS:DATA

START:MOV AX,DATA

      MOVDS,AX

 

      CALLDIB

      CALLFIND

      CALLC_DISP

 

      MOVAH,1

      INT 21H

      MOVAX,4C00H

      INT 21H

;从键盘输入7个0~10的数字到arry        

DIB PROC NEAR

      PUSH AX

      PUSH CX

      PUSH SI

      MOVCX,7

      LEASI,ARRY

 

      LEADX,MESSAGE   ;显示提示信息

      MOVAH,9

      INT 21H

 

REP1: MOV AH,1

      INT 21H

      SUBAL,30H  

      CMPAL,0

      JL REP1

      CMPAL,9

      JG REP1

      CMPAL,1

      JEREP_10

      JMP PUT

 

REP_10:MOV AH,7    ;如果是第二次输入,调用int21h的7h功能输入,不用回显出来

       INT21H

 

       SUBAL,30H    ;是0吗?

       CMPAL,0

       JEINPUT_A   ;输入10,用'A'代替输入

INPUT_1:MOV AL,1

       JMPPUT

INPUT_A:

       MOVAH,2     ;如果判断出来是数字0,就回显一下,有输入10的感觉

       MOVDL,'0'

       INT21H

       MOVAL,41H  ;输入10,用'A'代替输入

 

PUT:  MOV[SI],AL 

      MOVDL,2CH 

      MOVAH,2

      INT 21H

      INC SI

      DEC CX

      CMPCX,0

      JNZREP1

 

      

EXIT1: MOV BYTE PTR [SI],'$'

     POP SI

     POP CX

     POP AX

     RET

DIB ENDP

;查找最大和最小score的函数

FIND PROC NEAR

    PUSH BX

    PUSH CX

    PUSH SI

    MOV CX,7

    LEASI,ARRY

REP2:MOV BL,[SI]

     CMPMAX_MIN,BL

     JG NEXT

     MOVMAX_MIN,BL

NEXT:CMP MAX_MIN+1,BL

     JL NEXT2

     MOVMAX_MIN+1,BL

NEXT2:INC SI

     LOOPREP2

 

;MAX,MIN

      LEADX,MESSAGE_MAX   ;显示提示信息

      MOVAH,9

      INT 21H

      MOVDL,MAX_MIN

      CMPDL,41H

      JNZNEXT_0

      JMPOUT1_00   ;输出A时,用'1'&'0'代替

NEXT_0:ADD DL,30H

      MOVAH,2

      INT 21H

      JMPTO_MIN

OUT1_00:MOV AH,2

        MOVDL,'1'

        INT21H

        MOVDL,'0'

        INT21H

 

TO_MIN:LEA DX,MESSAGE_MIN   ;显示提示信息

      MOVAH,9

      INT 21H

      MOVDL,MAX_MIN+1

      CMPDL,41H

      JNZ NEXT_N0

      JMPOUT1_000

NEXT_N0:ADD DL,30H

      MOVAH,2

      INT 21H

      JMPTO_WAIT

OUT1_000:MOV AH,2

        MOVDL,'1'

        INT21H

        MOVDL,'0'

        INT21H

TO_WAIT:

      MOVAH,1

      INT 21H

 

EXIT2:POP SI

     POP CX

     POP BX

     RET

FIND ENDP

;计算平均值得分并输出来,精确一位小数,注意,5个数字的平均值,一定最多是1位小数位

C_DISP PROC NEAR

     PUSH AX

     PUSH CX

     PUSH DX

     PUSH SI

     MOV CX,7

     LEASI,ARRY

     MOV AL,0

REP3:MOV BL,[SI]  ;将7个数都加起来到AX,最后减去MAXscore和MIN score

     CMPBL,41H

     JE NEXT33

     ADDAL,BL

     JMPNEXT3

NEXT33:ADD AL,10

NEXT3:INC SI

     LOOPREP3

 

     CMPMAX_MIN,41H

     JESUB_10

     SUBAL,MAX_MIN

     JMPSUB_MIN

SUB_10:SUB AL,10

SUB_MIN:CMP MAX_MIN+1,41H

     JESUB_N10

     SUBAL,MAX_MIN+1

     JMPNEXT44

SUB_N10:SUB AL,10

;CBW将AL累加起来的和扩展到AX

NEXT44:CBW

     MOV BL,5

     DIV BL

     MOVSCORE,AL  ;score放商

     CMPAH,0    ;AH里是余数

     JNZNEXT4   ;余数不为0就再除一次即可

     MOVSCORE+1,AH

     JMPPRINT

NEXT4:MOV BL,AH

      MOVAL,BL

      CBW

      MOVBL,10

      MULBL    ; (ax)←(al)*(src)

      MOVBL,5

      DIVBL     ;此处又是(al)←(ax)/(src)商,(ah)←(ax)/(src)余数一定是0了

      MOVSCORE+1,AL

PRINT:MOV AH,0

      MOVAL,3

      INT 10H  ;重新设置屏幕

 

      LEADX,MESSAGE_AVE

      MOVAH,9

      INT 21H

 

      MOVAH,2

      MOVDX,0B26H

      INT10H       ;调整光标位置

 

      MOVAH,9

      MOVBH,0

      MOVBL,0CH ;(BL)前一个控制背景颜色,后一个控制字体颜色,0为黑,C为红,0CH就是红字黑底

      MOVCX,3  

      INT 10H

     

      MOVDL,SCORE    ;average score的整数部分

      ADDDL,30H

      CMPDL,3AH

      JNZ NNN2

      JMPOUT1_0 

OUT1_0:INC CX      

 

      INT 10H

      MOVDL,'1'  ;输出'1'&'0'

      MOVAH,2

      INT 21H

 

      MOVDL,'0'

      INT 21H

      JMP XSD

      

NNN2:MOV AH,2

      INT 21H

 

XSD:  MOVDL,'.'   ;小数点

      MOVAH,2

      INT 21H

 

      MOV DL,SCORE+1  ;average score小数部分,只有1位

      ADDDL,30H

      MOVAH,2

      INT 21H

EXIT5:POP SI

      POP DX

      POP CX

      POP AX

      RET

C_DISP ENDP

CODE ENDS

     ENDSTART

5.      程序调试结果及分析

 

              图5.1  程序运行的第一个界面,这里显示的是输入7个分数之后的情况。

 

 

                图5.2 这是程序运行时的第二个界面,显示了提示信息和

在屏幕中央用红色字体显示平均分数。

 

 

 

6.      设计总结

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

丈夫绝不受人怜

最近,同心出版社出版了中国京剧作家翁偶虹先生的遗著《翁偶虹编剧生涯》(2008年1月出版,定价:39元)。一般人也许不知道他,但是喜欢京剧的读者一定知道京剧《锁麟囊》和样板戏《红灯记》,这些家喻户晓的剧目…

用移位实现除以或者乘以一个数

用移位实现除以或者乘以一个数 一些2的次幂需要常记! 2^0 1 2^1 2 2^2 4 2^3 8 2^4 16 2^5 32 2^6 64 2^7 128 2^8 256 2^9 512 2^10 1024 2^(-1) 0.5 2^(-2) 0.25 2^(-3) 0.125 2^(-4) 0.0625 2^(-5) 0.03125 2^(-6) 0.015625 2^(-7) 0.007812…

我不愿意直接表达情绪:答上海《新闻晨报》记者顾筝小姐问

1987年10月,与《北京文学》杂志社的同事在一起。照片中的七个人现在只有一个人还在《北京文学》任职。他们分别是(前排自左)傅锋、陈世崇、赵李红、仲维萍、汪爱珠。(后排自右)路崇勋和我。上海《新闻晨报》记者 顾筝 …

IC芯片

5.8寸显示屏/LB058WQ1(SD)01LG274HC04 0.3NXP10K 74HC138 0.37NXP20K 74HC245 0.52NXP30K 74HC595 明威 她买的0.22 SST39SF040 PLCC32 09 SST1500 D2553100 BD989710 FDD8447LFAIRCHILD20 TDA817720 24C0850 TDA8350Q10 RU4A50 TDA91185 …

服务器未进系统如何关机,云服务器关机了怎么开机

云服务器关机了怎么开机 内容精选换一换只有当云服务器处于关机状态,才能执行启动操作。只有当云服务器处于开机状态,才能执行关机操作。用户可以在管理控制台对专属主机上的云服务器进行管理类操作,包括开机、关机、重启、删除。登录管理控制…

2008年夜饭时随手拍的两张照片

我们在蒙古包里就餐,歌手来唱歌。而后面的门像是一面镜子。新来的一个歌手,看着像是跳骑马舞的。他的服装很有特点。

上升沿的检测

上升沿的检测 第一种方法 input vsync; reg vsync_r1; reg vsync_r2; wire vsync_rise; wire vsync_r2_n; always(posedge clk) beginvsync_r1 < vsync;vsync_r2 < vsync_r1; end assign vsync_r2_n ~vsync_r2; assign vsync_rise vsync_r1 & vsync_r2_n ;第二…

VS2008(SP1)资源编译错误:fatal error RC1015: cannot open include file 'afxres.h'.

只要一改动资源&#xff0c;按F7编译就会出现两个错误&#xff1a; error RC2001: newline in constant fatal error RC1015: cannot open include file afxres.h. 打开rc文件发现 #include "afxres.h" 变成了 #include "afxres.h 。 自己发现问题了&#x…

忍者巫毒娃娃

&#xff08;此六张图片为阿梅尔用手机拍摄制作的动漫系列故事&#xff0c;拍摄场地为她的小房间里&#xff0c;人物是忍者巫毒娃娃。文字亦为其写&#xff09;月黑风高之夜,真田旗下十勇士之首——猿飞佐助&#xff0c;正在执行秘密任务。 “不管发生什么&#xff0c;完成…

服务器系统怎么调节风扇速度,服务器主板怎样设置风扇速度

服务器主板怎样设置风扇速度 内容精选换一换专属主机的开通是自助完成的&#xff0c;您只需要指定相关参数&#xff0c;比如区域和可用区、专属主机类别和类型、专属主机名称、购买时长和数量&#xff0c;即可在几分钟内获得所需的专属主机。本文介绍如何在管理控制台创建一台包…

SPI参数化分配寄存器

SPI参数化分配寄存器 SPI的原理请参考:spi 协议驱动设计 //SPI salve支持功能: //支持三线SPI或者四线SPI,通过define切换 //支持指令长度、帧长自定义 //工作时钟可自定义,大于SPI clk的2倍 //只需要修改:几线SPI 单帧长度 指令长度 寄存器开辟 //注意:指令最高bit表示读…

纪念作家浩然先生

前天&#xff0c;作家浩然先生在北京逝世。我有幸曾在他时任主编的《北京文学》杂志工作过8年。我认为他不光是个中国农民文学的标志性作家&#xff0c;更是中国革命现实主义和革命浪漫主义文学的实践者和代表人物&#xff0c;同时他还是一个和蔼可亲的老人。现任北京作协主席、…

MFC,晕,今天才偶然发现FloatControlBar。。。

使用FloatControlBar前面要有两句这样的。。 m_xxxBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); 接下来 DockControlBar(&m_xxxBar); 或 FloatControlBar(&m_xxxBar,CPoint(300,80),CBRS_ALIGN_TOP); 不然程序运行崩溃&#xff0c;为折腾了…

万维网服务器协议提供web,万维网的HTTP和FTP协议.doc

万维网的HTTP和FTP协议.doc万维网的HTTP和FTP协议摘 要&#xff1a;20世纪40年代以来&#xff0c;人们就梦想能拥有一个世界性的信息库。在这个信息库中&#xff0c;信息不仅能被全球的人们存取&#xff0c;而且能轻松地链接到其他地方的信息&#xff0c;使用户可以方便快捷地获…

“天下第一长联”与“元跨革囊”

云南昆明滇池岸边的大观楼有一副对联&#xff0c;被称为“天下第一长联”&#xff0c;上联是&#xff1a; “五百里滇池&#xff0c;奔来眼底。披襟岸帻&#xff0c;喜茫茫空阔无边。看东骧神骏&#xff0c;西翥灵仪&#xff0c;北走蜿蜒&#xff0c;南翔缟素。高人韵士&#x…

浩然:人民之子

今天在八宝山公墓举行了作家浩然先生的追悼仪式。来自北京、河北和山东的群众自发做成横幅手持静立&#xff0c;表达对作家哀思。喜鹊登枝杏花雨&#xff0c;金光大道艳阳天&#xff1b;乐土活泉已圆梦&#xff0c;浩然正气为苍生。一位普通读者在留言簿上写道&#xff1a;沉痛…

双向控制引脚的控制代码

双向控制引脚的控制代码 从这个表中可以发现&#xff0c;当高阻态Z和0或者1值同时出现时&#xff0c;总能保持0或者1的原状态不变。设计双向引脚的逻辑时可以利用这个特性&#xff0c;引脚在做输入时&#xff0c;让输出值取Z状态&#xff0c;那么读取的输入值完全取决于实际的输…

VC,一条会被鼠标移动的直线

对话框中的小红线可以被移动的 一、类名是 CBinarizationDlg 二、定义两个变量 BOOL m_flag; int nPos; 在构造函数初始化m_flag false;nPos256; 三、响应消息函数三个 afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLBut…

如何修改浏览器服务器时间格式,浏览器模式怎么改模式

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。以360浏览器为例&#xff0c;浏览器模式改模式的方法&#xff1a;打开浏览器主页面&#xff0c;点击右上角的闪电图标即可更改模式。网页浏览器(Web Browser)&#xff0c;常被简称为…