汇编课程设计报告 题目: 通讯录系统 姓名: 何xx 学号: 2004xx 班级:计科04-x 指导老师: 郑xx 1.1 设计要求. 题目要求设计一个通讯录管理系统.需要具有以下功能和模块. (1) 输入模块: 输入新的通讯条目,包括:姓名,性别,电话,E-mail,通讯地址,邮编,QQ号 (2) 删除模块: 删除功能. (3) 查询模块: 查询,输入姓名可以查询该人其他信息. (4) 修改模块: 修改某一条记录. (5) 存储模块(附加功能,可以不完成): 能够将输入的信息存储到硬盘文件;并能读入存储在该文件中的信息. 1.2 环境. 软件: windows xp, masm 6.x, notepad 硬件: PC 1.3 分析,设计思想. 看到题目,感觉就像是个简单的数据库系统.支持数据的增/删/查/改操作.具有应用价值.在数据库系统中,数据是以数据库文件的形式存在.通过访问/操作数据库中的表或表中的字段,获取我们想要的信息. 本系统可以归结为4个功能: select, insert, update,delete. 在这里不可能建立一张数据表来维护这种关系型数据.必须要借助汇编中的结构类型.定义一个结构数组,用来维护数据条目及信息的处理. 如图: 修改和删除操作都要依赖查询功能. 故把整个程序分为4个模块是比较明智的. 1.4 模块说明 由于变量较多,故没有采用多模块设计方案. 几个功能分别在6个子过程中完成. (1) Insert : 添加新的数据项. 自动将条目总数加一. (2) Select : 查询信息,查询条件为姓名. 对结构数组无影响. (3) Update: 修改数据信息, 查询条件为姓名,修改查询结果的值,修改文件. (4) Delete : 删除数据信息, 查询条件为姓名,删除查询结果值,具体做法是: 不停的将后面的一条信息,前移,就达到删除的效果. (5) Load : 加载文件到内存,涉及文件读/写/打开操作. (6) Save : 保存缓冲区数据至文件. 1.5 流程详细 1.6 主要代码 ;================================= ; 何xx ; 完成日期: 1月1日-1月3日 /2007 ; 汇编课程设计 ; 第二题: 通讯录设计 ;================================= (1) 宏定义 ;清空当前item(输入缓冲区) setitem macro a,b ;清空关键字 clearkey macro a (2) 数据段 dseg segment ;文件路径 filename db 'G:\programs\asm\design\items.txt',0 ;错误提示: 没有找到文件或无法打开 errshow db 0ah,0dh,'can not open or find this file! ','$' ;选择菜单 menu db 0ah,0dh,'pleate enter your choice!',0ah,0dh db '1: Insert',0ah,0dh db '2: Select/Search',0ah,0dh db '3: Update',0ah,0dh db '4: Delete',0ah,0dh db '5: Save',0ah,0dh db '6: Exit',0ah,0dh db '$' ;命令选择 command db 0 ;提示输入姓名 namelabel db 0ah,0dh,'name:$' ;提示输入性别(F/M) genderlabel db 0ah,0dh,'gender:$' ;提示输入电话 phonelabel db 0ah,0dh,'phone:$' ;提示输入E-MAIL maillabel db 0ah,0dh,'email:$' ;提示输入通讯地址 addresslabel db 0ah,0dh,'address:$' ;提示输入邮编 postalcodelabel db 0ah,0dh,'postalcode:$' ;提示输入QQ号 qqlabel db 0ah,0dh,'qq:$' clr db 0ah,0dh,'$' ;添加成功提示 inserted db 0ah,0dh,'new item has been added successfully!',0ah,0dh,'$' ;编辑成功提示 changed db 0ah,0dh,'you have changed this item successfully!',0ah,0dh,'$' ;删除成功提示 deleted db 0ah,0dh,'delete successfully!',0ah,0dh,'$' ;保存成功提示 saved db 0ah,0dh,'save successfully!',0ah,0dh,'$' ;查询失败 selected db 0ah,0dh,'nothing to match!',0ah,0dh,'$' ;显示数据条数 numshow db 0ah,0dh,'the count of items:$' ;============================================================= ;定义结构体 item struct pid db 0 pname db 10,?,10 dup('$') pgender db 10,?,10 dup('$') ptel db 10,?,10 dup('$') pemail db 10,?,10 dup('$') paddress db 10,?,10 dup('$') ppostalcode db 10,?,10 dup('$') pqq db 10,?,10 dup('$') pnum db 0 item ends ;定义结构体结束 ;============================================================== olditem item {} ;输入缓冲区 newitem item {} ;结构数组长度 len equ type item ;结构总数,文件中此变量位于最后一位 num db 0 ;定义结构数组 items item 100 dup({}) ;inititems item 100 dup({}) ;查,删,改条件/通过姓名 key db 10,?,10 dup('$') oldkey db 10,?,10 dup('$') ;flag,作为查找结果标志,0表示查找失败. flag db 0 ;自定义指针 pointer db 0 ;标号地址表 addrtbl dw insertbegin,selectbegin,updatebegin,deletebegin,savebegin,done dseg ends (3) 标号定义: Insertbegin Selectbegin Updatebegin Deletebegin Savebegin Done (4) 子过程 (由于篇幅限制,不给出代码) ;添加记录子过程 insert proc ;查找子过程 select proc ;编辑子过程 update proc ;删除子过程 delete proc ;保存至文件 save proc ;加载文件内容到缓冲区: 结构数组,其中最后一位为数据条数 load proc ;打印子过程 print proc 1.7 小结. 关于程序: 实现题目要求的功能(包括文件的存储),初步具备简单数据库系统的功能,虽然没有实用性, 但对整体机制的理解很有帮助.是一次不错的练手机会. 体会: 通过本次课程设计.进一步掌握了ASM程序设计方法,由于考试在即,时间较紧张,未做界面的优化,在16位下实现,总体来说题目较简单,功能区分明显,结果较清晰,写程序的时候未遇到太多困难, 小BUG倒很多,一口气写完,第一次调试居然198个ERROR, 不段的调试程序和优化流程,花费了不少心思,频繁的参考课本和相关资料是不可避免的,也深刻的感受到了,汇编程序设计的繁琐和开发效率的低下,汇编好几行语句在高级语言里面只需要一条就可以完成,事物总有两面性,存在即具其合理性,ASM的优越的性能(时间和空间),高级是望尘莫及的,ASM让我们更加注重底层的东西,这也是一个优秀软件工程师必备的素质,处理繁琐的细节问题往往暂用了相当一部分的开发时间,相信课程设计的目的已经达到. 1.8 参考书籍或资料. (1) 教材 (2) http://community.csdn.net/ (3) BIOS_DOS.DOC(来自FTP)

评论