汇编实验四查找电话号码Word格式.docx
《汇编实验四查找电话号码Word格式.docx》由会员分享,可在线阅读,更多相关《汇编实验四查找电话号码Word格式.docx(17页珍藏版)》请在冰点文库上搜索。
nameflddb21dup(?
);
定义20个字符的用于存放人名的字符串
tel_numlabelbyte
maxtlendb8
tellendb?
telflddb9dup(?
定义8个字符的用于存放电话号码的字符串
tel_tabdb50dup(20dup('
'
),8dup('
));
定义可存放50项纪录的电话号码表
tel_savdb28dup(?
),13,10,'
$'
listdb20dup('
),0dh,0ah,'
;
定义电话号码表的每个条目
string1db'
Inputname:
'
'
string2db'
Inputatelphonenumber:
string3db'
Doyouwantatelephonenumber?
(Y/N)'
string4db'
name?
string5db'
Wouldyouliketoinputatelephonelist?
string6db'
TheTel_Labisempty.'
string7db'
Thereisnolistfitting.'
string8db'
nametel.'
string9db'
DoyouwantaTel_Lab?
endadddw?
swappeddb0
tel_countdb0;
计算电话号码表中的条目数量
datareaends
prognamsegment
mainprocfar;
主程序
assumecs:
prognam,ds:
datarea,es:
datarea
start:
pushds
subax,ax
pushax
movax,datarea
movds,ax
moves,ax
cld
leadi,tel_tab;
将电话号码表传给目的变址寄存器
cho_inp:
进行选择,是否输入条目
movah,09
leadx,string5
int21h;
输出“Wouldyouliketoinputatelephonelist?
(Y/N)”
movah,01
输入,进行选择
movdl,4eh
cmpal,dl
jesort_n;
若输入为N,则跳转至sort_n,进行电话号码表的排序
movdl,6eh
若输入为n,则同上
movdl,59h
jeinput_n;
若输入为Y,则跳转至input_n,进行电话号码条目的输入
movdl,79h
若输入为y,则同上
movah,02
movdx,0dh
int21h
movdx,0ah
jmpcho_inp;
若输入不为Y(y)/N(n),则返回cho_inp,重新进行选择
input_n:
输入人名,并保存
leadx,string1
输出“Inputname:
”
callinput_name;
调用子程序input_name接收人名
callstor_name;
调用子程序stor_name把人名存入电话号码表tel_tab中
input_p:
输入电话号码,并保存
leadx,string2
输出“Inputatelephonenumber:
callinphone;
调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中
跳转至cho_inp,按提示选择是否继续输入条目
sort_n:
对电话号码表进行排序
callname_sort;
调用子程序name_sort,对电话号码表按人名排序
print_lab:
输出整个电话号码表
leadx,string9
输出“Doyouwantatel_lab?
movcl,al
movdl,0dh
movdl,0ah
moval,cl
jesearch_n;
若输入为N,则跳转至search_n,进行电话号码的查找
jegoon_p;
若输入为Y,则跳转至goon_p,继续该部分操作
jmpprint_lab;
若输入不为Y(y)/N(n),则跳转至print_lab,重新进行选择
goon_p:
继续输出电话号码表的操作
callprintall;
调用子程序printall,输出整个电话号码表
search_n:
查找电话号码条目
leadx,string3
输出“Doyouwantatelephonenumber?
jeexit;
若输入为N,则跳转至exit,退出程序
jegoon_s;
若输入为Y,则跳转至goon_s,继续该部分操作
jmpsearch_n;
若输入不为Y(y)/N(n),则跳转至search_n,重新进行选择
goon_s:
继续查找操作
leadx,string4
输出“name?
调用子程序input_name,接收人名
callname_search;
调用子程序name_search,对电话号码表按人名进行查找
跳转至search_n,继续进行查找
exit:
退出程序
ret
mainendp
input_nameprocnear;
子程序input_name,用于接受人名
movah,0ah
leadx,tel_name
输入人名
movah,02h
movbh,0
movbl,namelen
movcx,20
subcx,bx
namebrk:
将人名除外所剩下的字符用空格填满
movnamefld[bx],20h
incbx
loopnamebrk
input_nameendp
stor_nameprocnear;
子程序stor_name,用于把人名存入电话号码表tel_tab中
inctel_count;
将人名存入电话号码之后,电话号码条目数量增1
leasi,namefld
movcx,10
repmovsw
stor_nameendp
inphoneprocnear;
子程序inphone,用于接受电话号码,并把它存入电话号码表tel_tab中
leadx,tel_num
输入电话号码
movbl,tellen
movcx,8
telbrk:
将电话号码数字除外,所剩下的字符用空格填满
movtelfld[bx],20h
looptelbrk
leasi,telfld
movcx,4
ret
inphoneendp
name_sortprocnear;
子程序name_sort,用于对电话号码表按人名排序
subdi,56
movendadd,di
cmpal,0
jeempty
start_sort:
movswapped,0
leasi,tel_tab
cmp_n:
movdi,si
adddi,28
movax,di
movbx,si
repecmpsb
jbeno_exchg
callexchange_name;
调用子程序exchang_name,将两个相邻的条目进行对调
jmpno_exchg
empty:
若电话号码表为空
leadx,string6
输出“Thetel_labisempty.”
jmpexit_sort
no_exchg:
不进行对调
movsi,ax
cmpsi,endadd
jbecmp_n
cmpswapped,0
jnzstart_sort
exit_sort:
name_sortendp
exchange_nameprocnear;
子程序exchange_name,用于将电话号码表中的两个相邻的条目进行对调
movcx,14
leadi,list
movsi,bx
movdi,bx
leasi,list
movswapped,1
exchange_nameendp
name_searchprocnear;
子程序name_search,用于按人名在电话号码表中查找所要的电话号码
pushdi
moval,tel_count
again:
jeno_list
leadi,namefld
repzcmpsb
jbfind_n
jano_list
decal
leadx,string8
输出“nametel.”
callprintline;
调用子程序printline,输出所查找到的条目
jmpexit_sch
find_n:
addsi,28
jmpagain
no_list:
若不存在该条目
leadx,string7
输出“Thereisnolistfitting.”
exit_sch:
popdi
name_searchendp
printlineprocnear;
子程序printline,用于输出所查找到的电话号码条目
leadx,list
printlineendp
printallprocnear;
子程序printall,用于输出整个电话号码表
movbl,tel_count
cmpbl,0
jeempty_lab
next:
decbl
jnznext
jmpexit_pall
empty_lab:
exit_pall:
printallendp
prognamends
endstart
五、模块说明
主函数main:
用来显示用户操作提示,调用子模块,使程序完成查找电话号码的过程
接收人名函数input_name:
输入人名,将此人名保存至缓冲区,并用空格补足
保存人名函数stor_name:
将人名从缓冲区中取出,保存在电话号码表中的人名区中
接收并且保存电话号码函数inphone:
输入电话号码,将此电话号码保存至缓冲区,并用空格补足,然后,将电话号码从缓冲区中取出,保存在电话号码表中的电话号码区中
电话号码表排序函数name_sort:
运用冒泡法,对电话号码表按人名排序
对调条目位置函数exchange:
将不符合排序规律的条目的位置进行调整
查找电话号码函数name_search:
输入人名,在电话号码表中依次比较人名进行查找
输出电话号码条目函数printline:
查找到条目之后,将条目输出
输出电话号码表函数printall:
将整个电话号码表的所有条目依次输出
六、模块层次图
七、调试结果