logo资料库

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

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
微机原理 课 程 设 计 报 告 学 姓 学 专 班 级: 指导教师: 号: 200604135156 名: 朱 庆 春 院: 信息科学与工程学院 业: 电子信息工程 0605 班 熊 庆 国
一、 课程设计目的 运用所学的汇编语言写一个具有电话本功能的程序,达到提高动手能力及解 决问题的能力。 二、 设计要求 1、能够存储 50 个电话号码,包括人名(20 个字符)、电话号码(8 个字符)。 2、系统可以随时接受新的人名和电话号码。 3、具有随时查询号码的功能。要求输入人名后,在屏幕上显示相应的电话 号码。 4、具有删除号码的功能。要求输入人名后,系统自动删除相应的号码。 5、运行此系统后,要显示菜单选择的功能。 三、 程序设计思想 每个人的信息包括人名和号码,人名占 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 号功能调用,先将人名和号码暂时存 放在 ZHU2 和 ZHU3 中,然后在逐字节地复制到 ZHU 中,记住在人名和号码末尾 加上$字符。查询号码时,将输入的要查询的人名存放在 ZHU1 中,然后再每隔 30 个字节与 ZHU 中的人名逐个字符地比较,若完全相等,则将人名下面的号码 输出,否则说明要查询的人名不存在。删除时,先输入要删除的人名,同查询相 似,按同样的方法在 ZHU 中寻找相应的数据区,若找到了,则从找到时下面一个 人的信息开始,统一向上移动 30 个字节,若没有找到,则说明要删除的人名的 信息不存在。 四、 程序框图 2
五、程序清单 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 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 sure 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 delete 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 ENDS STACKS SEGMENT DW 32 DUP(0) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX MOV BP,-30 BEGIN:CALL NEXTLINE MOV DX,OFFSET OBF1 MOV AH,9 INT 21H CALL NEXTLINE MOV DX,OFFSET OBF2 MOV AH,9 ;显示菜单选择界面 ;调用换行函数 3
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 AH,9 INT 21H CALL NEXTLINE MOV AL,0 MOV AH,1 INT 21H CMP AL,'1' JE INPUT CMP AL,'2' JE SEARCH CMP AL,'3' JE DELETE JMP STOP ;选择1,输入信息 ;选择2,查询信息 ;选择3,删除信息 INPUT: CALL NEXTLINE ADD BP,30 MOV SI,BP S2:MOV BYTE PTR ZHU[SI],0 INC SI CMP [SI],0 JNE S2 MOV SI,BP MOV DX,OFFSET OBF3 MOV AH,9 INT 21H MOV DX,OFFSET ZHU2 MOV AH,10 INT 21H MOV BX,-1 ;清除ZHU中最后一个人的信息后面的30 个字节中非0的单元 ; ;输入的人名存放在ZH2中 4
S5:INC BX CMP BYTE PTR ZHU2[BX+2],0DH JNE S5 ;为避免ZHU2中刚输入的信息没有完全覆 ;盖上一次的信息,将出车符(0DH)及其后 ;面的字节归0 S6:MOV BYTE PTR ZHU2[BX+2],0 INC BX CMP BX,20 JNE S6 MOV BYTE PTR ZHU2[BX+2],0DH MOV CX,20 MOV BX,-1 S1:INC BX ;将ZH2复制到ZHU中 MOV DL,BYTE PTR ZHU2[BX+2] MOV BYTE PTR ZHU[SI+BX],DL LOOP S1 MOV BYTE PTR ZHU[SI+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 ZHU3[BX+2],0DH ; 入的号码的最后一位的回车符(0DH)换成$ JNE S7 MOV BYTE PTR ZHU3[BX+2],'$' ADD SI,21 MOV CX,8 MOV BX,-1 S3:INC BX MOV DL,BYTE PTR ZHU3[BX+2] MOV BYTE PTR ZHU[SI+BX],DL LOOP S3 MOV BYTE PTR ZHU[SI+8],'$' CALL NEXTLINE MOV DX,OFFSET OBF5 MOV AH,9 INT 21H CALL NEXTLINE MOV AH,1 INT 21H CMP AL,'Y' JE INPUT 5
STOP: CMP AL,'y' JE INPUT JMP BEGIN 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 MOV AH,9 INT 21H MOV DX,OFFSET ZHU1 MOV AH,10 INT 21H MOV BX,-1 ;退出电话本程序 ;输入你要搜索的名字,存放在ZHU1中 L5:INC BX ;为避免 ZHU1 刚输入的信息没有完全覆盖上一次的信息, CMP BYTE PTR ZHU1[BX+2],0DH ;将回车符(0DH)及其后面的字节归0 JNE L5 L6:MOV BYTE PTR ZHU1[BX+2],0 INC BX CMP BX,20 JNE L6 MOV BYTE PTR ZHU1[BX+2],0DH CALL NEXTLINE MOV CX,50 MOV SI,-30 L1:ADD SI,30 MOV BX,-1 L2:INC BX CMP BX,20 JE L3 PUSH AX MOV AL,BYTE PTR ZHU[SI+BX] ;在ZHU中搜索与ZHU1相等的字符串 6
MOV AH,BYTE PTR ZHU1[BX+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 AL,'Y' JE SEARCH CMP AL,'y' JE SEARCH JMP BEGIN DELETE:CALL NEXTLINE MOV DX,OFFSET OBF12 MOV AH,9 INT 21H MOV DX,OFFSET ZHU4 MOV AH,10 INT 21H MOV BX,-1 ;继续搜索吗? ;输入你要删除的名字,存放在ZHU4中 D6:INC BX ;为避免 ZHU4 刚输入的信息没有完全覆盖上一次的信息, CMP BYTE PTR ZHU4[BX+2],0DH ;将回车符(0DH)及其后面的字节归0 JNE D6 D7:MOV BYTE PTR ZHU4[BX+2],0 INC BX 7
CMP BX,20 JNE D7 MOV BYTE PTR ZHU4[BX+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 ZHU[SI+BX] MOV AH,BYTE PTR ZHU4[BX+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[SI+30] MOV BYTE PTR ZHU[SI],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 ;你要删除的姓名不存在 ;删除成功! ;要继续删除吗? 8
分享到:
收藏