29微机原理课程设计任务书 2.docx
- 文档编号:10197065
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:20
- 大小:124.40KB
29微机原理课程设计任务书 2.docx
《29微机原理课程设计任务书 2.docx》由会员分享,可在线阅读,更多相关《29微机原理课程设计任务书 2.docx(20页珍藏版)》请在冰豆网上搜索。
29微机原理课程设计任务书2
学号
0120911350329
课程设计
题目
产生随机数并运算的程序设计
学院
自动化
专业
电气工程及其自动化
班级
电气0903班
姓名
李闯
指导教师
张丹红
2012
年
1
月
12
日
课程设计任务书
学生姓名:
李闯专业班级:
电气0903
指导教师:
张丹红工作单位:
自动化学院
题目:
产生随机数并运算的程序设计
初始条件:
带有编辑器、汇编程序、连接程序和调试程序的电脑一台。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
采用汇编语言设计一个程序,显示任意两个16进制数的加法或减法表达式及其运算结果。
按Q退出程序。
(1)设计任务及要求分析
(2)方案比较及认证说明
(3)系统原理阐述
(4)软件设计课题需要说明:
软件思想,流程图,源程序及程序注释
(5)调试记录及结果分析
(6)总结
(7)参考资料
(8)附录:
芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图
时间安排:
1月4日~1月5日:
收集资料,方案选择
1月6日~1月9日:
整体流程,程序细节
1月10日~1月12日:
调试程序,报告撰写
1月13日:
交设计报告,程序演示,答辩
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
摘要1
产生随机数并运算的程序设计2
1.设计任务及要求分析2
2.原理说明2
2.1随机数产生2
2.2随机数转化成16进制ASCII码字符2
2.3利用随机数判断随机数加减3
2.4将表达式结果输出3
2.5保持输出与提示语3
2.6汇编程序流程图4
3.源程序及注释4
4.调试记录及结果分析9
5.总结11
6.参考文献12
摘要
《微机原理及接口技术》是一门很重要的学科,同时也是许多先进技术的基石,合理的运用课本知识进行汇编,可以实现许多精彩实用,奇妙而又方便的功能,本课设利用汇编语言在DOS环境下,实现产生随机数进行相加减的功能,每运行一次就会产生任意俩个十六进制数的相加或者相减,并且在屏幕上显示表达式。
本课设说明书包括对该设计汇编程序要求分析、原理介绍、汇编流程图、程序说明,仿真结果演示、总结、参考文献。
汇编执行指令是机器指令的符号化表示,其操作码用记忆符表示,地址码直接用标号、变量名字、常数等表示。
汇编执行指令经汇编程序翻译为机器指令,二者之间基本上保持一一对应的关系。
采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是汇编出的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。
关键词:
随机数,汇编,微机原理
产生随机数并运算的程序设计
1.设计任务及要求分析
要达到本实验汇编程序的要求,及为准确实现随机产生的两个十六进制数的加法或者减法,并按Q键可以退出,则需要对将要进行的汇编设计进行大概的分部构想,合理的架构设置,以及对汇编程序可行性进行初步估计,如果想法丰富,可以先大概列出多种可以进行汇编的框架,然后进行比较分析,取出最理想、语言程序最简单、最容易仿真的一个进行详细设计,完成设计以后,及时对设计程序进行仿真,以便于发现错误,及时进行改正,以免在完全设计结束以后,有错误发现不了,带来不必要的麻烦,而且我们使用的汇编的软件为MF2KP,虽然具有像所占空间小、识别力强、仿真容易、环境简单等优点,但是也有一些缺点,比如程序有错误的时候不能明确指出错误的位置,还要根据指示的错误对整个程序详细检查,这就给我们这样初学者来汇编的时候带来很大麻烦,为了提高设计效率,准确设计理想程序,所以就应该像上述提到的及时仿真,及时发现错误等。
除了考虑到上述的注意问题之外,更重要的是:
将每一个设计的要求都能做到完美无误,这些设计任务要求总体上可以归纳为一下几点:
第一,要随机产生两个十六进制数,所以要有随机数,可以在子程序里面对产生随机数进行定义,因为题目中有两个随机数,在子程序里会节省指令数,提高运行速度,子程序里如何定义才能产生随机数呢?
方法会有很多,但是最好的一种就是应用INT1AH这条指令,它是利用时钟产生随机数的,在随机数产生和时钟控制指令等方面应用广泛;第二,将随机数转化成16进制的ASCII码字符,同样也需要利用子程序调用来节省指令工作时间;第三,利用产生的随机数判断应该是对结果进行是加还是减;第四,将随机数的运算表达式及结果输出,此时需要使用MOVAH,9INT21H这俩条指令,来进行多字符输出;第五,应用循环语句保持输出,编写在输入为‘Q’时结束本次操作。
以上的框架分析只是一条解决这任务的途径而已,或许还有更多更简单的途径和方法,只不过没有想到而已,但是这并不妨碍此次编写程序,因为毕竟至善至美的东西是不存在的嘛!
2.原理说明
对于上述提到的五步设计步骤,所需要的原理可以进行如下的:
2.1随机数产生
本次汇编采用的是INT1AH进行产生随机数,因为产生随机数是在子程序里面进行的,为了不影响操作的结果,以及防止改变CX,AX,DX,BX的值,一定要先保护现场,
然后使用STI清零IF位,读时钟信号的值,将其保存在AX中,将AX的高8位与00000011相与,所以此时AX的值的范围会是0000H到03FFH,用AX除以101,会产生0到100的余数,将余数保存在BX中,那么此时产生的BX值就是所需要的随机数,最后恢复现场。
2.2随机数转化成16进制ASCII码字符
由于产生的随机数是存储在BX中的10进制,而任务之中是要求16进制相加减,所以需要将其转化为16进制ASCII码字符。
十进制转化成十六进制可类似于十进制数转换为二进制数的降幂法和除法来转换为十六进制数。
也可先将十进制数转换为二进制数,再将二进制数转换为十六进制数。
降幂法:
首先写出要转换的十进制数,其次写出所有小于此数的各位十六进制权值,然后用要转换的十进制数除以与它最相近的十六进制权值,并在相应位记以十六进制的商;再将余数除以下一位权值,并记下商和余数;如此不断反复,直到该数为0为止。
除法:
同前,整数部分采用除16取余法,小数部分采用乘16取整法直到所需的精度为止来进行转换。
本实验采用的是前者,使用起来较为方便。
2.3利用随机数判断随机数加减
在DATA段就定义了www这个标号的值,来判断俩个随机数是相加还是相减,如果www是0执行相加的子程序,是1执行相减子程序,由于在将随机数转化成16进制数的子程序中根据产生的随机数定义了www的值,而www的值只有0和1俩种情况,所以可以作为随机数加减的标志来进行判断。
2.4将表达式结果输出
本次结果的输出需要包含参加运算的随机数的表达式,所以两个随机数与中间的+或者-号,以及=号都需要进行定义,在DATA段里需要详细的制定,然后在主程序中,没完成一步可以确定表达式中符号的步骤后,需要通过DOS功能调用程序在屏幕上输出或输入字符,本实验需要用到的几个有关DOS输入/输出功能的调用号如下表所示:
表1DOS调用号功能
调用号
调用号功能
01
单字符输入
02
单字符输出
0AH
多字符输入
09
多字符输出
6
单字符输入/输出
4CH
过程终止
DOS功能调用号需要送到AH寄存器中,如果有需要,按要求给定输入参数,最后还需要在下边写入中断指令:
INT21H。
2.5保持输出与提示语
此程序一定要用循环语句来保持输出的表达式,因为不通过表达式来表示输出的话,结果在屏幕上显示的时间会很短,人眼根本无法看到结果,知道了循环语句的重要性以后,该怎么使用循环语句呢?
以前的循环保持功能的调用都是先定义CX,然后定义另外一个段,并且使用LOOP语句来循环此段的标号,而本次实验需要通过按下Q键以后才会停止输出,结束响应,所以这就要求我们将提示语句和定义的CX值放在后来定义的段里面。
为了更好的提高本程序的实用性,所以需要提示使用者通过按下Q键结束此次响应,在刚开始定义的DATA段可以先定义一个pp为标号的字符串,例如为:
YOUCANPUTQTOSTOPIT,这些字符串一定要以“$”为结尾,告诉系统已经结束了该字符串的调用,而在调用的时候需要将pp的首地址输送到DX中,然后根据上表所示的9号调用号输出。
这样就可以起到很好的保持输出和输出提示语的作用。
2.6汇编程序流程图
3.源程序及注释
DATASEGMENT
CCDB'+'
wwdb'-'
GGDB'='
IIDB0DH,0AH,'$'
AADB5DUP(?
)
wwwdw0
ghhdb'0',0dh,0ah,'$'
bnmdw0
PPDB0DH,0AH,'YOUCANINPUTQTOSTOP!
$'
DATAENDS
STACKSEGMENT
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVCX,20
CALLRAND;产生一随机数
CALLMCAT;将随机数转换为16进制表示的ASCII码字符
MOVAX,BX
PUSHAX
CMPwww,0;WWW=0?
JEA1;执行'+'
CMPwww,1;www=1?
JEA2;执行'-'
A1:
MOVDL,CC;显示'+'
MOVAH,2
INT21H
CALLRAND;产生另一随机数
addbx,0fh
CALLMCAT;将随机数转换为16进制表示的ASCII码字符
MOVDL,GG;显示'='
MOVAH,2
INT21H
POPAX
ADDAX,BX
cmpax,0;ax与0比较
jneYJW1;ax不为0转移
leadx,ghh
movah,9
int21h
jmpqq1
YJW1:
JMPB1
A2:
MOVDL,WW;显示'-'
MOVAH,2
INT21H
CALLRAND1
CALLMCAT
MOVDL,GG
MOVAH,2
INT21H
POPAX
SbbAX,BX
cmpax,0
jneyjw2
leadx,ghh
movah,9
int21h
jmpqq1
yjw2:
JMPB1
B1:
MOVBX,AX
CALLMCAT
leaDX,II
MOVAH,9
INT21H
qq1:
MOVDX,OFFSETPP
MOVAH,9
INT21H
movcx,0FFFH
movah,1
INT21H
cmpal,'Q'
jzqq2
LOOPQQ1
m1:
leadx,lich
movah,9
int21h
jmpstart
QQ2:
MOVAH,4CH
INT21H
MCATPROC;将随机数转换为16进制表示的ASCII码字符子程序
PUSHAX
pushbx
PUSHCX
PUSHDX
CMPBX,9
JAS1
PUSHAX
PUSHBX
PUSHCX
PUSHDX
movax,bx
movbl,5
divbl
cmpah,3
jaevb1
movwww,1
jmpvn1
vb1:
movwww,0
vn1:
popdx
popcx
popbx
popax
ADDBL,30H
MOVAA,BL
MOVAA+1,'$'
LEADX,AA
MOVAH,9
INT21H
JMPs3
s1:
MOVCL,4
MOVAL,0
PUSHBX
SHLBX,CL
CMPBH,9
JBEV1
SUBBH,9
ADDBH,40H
JMPMM1
V1:
ADDBH,30H
MM1:
MOVAA,BH
POPBX
ANDBL,0FH
PUSHAX
PUSHBX
PUSHCX
PUSHDX
movax,bx
movbl,5
divbl
cmpah,3
jaevb2
movwww,1
jmpvn2
vb2:
movwww,0
vn2:
popdx
popcx
popbx
popax
CMPBL,9
JBETT1
SUBBL,9
ADDBL,40H
JMPRR1
TT1:
ADDBL,30H
RR1:
MOVAA+1,BL
MOVAA+2,'$'
LEADX,AA
MOVAH,9
INT21H
s3:
POPDX
POPCX
POPBX
POPAX
RET
MCATENDP
RANDPROC
PUSHCX;保护现场
PUSHDX
PUSHAX
STI
MOVAH,0;读时钟计数器值
INT1AH
MOVAX,DX;清高6位
ANDAH,3
MOVDL,101;除101,产生0~100余数
DIVDL
MOVBL,AH;余数存BX,作随机数
POPAX
POPDX
POPCX
RET
RANDENDP
RAND1PROC
PUSHCX
PUSHDX
PUSHAX
STI
MOVAH,0
INT1AH
MOVax,cx
ANDAH,3
MOVDL,101
DIVDL
MOVBL,AH
POPAX
POPDX
POPCX
RET
RAND1ENDP
CODEENDS
ENDSTART
4.调试记录及结果分析
本实验在汇编过程中就进行了很多次的调试,这种调试可以帮助我发现错误,以便于及时改正,下边选取了一些在源程序汇编完全结束以后的调试结果,由于本次程序设计的任务要求是随机产生的两位16进制数进行加减,所以要求调试结果具有随机性,包括相加相减的随机性和两位16进制数的随机性,而且汇编的时候也是按照这个要求来设计的,为了验证汇编的正确性和完成任务要求的吻合度,所以要求进行多次调试,直至能够产生相加的结果和相减的结果,而且保证每次运算的运算数是不同的,才可以终止调试,如果在4次以上的调试都不能达到预期的要求,说明程序中有错误。
当然在调试的过程中,我也得到了很多错误的结果,有一些是只能产生相减的,而且前后随机数相等,4次调试结果都是0,虽然表达式产生没有错误,可是不符合要求,经过检查发现是因为在相减那一段程序中设计有错误,找到有误的地方就可以对症下药了,将其中添加一个额外标号语句来作为中间转移的过渡,通过在这个额外语句运用跳转指令:
JMPB1,就能够消除先前调试的错误了。
此外,有的时候调试结果中不产生先前设定的显示语句“YOUCANINPUTQTOSTOP”,调试发现只有当相减的时候不产生,如果是相加一定会有这条显示,分析以后发现是没有将这条语句的显示放到最后那条截止语句前面,导致相减的语句进行指令转移的时候越过显示指示语句的指令。
在这些小问题之前还有一个很大的问题,那就是观察不到结果,然而程序有没有错误,貌似看来程序又在执行,最后发现是缺少循环语句,在本说明书的任务要求分析里面已经提到了解决办法,所以这里不加以赘述。
除去上面所提到的问题之外,也有一些很小的错误,但并不影响调试结果。
下面是对改正好以后调试出来的正确结果,图1为第一次运行结果,图2为第二次运行结果。
图1
图2
5.总结
通过该课程设计,全面系统的理解了微机原理的一般原理和基本实现方法。
把死板的课本知识变得生动有趣,激发了学习的积极性。
把学过的微机原理基础原理的知识强化,能够把课堂上学的知识通过自己编写的程序表示出来,加深了对理论知识的理解。
在这次课程设计中,我先是认真阅读课本上的相关知识,理解透后又翻阅关于汇编的书籍,学习汇编中一些指令及运算符的用法。
总体来说,这次课设我学到了很多。
在设计过程中,加深了对可内知识的理解就,真正懂得了学以致用,熟悉了汇编的使用,了解了汇编在微机原理中的重大应用。
做课程设计我体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐.这次微机原理课程设计,虽然短暂但是让我得到多方面的提高:
首先,提高了我们的对汇编语言的运用能力。
汇编语言是一种面向机器的低级语言,像很多高级语言中只要一两条语句就可描述的算法在汇编中则需要很多条指令来表示,可读性不如高级语言,代码也较长,但汇编语言的执行效率高。
其次,查阅参考书的独立思考的能力以及培养非常重要,我们在设计程序时,遇到很多不理解的东西,有的我们通过查阅参考书弄明白,有的通过网络查到,但由于时间和资料有限我们更多的还是独立思考。
最后通过课程设计我对数制转换的原理有了较为清楚的理解,可以解释原来不懂的程序,对应各种寄存器的跳转有了一定的了解,同时认识到由于寄存器的数量有限,我们有时侯不得不进行出栈和入栈了,这样可以解决有时候寄存器不够的情况,对应进一步学习汇编有了一定的推动作用,汇编基础有了一定的提高,这个课程设计让我对汇编重新复习一遍。
6.参考文献
[1]邹其洪.《微机原理》.电子工业出版社,2005
[2]彭虎.《微机原理与接口技术》.电子工业出版社,2008
[3]吴锡龙.《汇编语言程序设计》.高等教育出版社,2004
[4]陈怀琛.《汇编语言》.西安电子科技大学出版社,2000
[5]丁春利.《微机原理与通信接口》.清华大学出版社,2002
本科生课程设计成绩评定表
姓名
李闯
性别
男
专业、班级
电气0903班
课程设计题目:
产生随机数并运算的程序设计
课程设计答辩或质疑记录:
成绩评定依据:
评定项目
评分成绩
1)考勤、态度(10分)
2)查阅资料能力(10分)
3)系统设计(20分)包括系统实现原理、框图、方案的说明
4)编写程序,调试结果(25分)
5)设计说明书质量及规范化、参考文献充分(不少于5篇)(15分)
6)答辩(20分)
总分:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 29微机原理课程设计任务书 29 微机 原理 课程设计 任务书