课程设计报告

发布 2022-10-01 03:23:28 阅读 5698

微机原理课程设计报告。

--电信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语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...