《汇编语言》课程设计电话号码管理程序.docx
《《汇编语言》课程设计电话号码管理程序.docx》由会员分享,可在线阅读,更多相关《《汇编语言》课程设计电话号码管理程序.docx(38页珍藏版)》请在冰点文库上搜索。
《汇编语言》课程设计电话号码管理程序
摘要
现代社会人与人之间进行通讯的主要工具离不开电话,当打电话给某人时,从电话簿中繁多的信息中查找对应的号码是很繁琐的事情。
根据现代人对快速查找电话簿信息的实际需要,设计了电话号码管理程序。
该程序是典型的信息管理程序,采用MasmforWindows为编译环境,DOS为运行环境,核心语言是汇编语言。
本程序主要分为五大模块:
选择查找模块,增添模块,修改模块,删除模块和显示模块。
通过需求分析、程序设计、测试等过程,实现了对信息查找、增添、修改、删除和显示功能。
该程序满足了人们翻阅电话簿的实际需求,人们可以通过该电话号码管理程序随时调用电话号码簿,方便自己与他人的沟通,优化了信息配置,提高了生活效率,加速了生活节奏。
关键词:
电话簿,信息管理,MasmforWindows
1选题背景及意义
进入21世纪以来,现代社会步入了高速的信息化的时代,人际之间的交往,新闻事件的传播,高科技设备的应用,远程技术操作,都离不开通讯设备。
对于个人而言,最常用的莫过于电话了。
但是伴随电话的普及,杂乱无章的电话号码持续困扰着人们,这反而成了现代高科技、信息化社会下的一块障碍,是快节奏下人们很难避免的一大问题。
随着信息技术的高速发展和各种各样的通讯设备的引入,作为人与人之间通讯的数据库,电话簿也要适应时代的发展。
现代通讯应该利用新的数据管理技术,开发数据管理程序,这样才能在激烈的现代社会中适应高节奏步伐。
2主要设计内容及预期目标
图2-1程序功能模块图
本管理程序采用了MasmforWindows为编译化境,DOS为运行环境,核心语言是汇编语言,使用者可以通过该管理程序灵活使用自己的电话簿,方便使用者。
该程序实施后,能够满足用户对号码选择查找,号码增添,号码修改,号码删除和号码显示进行操作,提高生活效率。
程序功能模块图如图2-1所示。
3概要设计
根据对工作流程的分析,程序可以分为以下几个功能模块。
(1)选择查找:
根据姓名或电话查找目标信息。
(2)增添:
根据姓名与电话号码为信息增添。
(3)修改:
查找要修改的信息对应的姓名,从而修改此信息。
(4)删除:
查找要删除的信息对应的姓名,从而删除此信息。
(5)显示:
显示电话号码簿中储存的全部信息。
整个程序由主程序和六个分支程序组成,主程序负责对各个子程序的调用,完成程序的主体功能。
主程序如图3-1。
各个子程序负责不同的操作指令,完成对电话号码簿的详细操作。
程序流程如图3-2。
图3-1主程序界面图
图3-2主程序流程图
4详细设计
4.1选择查找模块
选择查找模块。
该模块用来实现选择操作内容和以姓名或号码为查询关键字,对目标文件信息查询操作。
按钮使“1:
Select”,进入信息选择模式。
在运行过程中,在“Key6tomainmenu!
”提示下按“6”,程序重新回到主菜单。
在“1:
Selectbyname”提示下按“1”,查询进入以姓名为入口的查找方式,显示要查找的姓名和对应的号码;在“2:
Selectbytelephone”提示下按“2”,查询进入以号码为入口的查找方式,显示要查找的号码和对应的姓名。
选择查找程序界面如图4-1。
子程序流程如图4-2。
图4-1选择查找程序界面图
图4-2子程序流程图
4.2增添模块
增添模块。
该模块用来实现增添操作姓名和号码,对目标文件信息添加操作。
按钮使“2:
Insert”,进入增添模式。
在运行过程中,在“Key6tomainmenu!
”提示下按“6”,程序重新回到主菜单。
在“Name:
”提示下输入姓名,在“Tele:
”提示输入号码。
每次输入完成后使用回车表示输入的结束,并且进入下一条操作。
增添程序界面如图4-3。
图4-3增添程序界面图
4.3修改模块
修改模块。
该模块用来实现修改操作内容和以姓名或号码为查询关键字,对目标文件信息修改操作。
按钮使“3:
Modify”,进入修改模式。
在运行过程中,在“Key6tomainmenu!
”提示下按“6”,程序重新回到主菜单。
在“Name:
”提示下输入姓名,在“Tele:
”提示输入号码。
每次输入完成后使用回车表示输入的结束,并且进入下一条操作。
修改程序界面如图4-4。
图4-4修改程序界面图
4.4删除模块
删除模块。
该模块用来实现删除操作内容和以姓名或号码为查询关键字,对目标文件信息删除操作。
按钮使“4:
Delete”,进入信息删除模式。
在运行过程中,在“Key6tomainmenu!
”提示下按“6”,程序重新回到主菜单。
在“Name:
”提示下输入姓名,在“Tele:
”提示输入号码。
每次输入完成后使用回车表示输入的结束,并且进入下一条操作。
删除程序界面如图4-5。
图4-5删除程序界面图
4.5显示模块
显示模块。
该模块用来实现显示内容和以姓名或号码为查询关键字,对目标文件信息显示操作。
按钮使“5:
Showallrecord”,进入信息显示模式。
在运行过程中,在“Key6tomainmenu!
”提示下按“6”,程序重新回到主菜单。
显示程序界面如图4-6。
图4-6显示程序界面图
5使用说明
(1)打开计算机启动WindowsXP操作系统。
(2)打开“开始”,选择“所有程序”,打开“MasmforWindows集成实验环境”下的“MasmforWindows集成实验环境”文件。
(3)保存空白文件到指定区域,导入程序。
(4)依次点击“运行”工具栏下“编译成目标文件”;“生成可执行文件”;“生成动态链接库文件”。
最后点击“运行”即可在DOS环境下运行该程序。
6设计总结
为期两周的汇编语言课程设计已经结束了,但在两周的设计中,我认为自己有颇多得收获。
我们知道,汇编语言课程设计是我们计算机控制专业教学计划中的必不可少的实践环节,不仅巩固了我们所学的书本知识,而且为我们提供了一次理论与实践相结合的机会。
电话号码管理程序是信息管理程序中比较典型的。
系统地介绍了电话号码管理程序的开发过程,程序设计中隐含的问题及手机缺陷,通过实际使用找寻解决方法以便提高当前应用程序和改善工作性能.利用其提供的各种选项,在短时间内对电话号码簿进行查询等操作。
所以从一开始我就特别重视,想借此机会锻炼一下自己解决实际问题的能力,为以后的工作或学习打好基础。
确立设计题目之后,我就去大量搜集查阅相关资料,并提取有效素材,付出大量的精力,整合程序实现的全部功能。
该程序能够根据使用者的需求,快捷方便的为使用者提供服务。
对本设计题目进行的总体构思与设计,是先将该课题按所实现的功能将其分为查询、添加、修改、删除和显示模块,这样就会在脑海中形成一个清晰的设计思路,然后将这些功能模块通过主程序调用来实现。
然后就是分别编译子程序,使得每一个子程序实现各自的功能,完成不同的任务操作。
通过利用在课堂上学到的知识点和指令,并且搜集相关素材,先从主程序开始,然后一步一步的分别编写各个功能模块,为了使程序变得易读易修改,我采用分层标记的方式注明每一个模块,同时借鉴一些相关编程经验结合自己的设计思想完成这项任务。
最后调试程序,加以修改和完善,使得程序多而不乱。
总之,通过这次课程设计,使我更加认识到理论结合实际的重要性,只有将所学的理论知识灵活运用到实际中去才会体会到学习的乐趣。
我们不但要学习好书本上的理论知识,还要经常利用这些知识点活学活用,更多得思考与实践。
在每一次程序设计中反复总结经验教训,在失败中思考,学到更多实际的东西。
7程序清单
stackssegment;堆栈段代码
dw512dup(?
)
stacksends
datassegment;数据段代码
titlestrdb'Welcometothetelephonedirectory!
',0dh,0ah,'Pleaseenteryourchoice!
',0dh,0ah,'$'
Menustrdb'1:
Select',0dh,0ah,'2:
Insert',0dh,0ah,'3:
Modify',0dh,0ah,'4:
Delete',0dh,0ah,'5:
Showallrecord',0dh,0ah,'8:
Esc',0dh,0ah,'$'
namelistdb20dup(20dup(?
))
telelistdb20dup(20dup(?
))
newnamedb20dup(?
)
newteledb20dup(?
)
cntdb1dup(?
)
cntselectdb1dup(?
)
choicedb1dup(?
)
entereddb0dh,0ah,'$'
disnamedb'Name:
$'
disteledb'Tele:
$'
backstrdb'Key6tomainmenu!
',0dh,0ah,'$'
disstrdb'Allrecord!
',0dh,0ah,'$'
selstr1db'1:
Selectbyname',0dh,0ah,'2:
Selectbytelephone',0dh,0ah,'$'
selstr2db'Theimformation!
',0dh,0ah,'$'
selstr3db'Nameisnotexist!
',0dh,0ah,'$'
selstr4db'Telephoneisnotexist!
',0dh,0ah,'$'
selstr5db'Telephonedirectoryisempty!
',0dh,0ah,'$'
addstr1db'Insertthenewnameandnewtele!
',0dh,0ah,'$'
addstr2db'Telephonedirectoryisfull!
',0dh,0ah,'$'
addstr3db'Addsuccessfully!
',0dh,0ah,'$'
modstr1db'Newname:
$'
modstr2db'Newtele:
$'
modstr3db'Inputnewrecord!
',0dh,0ah,'$'
modstr4db'Modifiedsuccessfully!
',0dh,0ah,'$'
delstr1db'Telephonedirectoryisempty!
',0d,0ah,'$'
delstr2db'Deletedsuccessfully!
',0dh,0ah,'$'
name1db'aaaaaaaaa$'
name2db'bbbbbbbbb$'
name3db'ccccccccc$'
name4db'ddddddddd$'
name5db'eeeeeeeee$'
telephone1db'11111111111$'
telephone2db'22222222222$'
telephone3db'33333333333$'
telephone4db'44444444444$'
telephone5db'55555555555$'
datasends
codessegment;代码段代码
mainprocfar
assumecs:
codes,ds:
datas
displaytitleprocnear;显示主菜单
movdx,offsettitlestr
movah,9
int21h
leadx,menustr
movah,9
int21h
displaytitleendp
cshdataprocnear;输入对比
movbx,0
movsi,offsetname1;045name1db'aaaaaaaaa$'
leadi,namelist
adddi,bx
movcx,20
cshname11:
moval,[si];073movsi,offsetname1
mov[di],al;074leadi,namelist
incsi
incdi
cmpal,'$';比较name1是否为空
jzcshname12;ZF=1结果为零跳转
loopcshname11;077movcx,20
cshname12:
addbx,20
movsi,offsetname2;046name2db'bbbbbbbbb$'
leadi,namelist
adddi,bx
movcx,20
cshname21:
moval,[si];073movsi,offsetname1
mov[di],al;074leadi,namelist
incsi
incdi
cmpal,'$';比较name1是否为空
jzcshname22;ZF=1结果为零跳转
loopcshname21;092movcx,20
cshname22:
addbx,20
movsi,offsetname3;047name3db'ccccccccc$'
leadi,namelist
adddi,bx
movcx,20
cshname31:
moval,[si];073movsi,offsetname1
mov[di],al;074leadi,namelist
incsi
incdi
cmpal,'$';比较name1是否为空
jzcshname32;ZF=1结果为零跳转
loopcshname31;108movcx,20
cshname32:
addbx,20
movsi,offsetname4;048name4db'ddddddddd$'
leadi,namelist
adddi,bx
movcx,20
cshname41:
moval,[si];073movsi,offsetname1
mov[di],al;074leadi,namelist
incsi
incdi
cmpal,'$';比较name1是否为空
jzcshname42;ZF=1结果为零跳转
loopcshname41;124movcx,20
cshname42:
addbx,20
movsi,offsetname5;049name5db'eeeeeeeee$'
leadi,namelist
adddi,bx
movcx,20
cshname51:
moval,[si];073movsi,offsetname1
mov[di],al;074leadi,namelist
incsi
incdi
cmpal,'$';比较name1是否为空
jzcshname52;ZF=1结果为零跳转
loopcshname51;140movcx,20
cshname52:
addbx,20
movax,bx;初始化计数器cnt
movbl,20
divbl
leasi,cnt;013cntdb1dup(?
)
mov[si],al;(al)<-(ax)/(bl)的商
movbx,0
leasi,telephone1
movdi,offsettelelist
adddi,bx
movcx,20
cshtele11:
moval,[si];159movsi,offsettelephone1
mov[di],al;160leadi,telelist
incsi
incdi
cmpal,'$';比较telephone1是否为空
jzcshtele12;ZF=1结果为零跳转
loopcshtele11;162movcx,20
cshtele12:
addbx,20
leasi,telephone2
movdi,offsettelelist
adddi,bx
movcx,20
cshtele21:
moval,[si];159movsi,offsettelephone1
mov[di],al;160leadi,telelist
incsi
incdi
cmpal,'$';比较telephone1是否为空
jzcshtele22;ZF=1结果为零跳转
loopcshtele21;178movcx,20
cshtele22:
addbx,20
leasi,telephone3
movdi,offsettelelist
adddi,bx
movcx,20
cshtele31:
moval,[si];159movsi,offsettelephone1
mov[di],al;160leadi,telelist
incsi
incdi
cmpal,'$';比较telephone1是否为空
jzcshtele32;ZF=1结果为零跳转
loopcshtele31;194movcx,20
cshtele32:
addbx,20
leasi,telephone4
movdi,offsettelelist
adddi,bx
movcx,20
cshtele41:
moval,[si];159movsi,offsettelephone1
mov[di],al;160leadi,telelist
incsi
incdi
cmpal,'$';比较telephone1是否为空
jzcshtele42;ZF=1结果为零跳转
loopcshtele41;210movcx,20
cshtele42:
addbx,20
leasi,telephone5
movdi,offsettelelist
adddi,bx
movcx,20
cshtele51:
moval,[si];159movsi,offsettelephone1
mov[di],al;160leadi,telelist
incsi
incdi
cmpal,'$';比较telephone1是否为空
jzcshtele52;ZF=1结果为零跳转
loopcshtele51;210movcx,20
cshtele52:
addbx,20
ret
cshdataendp
disdataprocnear;5:
Showallrecord
movdx,offsetdisstr;020disteledb'Tele:
$'
movah,9
int21h
leasi,cnt;013cntdb1dup(?
)
movcl,[si]
movbx,0
disdata1:
movdx,offsetdisname;019disnamedb'Name:
$'
movah,9
int21h
leadx,namelist
adddx,bx
movah,9
int21h
movdx,offsetentered
movah,9
int21h
movdx,offsetdistele;020disteledb'Tele:
$'
movah,9
int21h
leadx,telelist
adddx,bx
movah,9
int21h
movdx,offsetentered
movah,9
int21h
addbx,20
loopdisdata1
ret
disdataendp
adderprocnear;2:
Insert
movsi,offsetcnt
moval,[si]
cmpal,20
jbadder5;CF=1不高于跳转
leadx,addstr2
movah,9
int21h
jmpadder6
adder5:
leadx,addstr1
movah,9
int21h
leadx,disname;019disnamedb'Name:
$'
movah,9
int21h
movcl,19
leasi,newname;013newnamedb20dup(?
)
adder1:
;逐字符输入名字
movah,1
int21h
cmpal,0dh;比较是否回车
jzadder2;ZF=1结果为零跳转
mov[si],al;279movsi,offsetcnt
incsi
loopadder1;295movcl,19
adder2:
moval,24h
mov[si],al;279movsi,offsetcnt
leasi,cnt
movbl,[si]
xorax,ax
moval,20
mulbl
movsi,offsetnewname
movdi,offsetnamelist
adddi,ax
movcx,20
cld;DF=0指针向增大方向移动
repmovsb;318movcx,20
movdx,offsetentered
movah,9
int21h
movdx,offsetdistele;020disteledb'Tele:
$'
movah,9
int21h
movcl,19
movsi,offsetnewtele
adder3:
movah,01
int21h
cmpal,0dh;比较是否回车
jzadder4;ZF=1结果为零跳转
mov[si],al;279movsi,offsetcnt
incsi
loopadder3;327movcl,19
adder4:
moval,24h
mov[si],al;279movsi,offsetcnt
leasi,cnt
movbl,[si]
xorax,ax
moval,20
mulbl
movsi,offsetnewtele
movdi,offsettelelist
adddi,ax
movcx,20
cld;DF=0指针向增大方向移动
repmovsb;350movcx,20
movdx,offsetentered
movah,9
int21h
movsi,offsetcnt
moval,[si]
incal
mov[si],al
leadx,addstr3
movah,9
int21h
movsi,offsetnewname
movcx,20
adder7:
moval,0
mov