版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《湿法冶金过程及设备培训》-电解实质及应用重难点答疑
- 心理健康教育与咨询实务操作
- 外卖平台优化运营岗位面试要点
- 商业地产投资分析与项目运营管理策略
- 名校教师职业规划与提升能力策略
- 安全生产岗位安全生产培训记录
- 开发经理项目文档管理规范
- 应对疫情挑战的职业技能培训防护面试必-备技能解析
- 商业策略分析与企业经营管理指南
- 总裁秘书差旅安排规范
- 2025福建漳州市九龙江集团有限公司招聘32人备考题库附答案详解(考试直接用)
- 汽车制造行业年终述职
- GB/T 46621-2025机械式停车设备报废条件
- 西安科技大学高新学院《电气工程专业英语》2024-2025学年第一学期期末试卷
- 2025新疆维吾尔自治区融资担保有限责任公司招聘6人人笔试历年参考题库附带答案详解
- 广东省领航高中联盟2025-2026学年高三上学期12月考试语文试卷
- 股骨间粗隆骨折护理查房
- 【英语】北京市朝阳区2024-2025学年高一下学期期末考试试题(解析版)
- 2025心血管疾病患者血糖波动管理的专家共识课件
- (2026年)生命的拥抱-海姆立克急救法培训课件
- 煤矿电瓶车运输 培训课件
评论
0/150
提交评论