5653612441用汇编语言实现电话本功能课程设计.doc

上传人:沈*** 文档编号:68170251 上传时间:2022-04-01 格式:DOC 页数:13 大小:652KB
收藏 版权申诉 举报 下载
5653612441用汇编语言实现电话本功能课程设计.doc_第1页
第1页 / 共13页
5653612441用汇编语言实现电话本功能课程设计.doc_第2页
第2页 / 共13页
5653612441用汇编语言实现电话本功能课程设计.doc_第3页
第3页 / 共13页
资源描述:

《5653612441用汇编语言实现电话本功能课程设计.doc》由会员分享,可在线阅读,更多相关《5653612441用汇编语言实现电话本功能课程设计.doc(13页珍藏版)》请在装配图网上搜索。

1、微机原理 课 程 设 计 报 告一、 课程设计目的运用所学的汇编语言写一个具有电话本功能的程序,达到提高动手能力及解决问题的能力。二、 设计要求1、 能够存储50个电话号码,包括人名(20个字符)、电话号码(8个字符)。2、 系统可以随时接受新的人名和电话号码。3、 具有随时查询号码的功能。要求输入人名后,在屏幕上显示相应的电话号码。4、 具有删除号码的功能。要求输入人名后,系统自动删除相应的号码。5、 运行此系统后,要显示菜单选择的功能。三、 程序设计思想每个人的信息包括人名和号码,人名占20个字节,外加一个$字符,电话号码占8个字节,外加一个$字符,所以每个人的信息一共占30个字节。可以开

2、辟一片连续的存储区,包含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号功能调用,先将人名和号码暂时存放在ZHU2和ZHU3中,然后在逐字节地复制到ZHU 中,记住在人名和号码末尾加上$字符。查询号码时,将输入的要查询的人名存放在ZHU1中,然后再每隔30个字节

3、与ZHU中的人名逐个字符地比较,若完全相等,则将人名下面的号码输出,否则说明要查询的人名不存在。删除时,先输入要删除的人名,同查询相似,按同样的方法在ZHU中寻找相应的数据区,若找到了,则从找到时下面一个人的信息开始,统一向上移动30个字节,若没有找到,则说明要删除的人名的信息不存在。四、 程序框图 五、程序清单DATAS SEGMENT OBF1 DB Welcome to use this phone book!$ OBF2 DB Please choose the function buttom(1/2/3):$ OBF11 DB 1 for inputing$ OBF16 DB 2 f

4、or 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 sure to end the phone book?(y/n)$ OBF7 DB Please input a name you want to search(

5、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 delete does not exit!$ OBF14 DB Success to delete!$ OBF15 DB Continue to delete?(

6、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 CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATAS MOV DS,AX MOV BP,-30BEGIN:CALL NEX

7、TLINE 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 NEXTLINE MOV DX,OFFSET OBF17 MOV AH,9 INT 21H CALL NEXTLINE MOV DX,OFFSET OBF18 MOV

8、 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中最后一个人的信息后面的30 INC SI ; 个字节中非0的单元 CMP SI,0 JNE S2 MOV SI,BP MOV DX,OFFSET OBF3 M

9、OV 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 MOV BYTE PTR ZHU2BX+2,0DH MOV CX,20 MOV BX,-1 S1:INC BX ;将ZH2复制到ZHU中 MOV DL,BY

10、TE 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 ZHU3BX+2,0DH ; 入的号码的最后一位的回车符(0DH)换成$ JNE S7 MOV BYTE PTR ZHU3BX+2,$ ADD SI,21 M

11、OV 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 INPUT JMP BEGINSTOP: CALL NEXTLINE MOV DX,OFFSET OBF6 MOV AH,9 INT 21H MOV AL,0

12、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 ;为避免ZHU1刚输入的信息没有完全覆盖上一次的信息, CMP BYTE PTR ZHU1BX+2,0DH ;将回车符(0DH)及其后面的字节归0 JNE

13、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 AH,BYTE PTR ZHU1BX+2 CMP AL,AH POP AX JE L2 LOOP L1 MOV DX,OFFSET OBF9 ;没有搜索到 M

14、OV 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 AL,Y JE SEARCH CMP AL,y JE SEARCH JMP BEGIN DELETE:CALL NEXTLINE MOV DX,OFFSET

15、 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 BX,20 JNE D7 MOV BYTE PTR ZHU4BX+2,0DH CALL NEXTLINE MOV CX,50 MOV SI,-30 D1:ADD

16、 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 ZHUSI+30 MOV BYTE PTR ZHUSI,AL INC SI CMP SI,0 JNE D4 POP AX SUB BP,30 MOV DX,OFFS

17、ET 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 DL,0DH MOV AH,2 INT 21H RETNEXTLINE ENDPCODES ENDS END START六、程序测试结果调试以上程序,生成.

18、exe文件后,运行该.exe文件,得到如下结果:图(1)先选择1号功能,即输入信息,得到:图(2)选择n,即返回菜单选择界面,并选择2号功能,即查询信息,得到:图(3)选择n,返回显示菜单选择界面,选择3号功能,即删除信息,得到:图(4)选择n,又回到菜单显示界面,重新查询信息,可以得到:图(5)选择n,返回菜单显示界面,按任意键,得到:图(6)选择n,结束电话本系统。 分析:选择1号功能时,输入了zhu qing chun,95209638;zhang lei,85209637;qin jun,52093478一共三个人的号码信息,选择2号功能时,查询了zhang lei和qin jun的信

19、息,均正确,当输入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 qing chun的信息仍然保存。由以上测试表明此电话本系统能正确地实现添加、查询和删除的功能,满足设计要求。七、程序调试过程中遇到的问题即解决方法1、当要让显示器

20、显示一个字符串时,一定要在字符串的结尾加上一个$字符,这个$字符非常重要,第一次,由于粗心,从字符串OBF5起,后面的字符串的末尾都忘了加$,结果造成程序在运行时,跳过了很多语句,直接将OBF5及OBF5后边的所有的提示性语句都输了出来。因为系统在输出时,只有在遇到$时才结束,若没有结束字符$,则系统一直将数据段的数据顺序输出,知道遇到$字符为止。2、在编写子函数时,一定要在其结尾加上RET,然后加上结束标志ENDP。在编写换行子函数NEXTLINE时,由于在结尾没有加RET,结果程序不能正确运行,而且总是自动终止了程序,加上RET后,即可正确运行。3、在实现查询功能时,开始总是出现有的人名的

21、信息第一次可以查询出来,而同样的人名在第二次、第三次查询时,则显示不存在。经过反复思考,发现在第二次输入查询的人名时,由于所有的查询都共用一个变量ZHU1,这就导致第二次输入时,由于人名比第一次短,没有完全覆盖,造成上次的人名和这次输入的人名相叠加了,结果和ZHU中所有的人名比较时,就不能查询到第二次实际输入的人名。同样的问题也出现在删除函数中和添加函数(输入函数)中。为此,可将输入、查询和删除中的ZHU2,ZHU1和ZHU4中20个字符的位置中没有使用的统一置0。4、在输入时,如果输入的电话号码没有8位,则在查询时,出现上一个人的电话号码的头几位出现在要查询的人的号码的后几位中。显然,这也是

22、由于输入的电话号码共用一个变量,若电话号码长短不一,则必然会不完全覆盖,导致查询时的错误结果。这种情况,可以在输入电话号码时,即在10号功能调用时,将电话号码末尾后边的回车符改为$,即可避免这种情况。八、课程设计心得本次微机原理课程设计为期一周,虽然时间不长,但经过我的辛苦努力,我感觉我圆满地完成了老师布置的任务,而且比老师所要求的功能稍微多一些!在整个设计过程中,我花费了大量的时间和精力,学到了很多东西,也体会到了成功的乐趣!这次设计的电话本,是要求用汇编语言编写,以前用C语言写过类似的东西,感觉蛮简单,但是用汇编语言来实现,觉得十分棘手,毕竟我们的汇编语言学得太浅显了。但是,我还是按照以前

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

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!