汇编实验四:查找电话号码.doc
- 文档编号:1921400
- 上传时间:2023-05-02
- 格式:DOC
- 页数:11
- 大小:135.50KB
汇编实验四:查找电话号码.doc
《汇编实验四:查找电话号码.doc》由会员分享,可在线阅读,更多相关《汇编实验四:查找电话号码.doc(11页珍藏版)》请在冰点文库上搜索。
一、实验目的
学习用汇编语言设计与编写子程序
二、实验要求
(1)要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分;
(2)程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;
(3)凡有新的输入后,程序应按人名对电话号码表重新排序;
(4)程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。
nametel.
XXXXXXXX
三、实验提示:
(1)显示提示符’Inputname:
’;
(2)调用子程序input_name接收人名;
(3)调用子程序stor_name把人名存入电话号码表tel_tab中:
(4)显示提示符’Inputatelephonenumber:
’;
(5)调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中;
(6)如输入已结束则调用name_sort子程序对电话号码表接人名排序;
(7)显示提示符’Doyouwantatelephonenumber?
(Y/N)’;
(8)回答N收退出程序;
(9)回答Y则再显示提示符’name?
’;
(10)调用子程序input_name接收人名;
(11)调用子程序name_search在电话号码表中查找所要的电话号码;
(12)调用子程序printline按要求格式显示人名及电话号码;
(13)重复查号提示符直至用户不要求查号为止。
四、实验程序
datareasegment
tel_namelabelbyte
maxnlendb20
namelendb?
nameflddb21dup(?
);定义20个字符的用于存放人名的字符串
tel_numlabelbyte
maxtlendb8
tellendb?
telflddb9dup(?
);定义8个字符的用于存放电话号码的字符串
tel_tabdb50dup(20dup(''),8dup(''));定义可存放50项纪录的电话号码表
tel_savdb28dup(?
),13,10,'$'
listdb20dup(''),8dup(''),0dh,0ah,'$';定义电话号码表的每个条目
string1db'Inputname:
','$'
string2db'Inputatelphonenumber:
','$'
string3db'Doyouwantatelephonenumber?
(Y/N)','$'
string4db'name?
','$'
string5db'Wouldyouliketoinputatelephonelist?
(Y/N)','$'
string6db'TheTel_Labisempty.','$'
string7db'Thereisnolistfitting.','$'
string8db'nametel.','$'
string9db'DoyouwantaTel_Lab?
(Y/N)','$'
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
int21h;输入,进行选择
movdl,4eh
cmpal,dl
jesort_n;若输入为N,则跳转至sort_n,进行电话号码表的排序
movdl,6eh
cmpal,dl
jesort_n;若输入为n,则同上
movdl,59h
cmpal,dl
jeinput_n;若输入为Y,则跳转至input_n,进行电话号码条目的输入
movdl,79h
cmpal,dl
jeinput_n;若输入为y,则同上
movah,02
movdx,0dh
int21h
movdx,0ah
int21h
jmpcho_inp;若输入不为Y(y)/N(n),则返回cho_inp,重新进行选择
input_n:
;输入人名,并保存
movah,02
movdx,0dh
int21h
movdx,0ah
int21h
movah,09
leadx,string1
int21h;输出“Inputname:
”
callinput_name;调用子程序input_name接收人名
callstor_name;调用子程序stor_name把人名存入电话号码表tel_tab中
input_p:
;输入电话号码,并保存
leadx,string2
movah,09
int21h;输出“Inputatelephonenumber:
”
callinphone;调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中
jmpcho_inp;跳转至cho_inp,按提示选择是否继续输入条目
sort_n:
;对电话号码表进行排序
movah,02
movdx,0dh
int21h
movdx,0ah
int21h
callname_sort;调用子程序name_sort,对电话号码表按人名排序
print_lab:
;输出整个电话号码表
leadx,string9
movah,09
int21h;输出“Doyouwantatel_lab?
(Y/N)”
movah,01
int21h;输入,进行选择
movcl,al
movah,02
movdl,0dh
int21h
movah,02
movdl,0ah
int21h
moval,cl
movdl,4eh
cmpal,dl
jesearch_n;若输入为N,则跳转至search_n,进行电话号码的查找
movdl,6eh
cmpal,dl
jesearch_n;若输入为n,则同上
movdl,59h
cmpal,dl
jegoon_p;若输入为Y,则跳转至goon_p,继续该部分操作
movdl,79h
cmpal,dl
jegoon_p;若输入为y,则同上
jmpprint_lab;若输入不为Y(y)/N(n),则跳转至print_lab,重新进行选择
goon_p:
;继续输出电话号码表的操作
callprintall;调用子程序printall,输出整个电话号码表
search_n:
;查找电话号码条目
leadx,string3
movah,09
int21h;输出“Doyouwantatelephonenumber?
(Y/N)”
movah,01
int21h;输入,进行选择
movcl,al
movah,02
movdl,0dh
int21h
movah,02
movdl,0ah
int21h
moval,cl
movdl,4eh
cmpal,dl
jeexit;若输入为N,则跳转至exit,退出程序
movdl,6eh
cmpal,dl
jeexit;若输入为n,则同上
movdl,59h
cmpal,dl
jegoon_s;若输入为Y,则跳转至goon_s,继续该部分操作
movdl,79h
cmpal,dl
jegoon_s;若输入为y,则同上
jmpsearch_n;若输入不为Y(y)/N(n),则跳转至search_n,重新进行选择
goon_s:
;继续查找操作
leadx,string4
movah,09
int21h;输出“name?
”
movah,02
movdl,0dh
int21h
movah,02
movdl,0ah
int21h
callinput_name;调用子程序input_name,接收人名
callname_search;调用子程序name_search,对电话号码表按人名进行查找
jmpsearch_n;跳转至search_n,继续进行查找
exit:
;退出程序
ret
mainendp
input_nameprocnear;子程序input_name,用于接受人名
movah,0ah
leadx,tel_name
int21h;输入人名
movah,02h
movdl,0dh
int21h
movdl,0ah
int21h
movbh,0
movbl,namelen
movcx,20
subcx,bx
namebrk:
;将人名除外所剩下的字符用空格填满
movnamefld[bx],20h
incbx
loopnamebrk
ret
input_nameendp
stor_nameprocnear;子程序stor_name,用于把人名存入电话号码表tel_tab中
inctel_count;将人名存入电话号码之后,电话号码条目数量增1
cld
leasi,namefld
movcx,10
repmovsw
ret
stor_nameendp
inphoneprocnear;子程序inphone,用于接受电话号码,并把它存入电话号码表tel_tab中
movah,0ah
leadx,tel_num
int21h;输入电话号码
movah,02h
movdl,0dh
int21h
movdl,0ah
int21h
movbh,0
movbl,tellen
movcx,8
subcx,bx
telbrk:
;将电话号码数字除外,所剩下的字符用空格填满
movtelfld[bx],20h
incbx
looptelbrk
cld
leasi,telfld
movcx,4
repmovsw
ret
inphoneendp
name_sortprocnear;子程序name_sort,用于对电话号码表按人名排序
subdi,56
movendadd,di
cmpal,0
jeempty
start_sort:
movswapped,0
leasi,tel_tab
cmp_n:
movcx,20
movdi,si
adddi,28
movax,di
movbx,si
repecmpsb
jbeno_exchg
callexchange_name;调用子程序exchang_name,将两个相邻的条目进行对调
jmpno_exchg
empty:
;若电话号码表为空
movah,09
leadx,string6
int21h;输出“Thetel_labisempty.”
jmpexit_sort
no_exchg:
;不进行对调
movsi,ax
cmpsi,endadd
jbecmp_n
cmpswapped,0
jnzstart_sort
exit_sort:
ret
name_sortendp
exchange_nameprocnear;子程序exchange_name,用于将电话号码表中的两个相邻的条目进行对调
movcx,14
leadi,list
movsi,bx
repmovsw
movcx,14
movdi,bx
repmovsw
movcx,14
leasi,list
repmovsw
movswapped,1
ret
exchange_nameendp
name_searchprocnear;子程序name_search,用于按人名在电话号码表中查找所要的电话号码
pushdi
moval,tel_count
leasi,tel_tab
again:
cmpal,0
jeno_list
movcx,20
leadi,namefld
movbx,si
repzcmpsb
jbfind_n
jano_list
decal
movah,09
leadx,string8
int21h;输出“nametel.”
movah,02
movdl,0dh
int21h
movdl,0ah
int21h
callprintline;调用子程序printline,输出所查找到的条目
jmpexit_sch
find_n:
movsi,bx
addsi,28
jmpagain
no_list:
;若不存在该条目
movah,09
leadx,string7
int21h;输出“Thereisnolistfitting.”
movah,02
movdl,0dh
int21h
movdl,0ah
int21h
exit_sch:
popdi
ret
name_searchendp
printlineprocnear;子程序printline,用于输出所查找到的电话号码条目
movsi,bx
leadi,list
movcx,14
repmovsw
movah,09
leadx,list
int21h
ret
printlineendp
printallprocnear;子程序printall,用于输出整个电话号码表
pushdi
movah,09
leadx,string8
int21h
movah,02
movdl,0dh
int21h
movdl,0ah
int21h
movbl,tel_count
cmpbl,0
jeempty_lab
leasi,tel_tab
next:
leadi,list
movcx,14
repmovsw
movah,09
leadx,list
int21h
decbl
jnznext
jmpexit_pall
empty_lab:
movah,09
leadx,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 查找 电话号码