1、 汇编语言程序设计课程设计报告汇编语言程序设计课程设计报告 题目:电话号码本 班级: 学号: 姓名: 一课程设计题目:电话号码本一课程设计题目:电话号码本 功能描述: 1 程序能够建立一个可存放 30 条以上记录的电话号码本; 2 程序能够对记录进行增加、删除、修改操作; 3 记录字段包含序号、姓名、电话、单位内容; 4 能够通过姓名、或电话查询记录并显示查询结果; 5 退出; 二、实验目的二、实验目的: : 1.进一步了解和熟悉 8086 汇编语言的指令及其用法。 2.进一步学习汇编语言源程序的编写方法和技巧以及运行过程。 3.掌握汇编语言调试(在 DEBUG 状态下)的过程。 三三、分析课
2、题的基本内容、分析课题的基本内容及目的及目的 此课题要求用汇编语言写一个可存放 30 条以上记录的电话号码本的程序, 其中 每一个记录应该包括四个选项,即序号,电话号码,姓名用地址。对程序中的所有 记录能够进行的操作有增加一条记录,删除一条记录,查询一条记录,修改一条记 录。增加一条记录就是把记录插入到程序中所有记录的最后面,还要把记录的总个 数加 1。删除一记录要先通过查询算法,查找到删除记录的位置,然后从下一条记 录开始,逐个往前面覆盖。查询一条记录有两种方法,通过电话号码或姓名查询, 若没有找到所要找的记录,则返回,并告之该记录不存在。修改一条记录也需要先 查找该记录,然后进行修改,即重
3、新写入。 四四、程序流程图、程序流程图 1总体流程图: N N N N Y Y Y Y Y N Y Y Y Y N 程 序 开 始 输 入 一 个 字 符 程 序 结 束 al = i al = d ? al= c ? al= s ? al= e ? 增 加 一 条 记 录 删 除 一 条 记 录 查 询 一 条 记 录 修 改 一 条 记 录 输 入 错 误 2.插入算法的程序流程图如下: Y N N 五、设计过程中遇到的问题五、设计过程中遇到的问题及解决方及解决方法法 虽然插入算法的流程图比较简单,但也遇到了不少的问题。 1.程序开始运行时,要求用户输入字母以选择要进行的操作。可以用一段选
4、择 程序来实现: w: mov ah,7 ;从键盘输入,但不回显 int 21h cmp al,i ;将输入值与字母 i 作比较 jnz w1 ;不相等,转向 w1 与下一个字母比较 call insert ;相等,则执行插入操作 jmp w ;重新输入进行操作 w1: 2插入的记录中,姓名和地址的长度不一,这样就给记录的查询、删除及修改 带来了很大的麻烦。这里,我预先定义了一个数组 array 来设定记录中电话号码, 姓名和地址的长度: array db 51 dup(?,16 dup(?),20 dup(?),30 dup(?),0dh,0ah,$) 开始 把要插入的记录(电话、 姓名、地
5、址)输入缓冲区 插入到记录的尾部 结束 记录数 const+ 内存单元是否为满? 并且在输入子程序中,运用了以下程序将剩余的单元用空格符填满: mov al,20h ;用空格填满剩余的单元 sub ch,ch mov cl,numlen ;实际输入的电话号码的长度 lea di,numfld ;输入的电话号码单元的首地址 add di,cx neg cx ;求补 add cx,16 ;cx 中为剩余的字节数 cld ;let df=0 rep stosb ;把 al 中的内容(空格)存入 di 指向的内存单元中 对于姓名和地址也是一样。 如此,每一条记录便有 70 个字节(包括空格符),这样不
6、仅给程序的查询、删除 及修改操作带来了方便,而且也使输出时记录的排序较为美观。 3 插入一条记录时, 要把记录插入到末尾, 为了能够随时得到末尾的偏移地址, 我定义了一个字变量 point,用来保存所有记录的的字节数,这样就可以通过代码: point dw 0 ;指向记录尾 lea di,array add di,point ;把 array 中要插入位置的偏移地址赋给 di 很容易的找到末尾,即要插入记录的位置。再由 movsb 指令将记录插入末尾(调用 stors 子程序) : mov cl,16 lea si,numfld ;输入的电话号码的首地址 cld rep movsb mov cl,20 lea si,namefld ;输入的姓名的首地址 cld rep movsb mov cl,30 lea si,telfld ;输入的地址的首地址 cld rep movsb 还有一点,之所以将上