版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南省株洲市2026-2027学年高一上学期第一次月考历史自编卷(统编版)(原卷版)
- 2026年09月27日 无锡市新吴区测评基地 英格索兰 产品研发工程师 21人
- 2026青少年爱国主义教育课件
- 广东省河源市东源县深圳市三高东源高级中学2025-2026学年高一(下)第一次段考数学试卷(含简略答案)
- 安徽亳州市涡阳县第三中学2025-2026学年高二上学期期末考试化学试卷(含答案)
- 2026年部编版小学六年级数学下册第8单元方程与不等式练习课件
- 困难气道课件
- 常见皮肤病性传播疾病痤疮
- AI赋能下机器人脊柱手术的智能规划策略
- 2026初一年级资深班主任工作经验分享课件-班风学风建设经验谈
- TD/T 1031.6-2011土地复垦方案编制规程第6部分:建设项目
- 霸王茶姬公司管理制度
- 统编版(2024)七年级上册道德与法治《探究与分享+运用你的经验+单元思考与行动》 参考答案
- 医院培训课件:《外科手术部位感染预防与控制》
- 实习生实习证明协议书
- NB/T 11434.5-2023煤矿膏体充填第5部分:胶凝材料技术要求
- 团体心理咨询
- 中建一局粗装修分包合同范本
- 情景教学法在安全教育中的实践探索
- 数字媒体技术与应用(移动学习版)PPT完整版全套教学课件
- 《无人机组装与调试》第7章 固定翼无人机的调试
评论
0/150
提交评论