一、设计内容与设计要求

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.      设计总结

汇编语言程序设计,计算比赛成绩相关推荐

  1. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】答案

    内容修订.解析.扩展: <IBM-PC汇编语言程序设计>(第2版)[沈美明 温冬婵]--自编解析与答案 第 一 章. 习 题 1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数 ...

  2. 《汇编语言程序设计教程》人民邮电出版社第二版习题及参考答案

    网上的答案是第一版的,重新整理了一下 <汇编语言程序设计教程>人民邮电出版社第二版 刘慧婷,王庆生 主编 习题及参考答案 更多汇编内容请访问:omegaxyz.com 第一章至第五章 核对 ...

  3. 汇编语言实验二 汇编语言程序设计(顺序、多分支、循环)

    **实验二 汇编语言程序设计(顺序.多分支.循环)** 一. 实验目的 1.掌握顺序和循环程序结构和设计方法: 2.熟悉在PC机上建立.汇编.连接.调试和运行8086/8088汇编语言程序的过程. 二 ...

  4. [转载]汇编语言程序设计第二版答案  沈美明

    原文地址:汇编语言程序设计第二版答案  沈美明作者:相约爱情海 file:///C|/Users/CaoFan/Desktop/IBM-PC汇编语言程序设计(第二版)答案.txt[2010/4/24 ...

  5. 汇编语言程序设计练习题

    所有代码见 https://github.com/Lemonreds/assembly-solution 汇编语言程序设计练习题 一.字符与串处理类 1.逆序输出字符串"BASED ADDR ...

  6. python 比赛成绩预测_大数据新研究:用六个月的跑步记录准确预测马拉松完赛成绩...

    随着疫情得到控制,各个城市的马拉松比赛又开始相继恢复.从线上马拉松终于可以再次到各个城市不同的赛道上奔跑,无疑是跑者的福音.积压了大半年的情绪,也激发了跑者更高的训练热情,带来了更多跑量的累积. 而准 ...

  7. 伪指令endp告诉汇编程序_第2章 指令系统及汇编语言程序设计 题库和答案

    第 2 章 指令系统及汇编语言程序设计 ________________________________________ 一.选择题 1 .指令 ADD CX , 55H 的源操作数的寻址方式是 (  ...

  8. 《汇编语言程序设计》(双语)上机指导

    唔.省得每次忘带U盘... <汇编语言程序设计>(双语)上机指导... 1 实验1 建立windows环境下32位汇编语言开发环境... 2 实验2  Instruction Format ...

  9. Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)

    Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(畅销10年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 75 ...

最新文章

  1. BeanUtils 是用 Spring 的还是 Apache 的好?
  2. 【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )
  3. 集合详解(三)----Map的两种遍历方式
  4. 初学C++正则表达式(regex)
  5. OpenCV高效准确的场景文本检测器(EAST)(附完整代码)
  6. 不好意思,你这个加分理由不行……
  7. VIM 文件编码识别与乱码处理
  8. java 树状数据算法_使用递归算法结合数据库解析成Java树形结构的代码解析
  9. Javascript 模块化指北
  10. 蓝桥杯入门练习1-4(python)
  11. 延禧宫有刺客!快把他收了!
  12. Jquery之AJAX用户注册表单验证(Vancl版)
  13. 【图像分割】基于matlab 2D水平集三维医学图像分割【含Matlab源码 584期】
  14. 禾川Q1系列PLC官方教程
  15. 北斗一号卫星授时技术及在电力系统中的应用
  16. 【软件与系统安全】笔记与期末复习
  17. 安装 kafka 配置 sasl 认证
  18. CS231n课程笔记翻译3:线性分类笔记
  19. nginx限流防刷方案
  20. UG8 安装指南,带详细教学视频

热门文章

  1. HP, That's A Dream Or Not?
  2. [导入]常用26句生活用语[英语]
  3. 命中率_三分命中率暴涨19%!卡皇进化已无弱项,顶级3D练成何须布拉
  4. fastjson jar包_经过性能对比,我发现温少的FastJson真牛。
  5. mysql 核对_核对数据库表记录的shell脚本
  6. iis php5.4配置_IIS 8+PHP5.4+SQL server2012配置
  7. mysql的常用的备份工具_39、mysql常用备份工具
  8. python def函数报错详解_Python函数详解
  9. php request entity too large,Nginx:413 Request Entity Too Large解决
  10. wps两列数据分别作为xy轴_0.4 秒,完成两列数据核对