《汇编语言》课程设计-电话号码管理程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
现代社会人与人之间进行通讯的主要工具离不开电话,当打电话给某人时,从电话簿中繁多的信息中查找对应的号码是很繁琐的事情。
根据现代人对快速查找电话簿信息的实际需要,设计了电话号码管理程序。
该程序是典型的信息管理程序,采用M a s m f o r W i n d o w s 为编译环境,D O S为运行环境,核心语言是汇编语言。
本程序主要分为五大模块:选择查找模块,增添模块,修改模块,删除模块和显示模块。
通过需求分析、程序设计、测试等过程,实现了对信息查找、增添、修改、删除和显示功能。
该程序满足了人们翻阅电话簿的实际需求,人们可以通过该电话号码管理程序随时调用电话号码簿,方便自己与他人的沟通,优化了信息配置,提高了生活效率,加速了生活节奏。
关键词:电话簿,信息管理,M a s m f o r W i n d o w s
开始
登录界面
输入操作指令
姓名选择号
码
选
择
姓
名
增
添
号
码
增
添
姓
名
修
改
号
码
修
改
姓
名
删
除
号
码
删
除
姓
名
显
示
号
码
显
示进入对应指令操作项
1 选题背景及意义
进入21世纪以来,现代社会步入了高速的信息化的时代,人际之间的交往,新闻事件的传播,高科技设备的应用,远程技术操作,都离不开通讯设备。
对于个人而言,最常用的莫过于电话了。
但是伴随电话的普及,杂乱无章的电话号码持续困扰着人们,这反而成了现代高科技、信息化社会下的一块障碍,是快节奏下人们很难避免的一大问题。
随着信息技术的高速发展和各种各样的通讯设备的引入,作为人与人之间通讯的数据库,电话簿也要适应时代的发展。
现代通讯应该利用新的数据管理技术,开发数据管理程序,这样才能在激烈的现代社会中适应高节奏步伐。
2 主要设计内容及预期目标
图2-1程序功能模块图
本管理程序采用了M a s m f o r W i n d o w s为编译化境,D O S为运行环境,核心语言是汇编语言,使用者可以通过该管理程序灵活使用自己的电话簿,方便使用者。
该程序实施后,能够满足用户对号码选择查找,号码增添,号码修改,号码删除和号码显示进行操作,提高生活效率。
程序功能模块图如图2-1所示。
3 概要设计
根据对工作流程的分析,程序可以分为以下几个功能模块。
(1)选择查找:根据姓名或电话查找目标信息。
(2)增添:根据姓名与电话号码为信息增添。
(3)修改:查找要修改的信息对应的姓名,从而修改此信息。
(4)删除:查找要删除的信息对应的姓名,从而删除此信息。
(5)显示:显示电话号码簿中储存的全部信息。
整个程序由主程序和六个分支程序组成,主程序负责对各个子程序的调用,完成程序的主体功能。
主程序如图3-1。
各个子程序负责不同的操作指令,完成对电话号码簿的详细操作。
程序流程如图3-2。
图3-1主程序界面图
开始
主菜单栏
使用者选择操作项
程序进入操作内容
使用者按提示操作
输入内容并确认
退出
图3-2主程序流程图
4 详细设计
4.1 选择查找模块
选择查找模块。
该模块用来实现选择操作内容和以姓名或号码为查询关键字,对目标文件信息查询操作。
按钮使“1:S e l e c t”,进入信息选择模式。
在运行过程中,在“K e y6t o m a i n m e n u!”提示下按“6”,程序重新回到主菜单。
在“1:S e l e c t b y n a m e”提示下按“1”,查询进入以姓名为入口的查找方式,显示要查找的姓名和对应的号码;在“2:S e l e c t b y t e l e p h o n e”提示下按“2”,查询进入以号码为入口的查找方式,显示要查找的号码和对应的姓名。
选择查找程序界面如图4-1。
子程序流程如图4-2。
图4-1选择查找程序界面图
图4-2子程序流程图
4.2 增添模块
增添模块。
该模块用来实现增添操作姓名和号码,对目标文件信息添加操作。
按钮使“2:I n s e r t”,进入增添模式。
在运行过程中,在“K e y6t o m a i n m e n u!”提示下按“6”,程序重新回到主菜单。
在“N a m e:”提示下输入姓名,在“T e l e:”提示输入号码。
每次输入完成后使用回车表示输入的结束,并且进入下一条操作。
增添程序界面如图4-3。
图4-3增添程序界面图
4.3 修改模块
修改模块。
该模块用来实现修改操作内容和以姓名或号码为查询关键字,对目标文件信息修改操作。
按钮使“3:M o d i f y”,进入修改模式。
在运行过程中,在“K e y6t o m a i n m e n u!”提示下按“6”,程序重新回到主菜单。
在“N a m e:”提示下输入姓名,在“T e l e:”提示输入号码。
每次输入完成后使用回车表示输入的结束,并且进入下一条操作。
修改程序界面如图4-4。
图4-4修改程序界面图
4.4 删除模块
删除模块。
该模块用来实现删除操作内容和以姓名或号码为查询关键字,对目标文件信息删除操作。
按钮使“4:D e l e t e”,进入信息删除模式。
在运行过程中,在“K e y6t o m a i n m e n u!”提示下按“6”,程序重新回到主菜单。
在“N a m e:”提示下输入姓名,在“T e l e:”提示输入号码。
每次输入完成后使用回车表示输入的结束,并且进入下一条操作。
删除程序界面如图4-5。
图4-5删除程序界面图
4.5 显示模块
显示模块。
该模块用来实现显示内容和以姓名或号码为查询关键字,对目标文件信息显示操作。
按钮使“5:S h o w a l l r e c o r d”,进入信息显示模式。
在运行过程中,在“K e y6t o m a i n m e n u!”提示下按“6”,程序重新回到主菜单。
显示程序界面如图4-6。
图4-6显示程序界面图
5 使用说明
(1)打开计算机启动W i n d o w s X P操作系统。
(2)打开“开始”,选择“所有程序”,打开“M a s m f o r W i n d o w s 集成实验环境”下的“M a s m f o r W i n d o w s集成实验环境”文件。
(3)保存空白文件到指定区域,导入程序。
(4)依次点击“运行”工具栏下“编译成目标文件”;“生成可执行文件”;“生成动态链接库文件”。
最后点击“运行”即可在D O S 环境下运行该程序。
6 设计总结
为期两周的汇编语言课程设计已经结束了,但在两周的设计中,我认为自己有颇多得收获。
我们知道,汇编语言课程设计是我们计算机控制专业教学计划中的必不可少的实践环节,不仅巩固了我们所学的书本知识,而且为我们提供了一次理论与实践相结合的机会。
电话号码管理程序是信息管理程序中比较典型的。
系统地介绍了电话号码管理程序的开发过程,程序设计中隐含的问题及手机缺陷,通过实际使用找寻解决方法以便提高当前应用程序和改善工作性能.利用其
提供的各种选项,在短时间内对电话号码簿进行查询等操作。
所以从一开始我就特别重视,想借此机会锻炼一下自己解决实际问题的能力,为以后的工作或学习打好基础。
确立设计题目之后,我就去大量搜集查阅相关资料,并提取有效素材,付出大量的精力,整合程序实现的全部功能。
该程序能够根据使用者的需求,快捷方便的为使用者提供服务。
对本设计题目进行的总体构思与设计,是先将该课题按所实现的功能将其分为查询、添加、修改、删除和显示模块,这样就会在脑海中形成一个清晰的设计思路,然后将这些功能模块通过主程序调用来实现。
然后就是分别编译子程序,使得每一个子程序实现各自的功能,完成不同的任务操作。
通过利用在课堂上学到的知识点和指令,并且搜集相关素材,先从主程序开始,然后一步一步的分别编写各个功能模块,为了使程序变得易读易修改,我采用分层标记的方式注明每一个模块,同时借鉴一些相关编程经验结合自己的设计思想完成这项任务。
最后调试程序,加以修改和完善,使得程序多而不乱。
总之,通过这次课程设计,使我更加认识到理论结合实际的重要性,只有将所学的理论知识灵活运用到实际中去才会体会到学习的乐趣。
我们不但要学习好书本上的理论知识,还要经常利用这些知识点活学活用,更多得思考与实践。
在每一次程序设计中反复总结经验教训,在失败中思考,学到更多实际的东西。
7 程序清单
stacks segment ;堆栈段代码
dw 512 dup(?)
stacks ends
datas segment ;数据段代码
titlestr db 'Welcome to the telephone directory!',0dh,0ah,'Please enter your choice!',0dh,0ah,'$'
Menustr db '1:Select',0dh,0ah,'2:Insert',0dh,0ah,'3:Modify',0dh ,0ah,'4:Delete',0dh,0ah,'5:Show all record',0dh,0ah,'8:Esc',0dh,0ah,'$'
namelist db 20 dup(20 dup(?))
telelist db 20 dup(20 dup(?))
newname db 20 dup(?)
newtele db 20 dup(?)
cnt db 1 dup(?)
cntselect db 1 dup(?)
choice db 1 dup(?)
entered db 0dh,0ah,'$'
disname db 'Name:$'
distele db 'Tele:$'
backstr db 'Key 6 to main menu!',0dh,0ah,'$'
disstr db 'All record!',0dh,0ah,'$'
selstr1 db '1:Select by name',0dh,0ah,'2:Select by telephone',0dh,0ah,'$'
selstr2 db 'The imformation!',0dh,0ah,'$'
selstr3 db 'Name is not exist!',0dh,0ah,'$' selstr4 db 'Telephone is not exist!',0dh,0ah,'$' selstr5 db 'Telephone directory is empty!',0dh,0ah,'$'
addstr1 db 'Insert the newname and newtele!',0dh,0ah,'$'
addstr2 db 'Telephone directory is full!',0dh,0ah,'$'
addstr3 db 'Add successfully!',0dh,0ah,'$'
modstr1 db 'Newname:$'
modstr2 db 'Newtele:$'
modstr3 db 'Input new record!',0dh,0ah,'$' modstr4 db 'Modified successfully!',0dh,0ah,'$'
delstr1 db 'Telephone directory is empty!',0d,0ah,'$'
delstr2 db 'Delete d successfully!',0dh,0ah,'$'
name1 db 'aaaaaaaaa$'
name2 db 'bbbbbbbbb$'
name3 db 'ccccccccc$'
name4 db 'ddddddddd$'
name5 db 'eeeeeeeee$'
telephone1 db '11111111111$'
telephone2 db '22222222222$'
telephone3 db '33333333333$'
telephone4 db '44444444444$'
telephone5 db '55555555555$'
datas ends
codes segment ;代码段代码
main proc far
assume cs:codes,ds:datas
displaytitle proc near ;显示主菜单
mov dx,offset titlestr
mov ah,9
int 21h
lea dx,menustr
mov ah,9
int 21h
displaytitle endp
cshdata proc near ;输入对比
mov bx,0
mov si,offset name1 ;045 name1 db 'aaaaaaaaa$' lea di,namelist
add di,bx
mov cx,20
cshname11:
mov al,[si] ;073 mov si,offset name1
mov [di],al ;074 lea di,namelist
inc di
cmp al,'$' ;比较name1是否为空
jz cshname12 ;ZF=1 结果为零跳转
loop cshname11 ;077 mov cx,20
cshname12:
add bx,20
mov si,offset name2 ;046 name2 db 'bbbbbbbbb$' lea di,namelist
add di,bx
mov cx,20
cshname21:
mov al,[si] ;073 mov si,offset name1
mov [di],al ;074 lea di,namelist
inc si
inc di
cmp al,'$' ;比较name1是否为空
jz cshname22 ;ZF=1 结果为零跳转
loop cshname21 ;092 mov cx,20
cshname22:
add bx,20
mov si,offset name3 ;047 name3 db 'ccccccccc$' lea di,namelist
add di,bx
mov cx,20
cshname31:
mov al,[si] ;073 mov si,offset name1
mov [di],al ;074 lea di,namelist
inc si
cmp al,'$' ;比较name1是否为空
jz cshname32 ;ZF=1 结果为零跳转
loop cshname31 ;108 mov cx,20
cshname32:
add bx,20
mov si,offset name4 ;048 name4 db 'ddddddddd$' lea di,namelist
add di,bx
mov cx,20
cshname41:
mov al,[si] ;073 mov si,offset name1
mov [di],al ;074 lea di,namelist
inc si
inc di
cmp al,'$' ;比较name1是否为空
jz cshname42 ;ZF=1 结果为零跳转
loop cshname41 ;124 mov cx,20
cshname42:
add bx,20
mov si,offset name5 ;049 name5 db 'eeeeeeeee$' lea di,namelist
add di,bx
mov cx,20
cshname51:
mov al,[si] ;073 mov si,offset name1
mov [di],al ;074 lea di,namelist
inc si
inc di
cmp al,'$' ;比较name1是否为空
jz cshname52 ;ZF=1 结果为零跳转
loop cshname51 ;140 mov cx,20
cshname52:
add bx,20
mov ax,bx ;初始化计数器c nt
mov bl,20
div bl
lea si,cnt ;013 cnt db 1 dup(?)
mov [si],al ;(al)<-(ax)/(bl)的商
mov bx,0
lea si,telephone1
mov di,offset telelist
add di,bx
mov cx,20
cshtele11:
mov al,[si] ;159 mov si,offset telephone1 mov [di],al ;160 lea di,telelist
inc si
inc di
cmp al,'$' ;比较telephone1是否为空
jz cshtele12 ;ZF=1 结果为零跳转
loop cshtele11 ;162 mov cx,20
cshtele12:
add bx,20
lea si,telephone2
mov di,offset telelist
add di,bx
mov cx,20
cshtele21:
mov al,[si] ;159 mov si,offset telephone1 mov [di],al ;160 lea di,telelist
inc si
inc di
cmp al,'$' ;比较telephone1是否为空
jz cshtele22 ;ZF=1 结果为零跳转
loop cshtele21 ;178 mov cx,20
cshtele22:
add bx,20
lea si,telephone3
mov di,offset telelist
add di,bx
mov cx,20
cshtele31:
mov al,[si] ;159 mov si,offset telephone1 mov [di],al ;160 lea di,telelist
inc si
inc di
cmp al,'$' ;比较telephone1是否为空
jz cshtele32 ;ZF=1 结果为零跳转
loop cshtele31 ;194 mov cx,20
cshtele32:
add bx,20
lea si,telephone4
mov di,offset telelist
add di,bx
mov cx,20
cshtele41:
mov al,[si] ;159 mov si,offset telephone1
mov [di],al ;160 lea di,telelist
inc si
inc di
cmp al,'$' ;比较telephone1是否为空
jz cshtele42 ;ZF=1 结果为零跳转
loop cshtele41 ;210 mov cx,20
cshtele42:
add bx,20
lea si,telephone5
mov di,offset telelist
add di,bx
mov cx,20
cshtele51:
mov al,[si] ;159 mov si,offset te lephone1
mov [di],al ;160 lea di,telelist
inc si
inc di
cmp al,'$' ;比较telephone1是否为空
jz cshtele52 ;ZF=1 结果为零跳转
loop cshtele51 ;210 mov cx,20
cshtele52:
add bx,20
ret
cshdata endp
disdata proc near ;5:Show all record
mov dx,offset disstr ;020 distele db 'Tele:$' mov ah,9
int 21h
lea si,cnt ;013 cnt db 1 dup(?)
mov cl,[si]
mov bx,0
disdata1:
mov dx,offset disname ;019 disname db 'Name:$' mov ah,9
int 21h
lea dx,namelist
add dx,bx
mov ah,9
int 21h
mov dx,offset entered
mov ah,9
int 21h
mov dx,offset distele ;020 distele db 'Tele:$' mov ah,9
int 21h
lea dx,telelist
add dx,bx
mov ah,9
int 21h
mov dx,offset entered
mov ah,9
int 21h
add bx,20
loop disdata1
ret
disdata endp
adder proc near ;2:Insert
mov si,offset cnt
mov al,[si]
cmp al,20
jb adder5 ;CF=1 不高于跳转
lea dx,addstr2
mov ah,9
int 21h
jmp adder6
adder5:
lea dx,addstr1
mov ah,9
int 21h
lea dx,disname ;019 disname db 'Name:$' mov ah,9
int 21h
mov cl,19
lea si,newname ;013 newname db 20 dup(?)
adder1: ;逐字符输入名字
mov ah,1
int 21h
cmp al,0dh ;比较是否回车
jz adder2 ;ZF=1 结果为零跳转
mov [si],al ;279 mov si,offset cnt
inc si
loop adder1 ;295 mov cl,19
adder2:
mov al,24h
mov [si],al ;279 mov si,offset cnt
lea si,cnt
mov bl,[si]
xor ax,ax
mov al,20
mul bl
mov si,offset newname
mov di,offset namelist
add di,ax
mov cx,20
cld ;DF=0 指针向增大方向移动
rep movsb ;318 mov cx,20
mov dx,offset entered
mov ah,9
int 21h
mov dx,offset distele ;020 distele db 'Tele:$' mov ah,9
int 21h
mov cl,19
mov si,offset newtele
adder3:
mov ah,01
int 21h
cmp al,0dh ;比较是否回车
jz adder4 ;ZF=1 结果为零跳转
mov [si],al ;279 mov si,offset cnt
inc si
loop adder3 ;327 mov cl,19
adder4:
mov al,24h
mov [si],al ;279 mov si,offset cnt
lea si,cnt
mov bl,[si]
xor ax,ax
mov al,20
mul bl
mov si,offset newtele
mov di,offset telelist
add di,ax
mov cx,20
cld ;DF=0 指针向增大方向移动rep movsb ;350 mov cx,20 mov dx,offset entered
mov ah,9
int 21h
mov si,offset cnt
mov al,[si]
inc al
mov [si],al
lea dx,addstr3
mov ah,9
int 21h
mov si,offset newname
mov cx,20
adder7:
mov al,0
mov [si],al
inc si
loop adder7 ;364 mov cx,20 mov si,offset newtele
mov cx,20
adder8:
mov al,0
mov [si],al
inc si
loop adder8 ;372 mov cx,20 adder6:
ret
adder endp
selbyname proc near ;1:Select
mov si,offset cnt ;013 cnt db 1 dup(?)
mov al,[si]
cmp al,0
ja selname6 ;CF或ZF=0 不低于跳转
lea dx,selstr5
mov ah,9
int 21h
jmp selname5
selname6:
mov dx,offset disname ;019 disname db 'Name:$' mov ah,9
int 21h
mov si,offset newname
mov cx,19
selname1:
mov ah,1
int 21h
cmp al,0dh ;比较是否回车
jz selname2 ;ZF=1 结果为零跳转
mov [si],al ;398 mov si,offset newname
inc si
loop selname1 ;399 mov cx,19
selname2:
mov al,24h
mov [si],al
mov dx,offset entered
mov ah,9
int 21h
mov si,offset cnt
mov dx,[si]
mov bx,0
selname3:
mov si,offset newname
mov di,offset namelist
add di,bx
mov cx,20
cld ;DF=0 指针向增大方向移动
repe cmpsb ;424 mov cx,20
jz selname4 ;ZF=1 结果为零跳转
add bx,20
dec dx
cmp dx,0 ;比较cnt是否为零
jnz selname3 ;ZF=0 结果不为零跳转
mov dx,offset selstr3
mov ah,9
int 21h
mov dx,offset backstr ;024 backstr db 'Key 6 to main menu!',0dh,0ah,'$'
mov ah,9
int 21h
mov ah,1
int 21h
mov si,offset choice ;028 choice db 1 d up(?) mov [si],al
cmp al,'6' ;比较输入量是否为字符6
jz menu1 ;输入6,返回主菜单 ZF=1 结果为零跳转jmp selname5
selname4:
mov dx,offset selstr2
mov ah,9
int 21h
mov dx,offset disname ;019 disname db 'Name:$' mov ah,9
int 21h
mov dx,offset namelist
add dx,bx
mov ah,9
int 21h
mov dx,offset entered
mov ah,9
int 21h
mov dx,offset distele ;020 distele db 'Tele:$' mov ah,9
int 21h
mov dx,offset telelist
add dx,bx
mov ah,9
int 21h
mov dx,offset entered
mov ah,9
int 21h
mov ax,bx ;计算器记录查询到的是第几个
mov bl,20
div bl
inc al
mov si,offset cntselect
mov [si],al
selname5:
mov si,offset newname
mov cx,20
selname7:
mov al,0
mov [si],al
inc si
loop selname7 ;470 mov cx,20
ret
selbyname endp
selbytele proc near ;1:Select
mov si,offset cnt ;013 cnt db 1 dup(?)
mov al,[si]
cmp al,0 ;比较cnt是否为零
ja seltele6 ;CF或ZF=0 不低于跳转
lea dx,selstr5
mov ah,9
int 21h
mov dx,offset backstr
mov ah,9
int 21h
mov ah,1
int 21h
mov si,offset choice ;028 choice db 1 dup(?) mov [si],al
cmp al,'6' ;比较输入量是否为字符6
jz menu1 ;输入6,返回主菜单 ZF=1 结果为零跳转jmp seltele5
seltele6:
mov dx,offset distele ;020 distele db 'Tele:$' mov ah,9
int 21h
mov si,offset newtele
mov cx,19
seltele1:
mov ah,1
int 21h
cmp al,0dh ;比较是否回车
jz seltele2 ;ZF=1 结果为零跳转
mov [si],al ;494 mov si,offset newtele inc si
loop seltele1 ;495 mov cx,19
seltele2:
mov al,24h
mov [si],al
mov dx,offset entered
mov ah,9
int 21h
mov si,offset cnt
mov dx,[si]
mov bx,0
seltele3:
mov si,offset newtele
mov di,offset telelist
add di,bx
mov cx,20
cld ;DF=0 指针向增大方向移动
repe cmpsb ;520 mov cx,20
jz seltele4 ;ZF=1 结果为零跳转
add bx,20
dec dx
cmp dx,0 ;比较cnt是否为零
jnz seltele3 ;ZF=0 结果不为零跳转
mov dx,offset selstr4
mov ah,9
int 21h
jmp seltele5
seltele4:
mov dx,offset selstr2
mov ah,9
int 21h
mov dx,offset disname ;019 disname db 'Name:$' mov ah,9
int 21h
mov dx,offset namelist
add dx,bx
mov ah,9
int 21h
mov dx,offset entered
mov ah,9
int 21h
mov dx,offset distele ;020 distele db 'Tele:$' mov ah,9
int 21h
mov dx,offset telelist
add dx,bx
mov ah,9
int 21h
mov dx,offset entered
mov ah,9
int 21h
seltele5:
mov si,offset newname
mov cx,20
seltele7:
mov al,0
mov [si],al
inc si
loop seltele7 ;560 mov cx,20 ret
selbytele endp
select proc near ;1:Select
select1:
mov dx,offset selstr1
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,'1' ;比较输入量是否为字符1 jz select2 ;ZF=1 结果为零跳转
cmp al,'2' ;比较输入量是否为字符2 jz select3 ;ZF=1 结果为零跳转
jmp select1
select2:
call clear
call selbyname
jmp select4
select3:
call clear
call selbytele
select4:
ret
select endp
modify proc near ;3:Modify
call selbyname
mov si,offset cntselect
mov al,[si]
cmp al,0 ;比较cntselect是否为零
jz modify5 ;ZF=1 结果为零跳转
lea dx,modstr3
mov ah,9
int 21h
mov dx,offset modstr1
mov ah,9
int 21h
mov si,offset newname
mov cx,20
modify1:
mov ah,1
int 21h
cmp al,0dh ;比较是否回车
jz modify2 ;ZF=1 结果为零跳转
mov [si],al ;608 mov si,offset newname inc si
loop modify1 ;609 mov cx,20
modify2:
mov al,24h
mov [si],al
mov dx,offset entered
mov ah,9
int 21h
jmp modify6
modify5:
jmp modify7
modify6:
mov dx,offset modstr2
mov ah,9
int 21h
mov si,offset newtele
mov cx,20
modify3:
mov ah,1
int 21h
cmp al,0dh ;比较是否回车
jz modify4 ;ZF=1 结果为零跳转
mov [si],al ;635 mov si,offset newtele inc si
loop modify3 ;636 mov cx,20
modify4:
mov al,24h
mov [si],al
mov dx,offset entered
mov ah,9
int 21h
mov si,offset cntselect
mov al,[si]
dec al
mov bl,20
mul bl
mov si,offset newname
mov di,offset namelist
add di,ax
mov cx,20
cld ;DF=0 指针向增大方向移动
rep movsb ;661 mov cx,20
mov si,offset newtele
mov di,offset telelist
add di,ax
mov cx,20
cld ;DF=0 指针向增大方向移动
rep movsb ;667 mov cx,20
mov si,offset cntselect
mov ax,0
mov [si],ax
mov dx,offset modstr4
mov ah,9
int 21h
modify7:
mov si,offset newname
mov cx,20
modify8:
mov al,0
mov [si],al
inc si
loop modify8 ;679 mov cx,20 mov si,offset newname
mov cx,20
modify9:
mov al,0
mov [si],al
inc si
loop modify9 ;687 mov cx,20
ret
modify endp
delete proc near ;4:Delete
mov si,offset cnt ;013 cnt db 1 dup(?) mov al,[si]
cmp al,0 ;比较cnt是否为零
ja delete1 ;CF或ZF=0 不低于跳转
lea dx,delstr1
mov ah,9
int 21h
jmp delete2
delete1:
call selbyname
mov si,offset cntselect
mov al,[si]
cmp al,0 ;比较cntselect是否为零
jz delete1 ;ZF=1 结果为零跳转
mov si,offset cntselect
mov cl,[si]
dec cl
mov al,20
mul cl
mov bx,ax
mov si,offset cnt
mov cl,[si]
dec cl
mov al,20
mul cl
mov dx,ax
mov si,offset namelist
mov di,offset namelist
add si,dx
add di,bx
mov cx,20
cld ;DF=0 指针向增大方向移动
rep movsb ;729 mov cx,20
mov si,offset telelist ;010 telelist db 20 dup(20 dup(?))
mov di,offset telelist ;010 telelist db 20 dup(20 dup(?))
add si,dx
add di,bx
mov cx,20
cld ;DF=0 指针向增大方向移动
rep movsb ;736 mov cx,20
mov si,offset cnt
mov al,[si]
dec al
mov [si],al
mov si,offset cntselect
mov al,0
mov [si],al
mov dx,offset delstr2
mov ah,9
int 21h
delete2:
ret
delete endp
clear proc near ;取当前显示方式
mov ah,0fh
int 10h
mov ah,0
int 10h
ret
clear endp
start:
mov ax,datas
mov ds,ax
mov es,ax
call cshdata
menu1:
call clear
call displaytitle
mov ah,1
int 21h
cmp al,'1' ;比较输入量是否为字符1 jz sel ;ZF=1 结果为零跳转
cmp al,'2' ;比较输入量是否为字符2 jz adde ;ZF=1 结果为零跳转
cmp al,'3' ;比较输入量是否为字符3 jz modi ;ZF=1 结果为零跳转
cmp al,'4' ;比较输入量是否为字符4 jz del ;ZF=1 结果为零跳转
cmp al,'5' ;比较输入量是否为字符5 jz dis ;ZF=1 结果为零跳转
cmp al,'8' ;比较输入量是否为字符8 jz out1 ;ZF=1 结果为零跳转
jmp menu1
sel:
call clear
call select
jmp back
adde:
call clear
call adder
jmp back
modi:
call clear
call modify
jmp back
del:
call clear
call delete
jmp back
dis:
call clear
call disdata
back:
mov dx,offset backstr
mov ah,9
int 21h
mov ah,1
int 21h
mov si,offset choice ;028 choice db 1 dup(?) mov [si],al
cmp al,'6' ;比较输入量是否为字符6
jz menu1 ;输入6,返回主菜单 ZF=1 结果为零跳转call clear
jmp back
out1:
main endp
codes ends
end start。