微机原理课程设计报告。
--电信0802 3080503030李雪冰。
一、实验目的。
结合微型计算机原理课程的学习,进一步巩固已学习知识,同时针。
对计算机原理知识的具体应用,学会对系统中dos和bios的使用。学会使用编辑程序—edit,弄懂汇编程序的上机过程以及如何运用tdebug软件进行汇编程序的调试。
二、实验内容。
1、字符串匹配设计。
为掌握提示信息的设置方式及读取键入信息的方法。编写程序实现两个字符串的比较。如相同,则显示”match”,否则,显示“no match”.2、从键盘输入数据并显示的设计。
为掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为asii码的原理。编写程序,将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。3、字符和数据的匹配。
为掌握字符和数据的显示方法。编写程序,先显示信息“inputstring ,the end flag is $”再接收字符。如为0-9,则计数器加1,并显示数据非数字,则直接显示,但不计数。
4、响铃的设计。
为掌握响铃的使用方法。编写程序,从键盘接收输入字符,如是数字n次;如不是数字,则不响。
5、将键盘输入的小写字母转换成大写字母的设计。
为了解小写字母和大写字母在计算机内的表示方法,并将其中的小写字母转变为大写字母,然后显示在屏幕上。6、排序设计。
为掌握用汇编语言编写排序的思路和方法。编写程序,从首地址为1000h开始存放50个数,要求设计程序将这些数由小到大排序,排序后的数,仍放在该区域内。7、学生成绩排名设计。
为进一步熟悉排序方法。编写程序,将0-100之间的30个成绩存入首地址为1000h的存储区中。1000h+i表示学号为i学生成绩。
编写程序使得在2000h开始的区域排出名次表。2000h+i为学号i的学生的名次。8、计算n!
的设计。
为了解高级语言中的数学函数是怎样在汇编语言一级上实现的。编写计算n!的程序。
数值n由键盘输入,将结果在屏幕上输出。n的范围为0-65535.即刚好能被一个16位寄存器容纳。
三、计算n!程序设计。
1、编程提示。
1)编制阶乘程序的难点在于随着n的增大,其结果不是寄存器所容纳。这样就必须把结果放在一个内存缓冲区中。然而,乘法运算限制于只能两个字相乘,因此要确定好算法,依次从缓冲区中取数,进行两字相乘,并将dx中的高16位积作为产生的进位。
2)程序根据阶乘的定义:n=n*(n-1)(n-2)(n-3)….2*1,从左往右依次计算,结果保存在缓冲区buf中,缓冲区buf按结果由低到高依次排序。
程序首先将bp初始化为存放n值,然后使bp减1,直至变化为1.每次让bp与buf中的字单元按由低到高的次序相乘,低位结果ax仍保存在相应的buf字单元中,最高位结果dx则送到进位字单元cy中,以作为高单元相乘时从低字来的进位。初始化cy为0.
计算结果的长度随着乘积运算而不断增长,由字单元len指示。当最高字单元与bp相乘时,若dx不为0,则结果长度要扩展。
3)读键子程序的编写:这个程序的编写的难点主要在于数字的拼编写程序时,使用dos 21h 01功能一位一位的输入数字,输入回车键停止输入。首先判断输入的键值是否为数字,在保证是数字的情况下,将键值减去30h保存在bl中,bp中保存上一次组合的键值结果,bp乘以10后加上bl中的键值就组合成当前输入键值。
bp中就得到了最终输入的值。
4)显示子程序的编写:该子程序将结果按16进制显示出来,显示len次,bx存放待显示结果的地址,待显示的值放在bp中,bp中的值需要显示4次,每次将bp的高四位移进dx的低四位,dx加上30h,就可以显示出数值。
2、程序流程图。
入口。有进位?
请显示输入n值。
高位结果dx加一。
调getnum,读取n值并存放在bp中。
低位结果ax送【si+bx]中。
bp=0或1?
nsi指向缓冲区buf首址。
高位结果dx送进位单元cy
偏移指针指向buf下一字单元。
初始化buf为存放n值。
cx减1为0?
nbp值减1
dx=0?bp=0或1?
len加1n
进位单元cy及偏移指针bx清0
dx送[si+bx]单元中。
y当前结果长度len送cx
yysi+bx]字单元与bp相乘。
buf中存结果。
低位结果ax与进位cy相加。
y显示“the result is:”调disp,显示计算结果。
返回dos3、程序清单。
stacksegmentdw32 dup(?)
stackends
堆栈段datasegment
m1db 'input the n',0dh,0ah,'$交互信息。
m2db 0dh,0ah,'the result is:',
lendw 1;结果长度,初始化为1cydw;进位字。
ndw 10;乘数因子(在getnum中数字拼接时用到)buff dt 256 dup (?dataends
数据段code segment
assume cs:code,ds:datass:stackstart: movax,datamovds,axmoves,axmovax,stack
movss,ax
movsi,offset buff
movdx,offset m1movah,09hint21h
call getnum
cmpbp,0jzexit2
cmpbp,1jzexit2
mov[si],bpppp:decbpcmpbp,1
jzexit3mov word ptr[cy],0xorbx,bx
movcx,[len]
mmm:movax,[si+bx]mulbp
addax,[cy]jnclllincdx
lll:mov[si+bx],axmov[cy],dx
addbx,2
loop mmmcmpdx,0
jzpppincword ptr [len]
初始化;显示交互信息;键入键值,按回车停止输入,bp中存放键值;键值为0或1时,结果为1
初始化。mov[si+bx],dx
jmpppp
exit2: mov word ptr [si],1;显示结果并退出exit3: movdx,offset m2movah,09hint21hcall dispmovah,4ch
int21h
显示子程序,输出键值的16进制形式dispprocnear
movcx,[len]movbx,cx
shlbx,1;bx为显示区域指针,初始化时为最后一个字的地址subbx,2
lop1:movbp,[si+bx];外循环显示len次,每次显示一个字。
pushcx;内循环,循环4次每次显示16进制的一位movcx,4lop2:clc
xordx,dx
rclrclrclrcl
bp,1dx,1bp,1dx,1
rclbp,1rcldx,1rclbp,1rcldx,1
cmpdx,0ah
jbeadddx,07he:adddx,30hmovah,02hint21hloop lop2popcx
decbxdecbxloop lop1
movdl,'h'
movah,02hint21h
e1:ret
dispendp
输入子程序,键值保存在bp中getnum procnearpushbxxorbp,bp
l1:movah,01h
int21h
movbl,alcmpbl,0dhjzexit1
cmpbl,30hjbl1cmpbl,3ahjnbl1
subbl,30h
movax,bpmul[n]movbp,axaddbp,bxjmpl1exit1: popbxretgetnumendpcodeendsend start
4、运行结果input the n1000
the result is:
四、心得体会。
时间过的很快,为期一周的课程设计已经接近尾声,回想这一周,我有了不少的收获。我非常喜欢编程,调试的过程固然痛苦,但是每当我把一个程序调试成功时,心里那份喜悦是无法用语言表达的。因此,对于这次的课程设计我没有感到厌烦,而是怀着跃跃欲试的心态去做的。
第一天,老师给我们讲解了课程设计的要求和需要做的内容,当时觉得自己编完个程序应该没问题吧,可是当我开始编的时候我心里打起了鼓,微机原理学过的时间太长了,很多指令都忘记了,调试软件和编译软件都不知道怎么用了,而且很容易和刚刚学过的51编程混淆,只是感觉头里一片空白,无从下手。于是我赶紧找来课本,对照指导书从前面比较简单的开始做一点一点的回忆。
字符串匹配设计、从键盘输入数据并显示设计、字符和数据的显示设计、响铃设计、将键盘输入的小写字母转化成大写字母的设计。通过这5个程序的编写,我基本了解了21h功能键的输入输出功能的使用以及一些注意事项。比如说a(输入字符串功能),它的缓冲区定义是有固定格式的;2、字符串输出时,缓冲区末尾一定要加‘$‘否则会出现乱码dh、0ah同时输出才能有回车的功能;4、asii码和键值转换时,数字和字符所加减的偏移值是不同的等等。
编完了那五个程序,我开始尝试编一些难度大一点的程序,我选择了排序和计算n!,参考书上的冒泡排序法,我很快就把排序做好了,可是显示和输如成了一大难题,输入是要输入两位数的,我使用01h功能一位一位输入,每一位存放在一个字节单元里,再其他变。
换处理,进行解决了问题。我还发现了利用子程序的好处,编写子程序,可以使问题得到简化,便于理解程序,使程序更加模块化、规范化。一些显示和键入的程序也就不用每次都编写,只要调用一下,很方便。
这次课程设计结束了,很开心自己能学到这么多的东西,以后我还是会努力学习编程,让自己在编程方面有更大的进步。
课程设计报告格式 课程设计
洛阳理工学院。课程设计说明书。课程名称。设计课题。专业。班级。学号。姓名。完成日期2014年12月26日。问题描述 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的内容要求。基本要求 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的基本要求。测试数据 小四宋体,行间距单倍行距,每...
课程设计总结,课程设计报告
课程设计总结,课程设计报告。3.尝试应用项目管理软件进行项目进程的规划管理 绘制甘特图,不作硬性要求 二 选题说明。人事管理是企业信息管理的重要部分,面对大量的人事工资信息,财务部门采用人力处理将浪费大量的时间 人力和物力,且数据的准确性低。因此,开发一个界面友好,易于操作的人事工资管理软件进行自动...
课程设计 课程设计报告格式
学校名。课程设计报告。课程名称 c语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...