汇编实验四查找电话号码.docx

上传人:b****3 文档编号:6043709 上传时间:2023-05-09 格式:DOCX 页数:17 大小:43.01KB
下载 相关 举报
汇编实验四查找电话号码.docx_第1页
第1页 / 共17页
汇编实验四查找电话号码.docx_第2页
第2页 / 共17页
汇编实验四查找电话号码.docx_第3页
第3页 / 共17页
汇编实验四查找电话号码.docx_第4页
第4页 / 共17页
汇编实验四查找电话号码.docx_第5页
第5页 / 共17页
汇编实验四查找电话号码.docx_第6页
第6页 / 共17页
汇编实验四查找电话号码.docx_第7页
第7页 / 共17页
汇编实验四查找电话号码.docx_第8页
第8页 / 共17页
汇编实验四查找电话号码.docx_第9页
第9页 / 共17页
汇编实验四查找电话号码.docx_第10页
第10页 / 共17页
汇编实验四查找电话号码.docx_第11页
第11页 / 共17页
汇编实验四查找电话号码.docx_第12页
第12页 / 共17页
汇编实验四查找电话号码.docx_第13页
第13页 / 共17页
汇编实验四查找电话号码.docx_第14页
第14页 / 共17页
汇编实验四查找电话号码.docx_第15页
第15页 / 共17页
汇编实验四查找电话号码.docx_第16页
第16页 / 共17页
汇编实验四查找电话号码.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编实验四查找电话号码.docx

《汇编实验四查找电话号码.docx》由会员分享,可在线阅读,更多相关《汇编实验四查找电话号码.docx(17页珍藏版)》请在冰点文库上搜索。

汇编实验四查找电话号码.docx

汇编实验四查找电话号码

一、实验目的

学习用汇编语言设计与编写子程序

二、实验要求

(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,string6

int21h

exit_pall:

popdi

ret

printallendp

prognamends

endstart

五、模块说明

主函数main:

用来显示用户操作提示,调用子模块,使程序完成查找电话号码的过程

接收人名函数input_name:

输入人名,将此人名保存至缓冲区,并用空格补足

保存人名函数stor_name:

将人名从缓冲区中取出,保存在电话号码表中的人名区中

接收并且保存电话号码函数inphone:

输入电话号码,将此电话号码保存至缓冲区,并用空格补足,然后,将电话号码从缓冲区中取出,保存在电话号码表中的电话号码区中

电话号码表排序函数name_sort:

运用冒泡法,对电话号码表按人名排序

对调条目位置函数exchange:

将不符合排序规律的条目的位置进行调整

查找电话号码函数name_search:

输入人名,在电话号码表中依次比较人名进行查找

输出电话号码条目函数printline:

查找到条目之后,将条目输出

输出电话号码表函数printall:

将整个电话号码表的所有条目依次输出

六、模块层次图

七、调试结果

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2