用汇编语言实现电话本功能详细代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、课程设计目的
运用所学的汇编语言写一个具有电话本功能的程序,达到提高动手能力及解决问题的能力。
二、设计要求
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个字节,若没有找到,则说明要删除的人名的信息不存在。
五、程序清单
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
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' ;选择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 ZHU[SI],0 ;清除ZHU中最后一个人的信息后面的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