汇编程序实验4_查找电话号码_第1页
汇编程序实验4_查找电话号码_第2页
汇编程序实验4_查找电话号码_第3页
汇编程序实验4_查找电话号码_第4页
汇编程序实验4_查找电话号码_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、实验目的学习用汇编语言设计与编写子程序二、实验要求(1) 要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分;(2) 程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;(3) 凡有新的输入后,程序应按人名对电话号码表重新排序;(4) 程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。 name tel X X X X X X X X三、实验提示:(1)显示提示符 Input name:; (2)调用子程序 input_name 接收人名; (3)调用子程序 stor_name 把人名存入

2、电话号码表 tel_tab 中:(4)显示提示符 Input a telephone number:;(5)调用子程序 inphone 接收电话号码,并把它存入电话号码表tel_tab中;(6)如输入已结束则调用 name_sort 子程序对电话号码表接人名排序; (7)显示提示符 Do you want a telephone number ?(Y/N);(8)回答N收退出程序; (9)回答Y则再显示提示符 name ?;(10)调用子程序 input_name接收人名;(11)调用子程序 name_search 在电话号码表中查找所要的电话号码; (12)调用子程序 printline 按

3、要求格式显示人名及电话号码; (13)重复查号提示符直至用户不要求查号为止。四、实验程序datarea segment tel_name label byte maxnlen db 20 namelen db ? namefld db 21 dup(?) ;定义20个字符的用于存放人名的字符串 tel_num label byte maxtlen db 8 tellen db ? telfld db 9 dup(?) ;定义8个字符的用于存放电话号码的字符串 tel_tab db 50 dup(20 dup(' '), 8 dup(' ') ;定义可存放50项纪

4、录的电话号码表 tel_sav db 28 dup(?), 13, 10, '$' list db 20 dup(' '), 8 dup(' '), 0dh, 0ah, '$' ;定义电话号码表的每个条目 string1 db 'Input name:', '$' string2 db 'Input a telphone number:', '$' string3 db 'Do you want a telephone number?(Y/N)', &

5、#39;$' string4 db 'name?', '$' string5 db 'Would you like to input a telephone list?(Y/N)', '$' string6 db 'The Tel_Lab is empty.', '$' string7 db 'There is no list fitting.', '$' string8 db 'name tel. ', '$' string9

6、 db 'Do you want a Tel_Lab?(Y/N)', '$' endadd dw ? swapped db 0 tel_count db 0 ;计算电话号码表中的条目数量datarea endsprognam segmentmain proc far ;主程序 assume cs: prognam, ds: datarea, es: datareastart: push ds sub ax, ax push ax mov ax, datarea mov ds, ax mov es, ax cld lea di, tel_tab ;将电话号码表传给

7、目的变址寄存器cho_inp: ;进行选择,是否输入条目 mov ah, 09 lea dx, string5 int 21h ;输出“Would you like to in put a telephone list?(Y/N)” mov ah, 01 int 21h ;输入,进行选择 mov dl, 4eh cmp al, dl je sort_n ;若输入为N,则跳转至sort_n,进行电话号码表的排序 mov dl, 6eh cmp al, dl je sort_n ;若输入为n,则同上 mov dl, 59h cmp al, dl je input_n ;若输入为Y,则跳转至inpu

8、t_n,进行电话号码条目的输入 mov dl, 79h cmp al, dl je input_n ;若输入为y,则同上 mov ah, 02 mov dx, 0dh int 21h mov dx, 0ah int 21h jmp cho_inp ;若输入不为Y(y)/N(n),则返回cho_inp,重新进行选择 input_n: ;输入人名,并保存 mov ah, 02 mov dx, 0dh int 21h mov dx, 0ah int 21h mov ah, 09 lea dx, string1 int 21h ;输出“Input name:” call input_name ;调用子

9、程序input_name接收人名 call stor_name ;调用子程序stor_name把人名存入电话号码表tel_tab中input_p: ;输入电话号码,并保存 lea dx,string2 mov ah, 09 int 21h ;输出“Input a telephone number:” call inphone ;调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中 jmp cho_inp ;跳转至cho_inp,按提示选择是否继续输入条目sort_n: ;对电话号码表进行排序 mov ah, 02 mov dx, 0dh int 21h mov dx, 0

10、ah int 21h call name_sort ;调用子程序name_sort,对电话号码表按人名排序print_lab: ;输出整个电话号码表 lea dx, string9 mov ah, 09 int 21h ;输出“Do you want a tel_lab?(Y/N)” mov ah, 01 int 21h ;输入,进行选择 mov cl, al mov ah, 02 mov dl, 0dh int 21h mov ah, 02 mov dl, 0ah int 21h mov al, cl mov dl, 4eh cmp al, dl je search_n ;若输入为N,则跳转

11、至search_n,进行电话号码的查找 mov dl, 6eh cmp al, dl je search_n ;若输入为n,则同上 mov dl, 59h cmp al, dl je goon_p ;若输入为Y,则跳转至goon_p,继续该部分操作 mov dl, 79h cmp al, dl je goon_p ;若输入为y,则同上 jmp print_lab ;若输入不为Y(y)/N(n),则跳转至print_lab,重新进行选择 goon_p: ;继续输出电话号码表的操作 call printall ;调用子程序printall,输出整个电话号码表search_n: ;查找电话号码条目

12、lea dx, string3 mov ah, 09 int 21h ;输出“Do you want a telephone number?(Y/N)” mov ah, 01 int 21h ;输入,进行选择 mov cl, al mov ah, 02 mov dl, 0dh int 21h mov ah, 02 mov dl, 0ah int 21h mov al, cl mov dl, 4eh cmp al, dl je exit ;若输入为N,则跳转至exit,退出程序 mov dl, 6eh cmp al, dl je exit ;若输入为n,则同上 mov dl, 59h cmp a

13、l, dl je goon_s ;若输入为Y,则跳转至goon_s,继续该部分操作 mov dl, 79h cmp al, dl je goon_s ;若输入为y,则同上 jmp search_n ;若输入不为Y(y)/N(n),则跳转至search_n,重新进行选择 goon_s: ;继续查找操作 lea dx, string4 mov ah, 09 int 21h ;输出“name?” mov ah, 02 mov dl, 0dh int 21h mov ah, 02 mov dl, 0ah int 21h call input_name ;调用子程序input_name,接收人名 cal

14、l name_search ;调用子程序name_search,对电话号码表按人名进行查找 jmp search_n ;跳转至search_n,继续进行查找exit: ;退出程序 retmain endpinput_name proc near ;子程序input_name,用于接受人名 mov ah, 0ah lea dx, tel_name int 21h ;输入人名 mov ah, 02h mov dl, 0dh int 21h mov dl, 0ah int 21h mov bh, 0 mov bl, namelen mov cx, 20 sub cx, bxnamebrk: ;将人名

15、除外所剩下的字符用空格填满 mov namefldbx, 20h inc bx loop namebrk retinput_name endpstor_name proc near ;子程序stor_name,用于把人名存入电话号码表tel_tab中 inc tel_count ;将人名存入电话号码之后,电话号码条目数量增1 cld lea si, namefld mov cx, 10 rep movsw retstor_name endpinphone proc near ;子程序inphone,用于接受电话号码,并把它存入电话号码表tel_tab中 mov ah, 0ah lea dx,

16、tel_num int 21h ;输入电话号码 mov ah, 02h mov dl, 0dh int 21h mov dl, 0ah int 21h mov bh, 0 mov bl, tellen mov cx, 8 sub cx, bxtelbrk: ;将电话号码数字除外,所剩下的字符用空格填满 mov telfldbx, 20h inc bx loop telbrk cld lea si, telfld mov cx, 4 rep movsw ret inphone endpname_sort proc near ;子程序name_sort,用于对电话号码表按人名排序 sub di,

17、56 mov endadd, di cmp al, 0 je emptystart_sort: mov swapped, 0 lea si, tel_tabcmp_n: mov cx, 20 mov di, si add di, 28 mov ax, di mov bx, si repe cmpsb jbe no_exchg call exchange_name ;调用子程序exchang_name,将两个相邻的条目进行对调 jmp no_exchgempty: ;若电话号码表为空 mov ah, 09 lea dx, string6 int 21h ;输出“The tel_lab is em

18、pty.” jmp exit_sortno_exchg: ;不进行对调 mov si, ax cmp si, endadd jbe cmp_n cmp swapped, 0 jnz start_sortexit_sort: retname_sort endpexchange_name proc near ;子程序exchange_name,用于将电话号码表中的两个相邻的条目进行对调 mov cx, 14 lea di, list mov si, bx rep movsw mov cx, 14 mov di, bx rep movsw mov cx, 14 lea si, list rep mo

19、vsw mov swapped, 1 retexchange_name endpname_search proc near ;子程序name_search,用于按人名在电话号码表中查找所要的电话号码 push di mov al, tel_count lea si, tel_tabagain: cmp al, 0 je no_list mov cx, 20 lea di, namefld mov bx, si repz cmpsb jb find_n ja no_list dec al mov ah, 09 lea dx, string8 int 21h ;输出“name tel. ” mov

20、 ah, 02 mov dl, 0dh int 21h mov dl, 0ah int 21h call printline ;调用子程序printline,输出所查找到的条目 jmp exit_schfind_n: mov si, bx add si, 28 jmp againno_list: ;若不存在该条目 mov ah, 09 lea dx, string7 int 21h ;输出“There is no list fitting.” mov ah, 02 mov dl, 0dh int 21h mov dl, 0ah int 21hexit_sch: pop di retname_s

21、earch endpprintline proc near ;子程序printline,用于输出所查找到的电话号码条目 mov si, bx lea di, list mov cx, 14 rep movsw mov ah, 09 lea dx, list int 21h retprintline endpprintall proc near ;子程序printall,用于输出整个电话号码表 push di mov ah, 09 lea dx, string8 int 21h mov ah, 02 mov dl, 0dh int 21h mov dl, 0ah int 21h mov bl, tel_count cmp bl, 0 je empty_lab lea si, tel_tabnext: lea di, list mov cx, 14 rep movsw

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论