微机原理(用汇编语言实现电话本功能)课程设计.doc

上传人:文库蛋蛋多 文档编号:3039395 上传时间:2023-03-09 格式:DOC 页数:13 大小:664.50KB
返回 下载 相关 举报
微机原理(用汇编语言实现电话本功能)课程设计.doc_第1页
第1页 / 共13页
微机原理(用汇编语言实现电话本功能)课程设计.doc_第2页
第2页 / 共13页
微机原理(用汇编语言实现电话本功能)课程设计.doc_第3页
第3页 / 共13页
微机原理(用汇编语言实现电话本功能)课程设计.doc_第4页
第4页 / 共13页
微机原理(用汇编语言实现电话本功能)课程设计.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《微机原理(用汇编语言实现电话本功能)课程设计.doc》由会员分享,可在线阅读,更多相关《微机原理(用汇编语言实现电话本功能)课程设计.doc(13页珍藏版)》请在三一办公上搜索。

1、微机原理 课 程 设 计 报 告学 号: 200604135156 姓 名: 朱 庆 春 学 院: 信息科学与工程学院 专 业: 电子信息工程 班 级: 0605班 指导教师: 熊 庆 国 一、 课程设计目的运用所学的汇编语言写一个具有电话本功能的程序,达到提高动手能力及解决问题的能力。二、 设计要求1、 能够存储50个电话号码,包括人名(20个字符)、电话号码(8个字符)。2、 系统可以随时接受新的人名和电话号码。3、 具有随时查询号码的功能。要求输入人名后,在屏幕上显示相应的电话号码。4、 具有删除号码的功能。要求输入人名后,系统自动删除相应的号码。5、 运行此系统后,要显示菜单选择的功能

2、。三、 程序设计思想每个人的信息包括人名和号码,人名占20个字节,外加一个$字符,电话号码占8个字节,外加一个$字符,所以每个人的信息一共占30个字节。可以开辟一片连续的存储区,包含30*50即1500个字节,即ZHU DB 1500 DUP(0)。另外再定义四个需要输入信息的变量,依次为:ZHU1 DB 21,0,21 DUP(0) ;搜索姓名变量 ZHU2 DB 21,0,21 DUP(0) ;添加姓名变量 ZHU3 DB 9,0,9 DUP(0) ;添加号码变量ZHU4 DB 21,0,21 DUP(0) ;删除姓名变量添加新的人名和号码时,可以通过10号功能调用,先将人名和号码暂时存放

3、在ZHU2和ZHU3中,然后在逐字节地复制到ZHU 中,记住在人名和号码末尾加上$字符。查询号码时,将输入的要查询的人名存放在ZHU1中,然后再每隔30个字节与ZHU中的人名逐个字符地比较,若完全相等,则将人名下面的号码输出,否则说明要查询的人名不存在。删除时,先输入要删除的人名,同查询相似,按同样的方法在ZHU中寻找相应的数据区,若找到了,则从找到时下面一个人的信息开始,统一向上移动30个字节,若没有找到,则说明要删除的人名的信息不存在。四、 程序框图 五、程序清单DATAS SEGMENT OBF1 DB Welcome to use this phone book!$ OBF2 DB P

4、lease choose the function buttom(1/2/3):$ OBF11 DB 1 for inputing$ OBF16 DB 2 for searching$ OBF17 DB 3 for deleting$ OBF18 DB Other for exiting$ OBF3 DB Please input a new name(within 20 words):$ OBF4 DB please input the number(within 8 numbers):$ OBF5 DB Continue to input?(y/n)$ OBF6 DB Are you su

5、re to end the phone book?(y/n)$ OBF7 DB Please input a name you want to search(within 20 words):$ OBF8 DB Got it,it is:$ OBF9 DB Have not found ,it does not exit!$ OBF10 DB Continue to search?(y/n)$ OBF12 DB Please input the name you want to delete(within 20 words):$ OBF13 DB The name you want to de

6、lete does not exit!$ OBF14 DB Success to delete!$ OBF15 DB Continue to delete?(y/n)$ ZHU1 DB 21,0,21 DUP(0) ;搜索(查询)姓名变量 ZHU2 DB 21,0,21 DUP(0) ;添加姓名变量 ZHU3 DB 9,0,9 DUP(0) ;添加号码变量 ZHU4 DB 21,0,21 DUP(0) ;删除姓名变量 ZHU DB 1500 DUP(0)DATAS ENDSSTACKS SEGMENT DW 32 DUP(0) STACKS ENDSCODES SEGMENT ASSUME C

7、S:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATAS MOV DS,AX MOV BP,-30BEGIN:CALL NEXTLINE MOV DX,OFFSET OBF1 ;显示菜单选择界面 MOV AH,9 INT 21H CALL NEXTLINE ;调用换行函数 MOV DX,OFFSET OBF2 MOV AH,9 INT 21H CALL NEXTLINE MOV DX,OFFSET OBF11 MOV AH,9 INT 21H CALL NEXTLINE MOV DX,OFFSET OBF16 MOV AH,9 INT 21H CALL NEXT

8、LINE MOV DX,OFFSET OBF17 MOV AH,9 INT 21H CALL NEXTLINE MOV DX,OFFSET OBF18 MOV AH,9 INT 21H CALL NEXTLINE MOV AL,0 MOV AH,1 INT 21H CMP AL,1 ;选择1,输入信息 JE INPUT CMP AL,2 ;选择2,查询信息 JE SEARCH CMP AL,3 ;选择3,删除信息 JE DELETE JMP STOP INPUT: CALL NEXTLINE ADD BP,30 MOV SI,BP S2:MOV BYTE PTR ZHUSI,0 ;清除ZHU中

9、最后一个人的信息后面的30 INC SI ; 个字节中非0的单元 CMP SI,0 JNE S2 MOV SI,BP MOV DX,OFFSET OBF3 MOV AH,9 INT 21H MOV DX,OFFSET ZHU2 ;输入的人名存放在ZH2中 MOV AH,10 INT 21H MOV BX,-1 S5:INC BX ;为避免ZHU2中刚输入的信息没有完全覆 CMP BYTE PTR ZHU2BX+2,0DH ;盖上一次的信息,将出车符(0DH)及其后 JNE S5 ;面的字节归0 S6:MOV BYTE PTR ZHU2BX+2,0 INC BX CMP BX,20 JNE S6

10、 MOV BYTE PTR ZHU2BX+2,0DH MOV CX,20 MOV BX,-1 S1:INC BX ;将ZH2复制到ZHU中 MOV DL,BYTE PTR ZHU2BX+2 MOV BYTE PTR ZHUSI+BX,DL LOOP S1 MOV BYTE PTR ZHUSI+20,$ CALL NEXTLINE MOV DX,OFFSET OBF4 MOV AH,9 INT 21H MOV DX,OFFSET ZHU3 MOV AH,10 INT 21H MOV BX,-1 S7:INC BX ;为避免刚输入的号码没有完全覆盖上一次的号码,将这次输 CMP BYTE PTR

11、ZHU3BX+2,0DH ; 入的号码的最后一位的回车符(0DH)换成$ JNE S7 MOV BYTE PTR ZHU3BX+2,$ ADD SI,21 MOV CX,8 MOV BX,-1 S3:INC BX MOV DL,BYTE PTR ZHU3BX+2 MOV BYTE PTR ZHUSI+BX,DL LOOP S3 MOV BYTE PTR ZHUSI+8,$ CALL NEXTLINE MOV DX,OFFSET OBF5 MOV AH,9 INT 21H CALL NEXTLINE MOV AH,1 INT 21H CMP AL,Y JE INPUT CMP AL,y JE I

12、NPUT JMP BEGINSTOP: CALL NEXTLINE MOV DX,OFFSET OBF6 MOV AH,9 INT 21H MOV AL,0 MOV AH,1 INT 21H CMP AL,Y JE EXIT CMP AL,y JNE BEGIN EXIT:MOV AX,4C00H ;退出电话本程序 INT 21H SEARCH:CALL NEXTLINE MOV DX,OFFSET OBF7 ;输入你要搜索的名字,存放在ZHU1中 MOV AH,9 INT 21H MOV DX,OFFSET ZHU1 MOV AH,10 INT 21H MOV BX,-1 L5:INC BX

13、 ;为避免ZHU1刚输入的信息没有完全覆盖上一次的信息, CMP BYTE PTR ZHU1BX+2,0DH ;将回车符(0DH)及其后面的字节归0 JNE L5 L6:MOV BYTE PTR ZHU1BX+2,0 INC BX CMP BX,20 JNE L6 MOV BYTE PTR ZHU1BX+2,0DH CALL NEXTLINE MOV CX,50 ;在ZHU中搜索与ZHU1相等的字符串 MOV SI,-30 L1:ADD SI,30 MOV BX,-1 L2:INC BX CMP BX,20 JE L3 PUSH AX MOV AL,BYTE PTR ZHUSI+BX MOV

14、AH,BYTE PTR ZHU1BX+2 CMP AL,AH POP AX JE L2 LOOP L1 MOV DX,OFFSET OBF9 ;没有搜索到 MOV AH,9 INT 21H JMP L4 L3:MOV DX,OFFSET OBF8 ;搜索到了 MOV AH,9 INT 21H INC BX ADD BX,OFFSET ZHU ADD BX,SI MOV DX,BX MOV AH,9 INT 21H L4:CALL NEXTLINE MOV DX,OFFSET OBF10 ;继续搜索吗? MOV AH,9 INT 21H MOV AL,0 MOV AH,1 INT 21H CMP

15、 AL,Y JE SEARCH CMP AL,y JE SEARCH JMP BEGIN DELETE:CALL NEXTLINE MOV DX,OFFSET OBF12 ;输入你要删除的名字,存放在ZHU4中 MOV AH,9 INT 21H MOV DX,OFFSET ZHU4 MOV AH,10 INT 21H MOV BX,-1 D6:INC BX ;为避免ZHU4刚输入的信息没有完全覆盖上一次的信息, CMP BYTE PTR ZHU4BX+2,0DH ;将回车符(0DH)及其后面的字节归0 JNE D6 D7:MOV BYTE PTR ZHU4BX+2,0 INC BX CMP B

16、X,20 JNE D7 MOV BYTE PTR ZHU4BX+2,0DH CALL NEXTLINE MOV CX,50 MOV SI,-30 D1:ADD SI,30 MOV BX,-1 D2:INC BX CMP BX,20 JE D3 PUSH AX MOV AL,BYTE PTR ZHUSI+BX MOV AH,BYTE PTR ZHU4BX+2 CMP AL,AH POP AX JE D2 LOOP D1 MOV DX,OFFSET OBF13 ;你要删除的姓名不存在 MOV AH,9 INT 21H JMP D5 D3:PUSH AX D4:MOV AL,BYTE PTR ZHU

17、SI+30 MOV BYTE PTR ZHUSI,AL INC SI CMP SI,0 JNE D4 POP AX SUB BP,30 MOV DX,OFFSET OBF14 ;删除成功! MOV AH,9 INT 21H D5:CALL NEXTLINE MOV DX,OFFSET OBF15 ;要继续删除吗? MOV AH,9 INT 21H MOV AL,0 MOV AH,1 INT 21H CMP AL,Y JE DELETE CMP AL,y JE DELETE JMP BEGIN NEXTLINE PROC ;换行函数 MOV DL,0AH MOV AH,2 INT 21H MOV

18、 DL,0DH MOV AH,2 INT 21H RETNEXTLINE ENDPCODES ENDS END START六、程序测试结果调试以上程序,生成.exe文件后,运行该.exe文件,得到如下结果:图(1)先选择1号功能,即输入信息,得到:图(2)选择n,即返回菜单选择界面,并选择2号功能,即查询信息,得到:图(3)选择n,返回显示菜单选择界面,选择3号功能,即删除信息,得到:图(4)选择n,又回到菜单显示界面,重新查询信息,可以得到:图(5)选择n,返回菜单显示界面,按任意键,得到:图(6)选择n,结束电话本系统。 分析:选择1号功能时,输入了zhu qing chun,952096

19、38;zhang lei,85209637;qin jun,52093478一共三个人的号码信息,选择2号功能时,查询了zhang lei和qin jun的信息,均正确,当输入cheng yuan xi时,显示Have not found,it does not exit!表明无此人信息。当选择3号删除功能时,先删除了qin jun的信息,后删除cheng yuan xi时显示The name you want to delete does not exit!表明电话本中原来就没有存储cheng yuan xi的信息。当再次查询时,没有qin jun的信息,而zhang lei和zhu qin

20、g chun的信息仍然保存。由以上测试表明此电话本系统能正确地实现添加、查询和删除的功能,满足设计要求。七、程序调试过程中遇到的问题即解决方法1、当要让显示器显示一个字符串时,一定要在字符串的结尾加上一个$字符,这个$字符非常重要,第一次,由于粗心,从字符串OBF5起,后面的字符串的末尾都忘了加$,结果造成程序在运行时,跳过了很多语句,直接将OBF5及OBF5后边的所有的提示性语句都输了出来。因为系统在输出时,只有在遇到$时才结束,若没有结束字符$,则系统一直将数据段的数据顺序输出,知道遇到$字符为止。2、在编写子函数时,一定要在其结尾加上RET,然后加上结束标志ENDP。在编写换行子函数NE

21、XTLINE时,由于在结尾没有加RET,结果程序不能正确运行,而且总是自动终止了程序,加上RET后,即可正确运行。3、在实现查询功能时,开始总是出现有的人名的信息第一次可以查询出来,而同样的人名在第二次、第三次查询时,则显示不存在。经过反复思考,发现在第二次输入查询的人名时,由于所有的查询都共用一个变量ZHU1,这就导致第二次输入时,由于人名比第一次短,没有完全覆盖,造成上次的人名和这次输入的人名相叠加了,结果和ZHU中所有的人名比较时,就不能查询到第二次实际输入的人名。同样的问题也出现在删除函数中和添加函数(输入函数)中。为此,可将输入、查询和删除中的ZHU2,ZHU1和ZHU4中20个字符

22、的位置中没有使用的统一置0。4、在输入时,如果输入的电话号码没有8位,则在查询时,出现上一个人的电话号码的头几位出现在要查询的人的号码的后几位中。显然,这也是由于输入的电话号码共用一个变量,若电话号码长短不一,则必然会不完全覆盖,导致查询时的错误结果。这种情况,可以在输入电话号码时,即在10号功能调用时,将电话号码末尾后边的回车符改为$,即可避免这种情况。八、课程设计心得本次微机原理课程设计为期一周,虽然时间不长,但经过我的辛苦努力,我感觉我圆满地完成了老师布置的任务,而且比老师所要求的功能稍微多一些!在整个设计过程中,我花费了大量的时间和精力,学到了很多东西,也体会到了成功的乐趣!这次设计的

23、电话本,是要求用汇编语言编写,以前用C语言写过类似的东西,感觉蛮简单,但是用汇编语言来实现,觉得十分棘手,毕竟我们的汇编语言学得太浅显了。但是,我还是按照以前用C语言写大程序的思路,将问题模块化,具体化,用课本上最基础的汇编语句一步一步地完成任务,整个代码276行,也算是比较长的程序了,而且是我独立完成的,还是很有成就感的。这其中调试是最复杂的,遇到的问题很多很多,远不止上面列举的四个。最终我还是全部都克服了,还是蛮佩服我自己的。相信我的编程能力又有了提高。正与这次课程设计的目的所说:提高动手能力及解决问题的能力。我相信经过这一个星期的努力,我的动手能力和解决问题的能力自然有所提高。不过这次的设计也有不足之处,就是每次运行此电话本系统之后,都必须重新输入人名和电话号码。当系统退出时,人名和电话号码不能保存到磁盘上,当下次运行时,里面的记录又为空了。汇编语言应该有保存到磁盘的功能,只是我们学习的知识水平有限而已,看来,今后要更加深入地学习汇编语言了,为以后学习单片机等后续课程打好基础。评阅意见:指导教师: 年 月 日课程设计成绩:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号