周扬微机原理课程设计报告Word文档格式.docx
- 文档编号:7678890
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:11
- 大小:71.44KB
周扬微机原理课程设计报告Word文档格式.docx
《周扬微机原理课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《周扬微机原理课程设计报告Word文档格式.docx(11页珍藏版)》请在冰点文库上搜索。
一流程图设计
排学生成绩名次表主程序参考流程排学生成绩名次表SCAN子程序参考流程
二代码设计
CRLFMACRO;
宏定义,回车换行
MOVAH,02H;
显示一位ASCLL码
MOVDL,0DH;
回车
INT21H
MOVAH,02H
MOVDL,0AH;
换行
ENDM
DATASEGMENT
STUNUMEQU30;
学生数
SHURUXDB'
PLEASEINPUT30SCORE'
0DH,0AH,'
$'
;
输入提示信息
ERRORDB'
INPUTERROR,TRYAGAIN'
错误提示信息
SHUCHUDB'
THEORDERIS:
'
输出提示信息
EMARKDB?
错误标志位
ORG1000H;
存放成绩信息首址
SCOREDB30DUP(?
);
30个成绩
ORG2000H;
存放名次信息地址
MCDB30DUP(?
名次表
DATAENDS
STACKSEGMENT;
设置堆栈段
STADW32DUP(?
)
TOPDW?
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVSP,TOP
ZY:
MOVAH,09H;
显示输入提示信息,显示字符串
MOVDX,OFFSETSHURUX
MOVSI,OFFSETSCORE;
成绩表首地址
MOVCX,STUNUM;
CX=30
MOVEMARK,0;
错误标志位清零
SRCJ:
CALLGETNUM;
调用子程序读成绩
CMPEMARK,01H;
判断是否出错
JEZY;
出错则从新输入
MOV[SI],DL;
DL为成绩,没出错即输入成绩
INCSI;
指向下一个成绩单元地址
LOOPSRCJ;
循环,将30个成绩读取完
循环存30个同学的名次
MOVDI,OFFSETMC;
名次的首地址
FMC:
CALLSCAN;
调用子程序,记住成绩最高的学号,
;
其成绩清零
MOVAL,STUNUM;
学生总数
SUBAL,CL
INCAL;
计算名次
MOVBX,DX;
学号,即偏移地址
PUSHAX;
将名次转换成压缩BCD码方便显示
PUSHBX
PUSHCX
XORAH,AH;
AH清零
MOVBH,0AH;
BH=10
DIVBH;
除以10,取高位,商在AL,余数在AH
MOVCL,4
SHLAL,CL;
左移4位
ADDAL,AH;
相加,AL即成绩的压缩BCD码
MOVDH,AL;
DH存放名次
POPCX
POPBX
POPAX
MOV[DI+BX],DH;
存入名次
LOOPFMC;
循环存完30个名次
MOVAH,09H
LEADX,SHUCHU;
MOVDXOFFSETSHUCHU输出提示信息
MOVCX,STUNUM
MOVSI,OFFSETMC;
SI名次首地址
XSMC:
MOVAL,[SI];
AL放名次。
这部分用于显示名次
CALLDISPP;
调用子程序显示名次,转化成ACSII,显示高
低位
PUSHDX
PUSHAX
MOVAH,02
MOVDL,20H;
成绩之间显示空格
POPDX
指向名次表下一个地址
LOOPXSMC;
循环显示30个名次
MOVAH,4CH;
返回DOS
SCANPROCNEAR;
扫描子程序,每调用一遍,找出成绩表中最
高成绩,记录学号,将此成绩清零
MOVAL,00H
MOVBX,OFFSETSCORE
MOVSI,BX;
成绩的偏移地址
BJCJ:
CMPAL,[SI]
JAEBJH;
AL>
=[SI]不交换
AL<
[SI]交换
MOVDX,SI;
取偏移地址
SUBDX,BX;
取学号
BJH:
INCSI
LOOPBJCJ;
循环与30个成绩比较,找出最高
ADDBX,DX;
BX最高成绩的偏移地址
MOVBYTEPTR[BX],00H;
最高成绩清零
RET
SCANENDP
DISPPPROCNEAR;
显示子程序
MOVBL,AL;
显示高四位
MOVDL,BL
MOVCL,04
ROLDL,CL;
DL高四位转移到低四位
ANDDL,0FH;
保留此时的低四位
CALLDISPL;
调用ASCII码显示子程序
MOVDL,BL;
显示低四位
ANDDL,0FH
CALLDISPL
DISPPENDP
DISPLPROCNEAR;
将名次转换成对应ASCII显示
ADDDL,30H;
0-9,ASCII码30H-39H
DISPLENDP
GETNUMPROCNEAR;
读取成绩子程序
XORDX,DX;
清零用于存放成绩
XHSR:
MOVAH,01H
INT21H;
键盘输入字符
CMPAL,0DH
JZJIESU;
如果是回车就结束
SUBAL,30H
JBERR;
小于0则报错
CMPAL,09H
JBEGETS;
如果在0-9之间则存成绩至DX
JMPERR;
否则报错
GETS:
MOVCL,04
SHLDX,CL;
将DX中已有数值左移四位
XORAH,AH
ADDDX,AX;
将数据存与DX低四位
JMPXHSR;
继续读数
ERR:
MOVAH,09H;
显示报错信息
MOVDX,OFFSETERROR
MOVEMARK,01H;
报错标志位置一
JIESU:
PUSHDX
CRLF;
回车换行
GETNUMENDP
CODEENDS
ENDSTART
【实验截图】
【心得体会】
在短短一周的微机原理课程设计中,通过自己编程,摸索,做题,查资料,再加上同学和老师的帮助,我完成了老师布置的几个任务,学到了不少东西,感觉汇编语言还是在于多多练习,熟能生巧,这次课程设计获益良多。
在这一周里,应该说还是比较困难的,毕竟要求写的程序比较大,不是之前的小程序,所以一开始上手还是比较困难的。
以前学到的都是课本上的基础知识,虽然也有上机课程,但是一学期就几节,而且编的只是一些小程序。
而在这段时间,我们的主要任务就是编程,不仅要编出来,还要进行实际的操作运行得出正确的结果,这就让我们将平常所学的理论知识与实践相结合了起来,同时也让我们对DOS系统有了更进一步的了解。
指导书上的13个程序,还是蛮多的,最开始的时候,感觉都好难,还是得从简单的做起,我认为基础打好了,才有利于写后面难的程序,所以我仔细研究了,前几个程序。
特别是DOS功能调用,以前并没有用这么多,就是INT20,结束就差不多了。
这次用的较多,字符输入输出,字符串的输入输出,回车换行等等,还得慢慢熟悉。
基础掌握了差不多了,我就开始编写一个比较大的程序,所以我仔细写了,第九个排序成绩的程序,问题还是不少,最开始的就是一些小问题,当然最重要的就是逻辑问题,逻辑错了,程序怎么运行都不对。
小问题比如0和O,编写有时候会写错,还有nDUP(?
)的对是,nDUP(?
)就是错的,中间需要空格,等等都是一些小问题,这些都是因为平时没有练习的结果,多练习,这些小问题就越来越少了,当然最重要的还是逻辑问题,不能搞错。
最让我头疼的就是成绩的输入,和排名的输出,汇编语言又没有数组,怎样输入输出高四位低四位,还有BCD码,ASCII码的转化等等,都需要慢慢想,还是比较困难的。
总的来讲收获颇丰,这不仅仅是一次编程,跟是一次让我们系统的训练,让我们对微机原理,汇编语言有了跟深的了解,唯一觉的不足的就是时间有点短,实际上就4天,让我们编程,要完成4到5个任务,比较急,还是希望时间能多一点。
不管怎样,还是学到了很多,对我有很大的帮助。
感谢老师的悉心指导。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)