一、 实验任务
实现一个通讯录,包含联系人的姓名及电话。
功能包括增、删、改、查以及显示。
二、实验过程(算法分析/调试运行情况及数据记载)
1、逻辑结构:
2、实验代码:
DATAS SEGMENT
;此处输入数据段代码
;主菜单
order1 db'**** main ****$'
order2 db'1.input$'
order3 db'2.select$'
order4 db'3.show$'
order5 db'4.exit$'
;选择提示
choose db'Please choose the number(1/2/3/4):$'
out1 db'Please input a new name(within 20 words):$'
out2 db'Please input a new number(within 8 words):$'
out3 db'Please input the name:$'
out4 db'Can not find.$'
out5 db'Do you want to delete or updata it or back(d/u/b):$'
out6 db'Deleted it.$'
out7 db'Updated it.$'
out8 db'Continue to input(y/n):$'
out9 db'Please choose to update the name or number(1/2):$'
;用于暂时存放输入的数据
sname db 21,0,21 DUP(0);搜索姓名变量
addname db 21,0,21 DUP(0);添加姓名变量
addnum db 9,0,9 DUP(0);添加号码变量
dname db 21,0,21 DUP(0);删除姓名变量
;共1500个字节存放联系人信息,每个联系人占30个字节
phonebook db'abc',17 dup(0),'$12345678$'
db'bcbc',16 dup(0),'$23452345$'
db'liu',17 dup(0),'$1234',4 dup(0),'$'
db'shao',16 dup(0),'$567567',2 dup(0),'$'
db'liang',15 dup(0),'$34563456$'
db 1350 dup(0)
;存储所有的联系人及电话信息
;每个联系人name占20个字节加一个$字符
;每个联系人num占8个字节加一个$字符
;一个联系人占30个字节,总共能存储50个联系人的信息
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
;bp指向phonebook中最后一个联系人的偏移地址的开始
mov bp,120
main:
;显示菜单,输入要选择的功能
call nextline;换行
mov dx,offset order1
mov ah,9
int 21h
call nextline
mov dx,offset order2
mov ah,9
int 21h
call nextline
mov dx,offset order3
mov ah,9
int 21h
call nextline
mov dx,offset order4
mov ah,9
int 21h
call nextline
mov dx,offset order5
mov ah,9
int 21h
call nextline
mov dx,offset choose
mov ah,9
int 21h
;菜单及选择语句输出完毕
;调用01号功能,接收输入的字符,放置在al中
mov al,0
mov ah,01
int 21h
;判断并跳转至子程序
cmp al,'1'
je adds
cmp al,'2'
je select
cmp al,'3'
je show
cmp al,'4'
je exit
adds:
;增加新的联系人
call nextline
add bp,30
;si指向要存入的联系人的首地址
mov si,bp
;显示提示
mov dx,offset out1
mov ah,09
int 21h
;将输入的name存放在addname中
mov dx,offset addname
mov ah,0ah
int 21h
mov bx,-1
s1:;将bx+2指向回车字符
inc bx
cmp byte ptr addname[bx+2],0dh
jne s1;不等于则转移
;将addname中回车字符后的字节归零
s2:
mov byte ptr addname[bx+2],0
inc bx
cmp bx,20
jne s2
mov byte ptr addname[bx+2],0dh
mov cx,20
mov bx,-1
;将输入的name写入phonebook中
s3:
inc bx
mov dl,addname[bx+2]
mov phonebook[si+bx],dl
loop s3
mov phonebook[si+20],'$'
call nextline
;显示提示
mov dx,offset out2
mov ah,09
int 21h
;将输入的num存放在addnum中
mov dx,offset addnum
mov ah,0ah
int 21h
mov bx,-1
s4:;将bx+2指向回车字符
in