微机原理
更新时间:2023-09-24 05:45:01 阅读量: IT计算机 文档下载
微机原理 课程设计报告书
2011-2012学年 第一学期 第16周-16周
课题 内容及要求 编写解HANOI塔谜题的程序。在这个谜题中,有三个轴:起始轴、中间轴和最终轴,要求将起始轴上N个自下而上叠有大小逐渐减小的盘子移到最终轴上并保持原来的次序。移动时允许把盘子暂存在中间轴上,但移动盘子需遵守两条规则: 1、一次只能移动一个盘子; 2、一个盘子只能放在比它大的盘子上。 要求从键盘输入N值及相关提示后,在屏幕能够显示盘子移动的方法。 解密HANOI塔 进度安排 1、查找资料,提出总体方案 1天 2、分析、设计、调试、实现 3天 3、检查、整理、写设计报告、小结 1天 学生姓名: 指导时间:2011-12-12到2011-12-16 任务下达 考核方式 指导老师
1
指导地点:F 楼 312 室 16周 16周 任务完成 1.评阅√ 2.答辩√ 3.实际操作√ 4.其它□ 系(部)主任
摘要
此次微机原理课设根据设计任务阐述汉诺塔汇编程序的设计基本思想与方案,绘制程序流程图,运用8086CPU提供的指令系统及DOS,调用编写程序源代码,同时给出说明注释。并利用计算机提供的软件工具对所编写程序进行汇编,连接,运行或调试运行并记录整个分析的过程与运行结果。
2
目录
一.课程设计任务及要求..................................... 4 二.课题基本思路 .......................................... 4 三.课题问题及解决方案 ..................................... 5 3.1 课题问题(1) 十六进制转换十进制. ..................... 5 3.2 课题问题(2)利用堆栈交换参数 ......................... 6 四.程序流程图 ............................................ 8 4.1主程序流程图........................................... 8 五.源程序 ............................................... 10 5.1主程序 ............................................... 10 5.2子程序 ............................................... 11 六.程序运行过程和结果.................................... 14 6.1运行过程 ............................................. 14 6.2当N=12 运行结果 ..................................... 15 6.3当N=3 运行结果 ..................................... 16 6.3当N=2 运行结果 ..................................... 16 七.心得体会 ............................................. 16 八.参考文献 ............................................. 17
3
一.课程设计任务及要求
编写解HANOI塔谜题的程序。在这个谜题中,有三个轴:起始轴(A)、中间轴(B)和最终轴(C),要求将起始轴上N个自下而上叠有大小逐渐减小的盘子移到最终轴上并保持原来的次序。移动时允许把盘子暂存在中间轴上,但移动盘子需遵守两条规则: 1、 2、
一次只能移动一个盘子。
一个盘子只能放在比它大的盘子上。
要求:从键盘输入N值及相关提示后,在屏幕能够显示盘子移动的方法。
成员: 组长:方院;
组员:王村松、苏青文、陈舒龙、方雪松、
任务分配: 查找资料、思路确定:苏青文、陈舒龙、方雪松;
程序编写、修改:方院,王村松
二.课题基本思路
递归调用:在调用一个函数的过程中又出现直接或间接的调用该函数本身。
A=起始轴,B=中间轴,C=最终轴
汉诺塔问题是一个典型的只有用递归方法(而不可能用其它方法)解决的问题。 基本思路:把N个盘子从A针移到C针的工作分为三个步骤来完成: 第一步:将A上的N-1个盘子借助C针先移动到B针上; 第二步:把A针上剩下的一个盘子移动到C针上; 第三步:把N-1个盘子从B针上借助A针移动到C针上。 例如: 当N 取3 时, 上面的三步为:
第一步: 将A 上的2 个盘子借助C 针先移动到B 针上; 第二步: 把A 针上剩下的1 个盘子移动到C 针上; 第三步: 把2 个盘子从B 针上借助A 针移到C针上。
其中的第二步可以直接实现,第一步和第三步可用递归方法再分别 分解为三步现:
4
第一步分解为:将A 针上的1 个盘子从A 针移动到C 针上;
把A 针上的1 个盘子从A 针移动到B 针上; 把C 针上的1 个盘子从C 针移动到B 针上。
第二步分解为: 将B 针上的1 个盘子从B 针移动到A 针上; 把B 针上的1 个盘子从B 针移动到C 针上; 把A 针上的1 个盘子从A 针移动到C 针上。
这样分解后, 每一步都是移动一个盘子, 所以都可以直接完成。将以上的步骤综合起来, 就可以得到N 取3 时的移动步骤为: A→C, A→B, C →B, A→C, B →A, B→C,A→C
在上面的第一步和第三步中, 完成的功能都是把N- 1 个盘子从一个针上移动到另一个针上, 采取的方法是一样的, 只是针的名字不同。为了使之一般化, 可以将第一步和第三步表示为: 将“SRC”针上的N- 1 个盘子借助“TEMP”针移动到“DST”针上。这样, 在第一步中, SRC、TEMP、DST 和A、B、C 的对应关系为: SRC A, DST B, TEMP C; 而在第三步中的对应关系为: SRC B, DST C, TEMP A。由以上的分析, 可以将上面的三个步骤归为以下两类操作:
(1) 将N- 1 个盘子从一个针上移动到另外一个针上( N> 1) , 这是一个递归过程; (2)把1 个盘子从一个针上移动到另外一个针上, 这可以直接完成。
三.课题问题及解决方案
3.1 课题问题(1) 十六进制转换十进制.
十进制数据输入的主要问题是如何将键盘上输入的数据构造成一个对应的十进制数据,比如从键盘分别输入9、5,如何将这两个数字组合成95,这是我们要解决的问题。显然,接收顺序应该是,从键盘接收9 之后,再接收5 的时候,应该用9*10+5,构成95,以此类推。三个数字组成957也是如此,再接收7 的时候,用当前已经接收的95*10+7,构成957。因此,我们可以总结为,对每一个新接收的数据的处理都是由前一个数乘以10, 再加上当前数,这样,对十进制数据的接收便可以构成一个循
5
CBW;将字节AL转变为字AX XCHG ax,bx MOV cx,10 MUL cx XCHG ax,bx ADD bx,ax JMP input
CONT:MOV ax,bx;将输入的数放入AX
MOV SI,WORD PTR'A' MOV BX,WORD PTR'B' MOV DI,WORD PTR'C' PUSH AX PUSH SI PUSH BX PUSH DI CALL HANOI MOV AH,4CH INT 21H INCLUDE 2.ASM CODE ENDS END START
5.2 子程序
HANOI PROC; PUSH BP MOV BP,SP MOV AX,10[BP]
11
MOV SI,8[BP] MOV BX,4[BP] MOV DI,6[BP] CMP AL,1
JE MOVENE; 若只剩下1 个盘子, 转向MOVENE 直接移动 DEC AX PUSH AX PUSH SI PUSH BX PUSH DI
CALL HANOI; 若数量不为1, 将数量减1,重新设置源针、过渡针、目的针, 把各参数
压入堆栈,再调用HANOI 子程序。即: 将n- 1 个盘子从源针借助目的针移动到过渡针上( 前面分析中的第一步) 。
MOV SI,8[BP] MOV DI,4[BP] PUSH SI PUSH DI
CALL MOVE; 调用MOVE 子程序, 将源针上剩下的1 个盘子直接移动到目的针上( 前
面分析中的第二步)
MOV AX,10[BP] MOV SI,6[BP] MOV BX,8[BP] MOV DI,4[BP] DEC AX PUSH AX PUSH SI
12
PUSH BX PUSH DI
CALL HANOI;重新设置各参数并压入堆栈, 再调用HANOI 子程序, 将n- 1 个盘子从
过渡针借助源针移动到目的针上( 前面分析中的第三步) 。
JMP RETURN
MOVENE: MOV SI,8[BP] MOV DI,4[BP] PUSH SI PUSH DI
CALL MOVE;压入参数, 调用MOVE 完成一个盘子的移动。
RETURN: POP BP
RET 8;由于每次调用HANOI 子程序都通过堆栈传递了四个字的参数, 修正栈顶指针, 释放参数单元, 以保证栈顶位置的正确。
HANOI ENDP MOVE PROC NEAR PUSH BP MOV BP,SP MOV AX,6[BP] MOV SRC,AL
MOV AX,4[BP] MOV DST,AL MOV AH,9 LEA DX,DISP
INT 21H;取出源针和目的针参数,并输出移动的方法。 POP BP RET 4 MOVE END
13
所以返回时要
六.程序运行过程和结果
此程序解决了用PC汇编语言编程(递归方法)解决了汉诺塔问题。
6.1运行过程
图4--运行过程
14
6.2 当N=12运行结果
图5—输入N=12
图6--N=12时显示结果
15
6.3当N=3运行结果
图7--N=3的运行结果
6.3当N=2运行结果
图8--N=2的运行结果
16
七.心得体会
本次的课程设计设计思想难度较高,虽然没有涉及硬件,但实施起来难度还
是挺大的。在我平时的学习知识中,所用到的汇编知识是相当少的,而这次要用到微机原理的部分知识。本课设的任务分配,我是负责编写子程序,这些是我以往很少接触过的,在书籍和队友的帮助下,我解决了大部分问题,当然做得并不是相当好,改进的空间很大。通过此次编程,我对汇编语言及微机原理有了初步的认识,同时让我意识了汇编语言功能的强大。也让我重温并巩固了基础知识,真正的做到了学以致用。但此次课程设计的时间太长,同时安排在期末,这时我们的课设都挤到一起。这对我们的安排时间造成了挺大的影响,希望下次能改进
八.参考文献
1.谭浩强.<< C 程序设计>>. 北京: 清华大学出版社, 2005.
2.郑初华,胡景春.<<汇编语言、微机原理及接口技术(第三版)>>.电子工业出版社。
17
正在阅读:
微机原理09-24
2023年幼儿园开展秋游采摘活动总结03-22
冬钓馆 - 图文05-27
2019-2020学年九年级历史上册 第10课 资本主义时代的曙光同步练05-23
oracle 上机考试试题与答案01-13
财务与成本管理第十六章练习及答案11-22
浙江大学城市学院英语BB1词汇测试答案 特别鸣谢寒空卧雪供稿05-17
人教五四制九年级初中化学《第十单元 酸和碱 课题2 酸和碱的中和反应》 - 3001-04
资产评估案例(20) - 图文12-17
- 2011年度重庆市科学技术奖励拟奖个人和成果名单 - 图文
- 轴承知识汇总
- 高中高二选修3 旅游地理 测试题
- 选择
- 2012《管理方法与艺术》(领导科学与艺术)课程考核册答案(全)
- 卓越绩效评价准则试卷
- 学习总结091024
- 2013年初中信息技术考试题库
- 如何撰写和发表科研论文 学术活动的总结
- 黄帝内经养生语录
- 渣浆泵基础知识
- 2014版自动供水系统库项目(立项及贷款用)可行性研究报告编制机构服务流程及案例展示 - 图文
- 在2019年春学期开学工作会议上的讲话稿(发言稿)
- 线损分析报告(定稿)
- 计量经济学实验报告模板
- 蛋白质分子设计
- 18-1-(2)2008-2009学年度第二学期工作总结
- 试述公路桥梁施工中出现的质量问题及控制措施
- 关于建设工程安全防护、文明施工措施费用监督管理若干事项的通知
- VCP-621 VUE考试中心题库中英文对照文档