汇编实验四:查找电话号码
电话号码查找课程设计

电话号码查找课程设计一、课程目标知识目标:1. 学生能掌握电话号码簿的基本结构,理解电话号码的编排规律。
2. 学生能运用查找策略,快速准确地找到特定人物的电话号码。
3. 学生了解电话号码簿的更新和整理方法,认识到信息整理的重要性。
技能目标:1. 培养学生快速阅读和筛选信息的能力,提高查找电话号码的效率。
2. 培养学生运用分类、比较等思维方式,对电话号码信息进行整理和归纳。
3. 培养学生团队协作能力,通过合作查找,共同完成任务。
情感态度价值观目标:1. 培养学生对信息整理和查找工作的兴趣,激发他们积极主动参与课程学习的热情。
2. 培养学生尊重他人隐私,遵循查找电话号码的相关规定。
3. 培养学生具备责任心,意识到电话号码查找在紧急情况下的重要性。
本课程针对小学四年级学生,结合他们的认知水平、心理特点和实际需求,设计具有实用性和趣味性的电话号码查找课程。
通过本课程的学习,学生将能够掌握查找电话号码的基本方法和技巧,提高解决问题的能力,同时培养良好的情感态度价值观。
为实现课程目标,后续教学设计和评估将围绕具体学习成果展开,确保课程的有效实施。
二、教学内容1. 电话号码簿的基本概念:介绍电话号码簿的结构、编排方式及常用术语。
- 教材章节:第二章第一节“认识电话号码簿”2. 查找电话号码的方法与技巧:- 顺序查找法:按照电话号码簿的编排顺序,逐一查找目标电话号码。
- 分类查找法:根据电话号码簿的分类,快速定位目标电话号码。
- 关键字查找法:利用电话号码簿中的关键字,提高查找效率。
- 教材章节:第二章第二节“电话号码查找方法”3. 电话号码簿的更新与整理:- 介绍电话号码簿的更新方法,如添加、删除、修改电话号码。
- 探讨电话号码簿整理的重要性,学习整理技巧。
- 教材章节:第二章第三节“电话号码簿的更新与整理”4. 实践与应用:- 设计查找任务,让学生实际操作,提高查找电话号码的技能。
- 分析查找过程中遇到的问题,总结经验,优化查找策略。
汇编课程设计电话号码的查询

课程设计任务书学生姓名:专业班级:计算机科学与技术指导教师:工作单位:计算机科学与技术学院题目: 电话号码本编辑和查找程序的设计与实现初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。
具体的设计任务及要求:1)建立一个可存放50项的电话号码表,每项包括人名及电话号码两部分;2)程序可接受输入人名及相应的电话号码,并将他们加入电话号码表中;3)凡有新的输入后,程序应按人名对电话号码表重新排序;4)程序可接受需要查找电话号码的人名,并从电话号码表中查出其电话号码,并显示出来。
5)程序采用子程序结构,结构清晰;6)友好清晰的用户界面,能识别输入错误并控制错误的修改。
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试,和验收。
周5:撰写课程设计报告。
指导教师签名: 2010年 1 月 14 日系主任(或责任教师)签名: 2010年 1 月 14 日1.设计内容及要求1.1设计题目电话号码本编辑和查找程序的设计与实现1.2设计要求1.2.1建立一个可存放50项的电话号码表,每项包括人名及电话号码两部分;1.2.2程序可接受输入人名及相应的电话号码,并将他们加入电话号码表中;1.2.3凡有新的输入后,程序应按人名对电话号码表重新排序;1.2.4程序可接受需要查找电话号码的人名,并从电话号码表中查出其电话号码,并显示出来。
手机通讯录实验报告及使用说明(附源代码)

手机通讯录实验报告及使用说明(附源代码)自查报告。
标题,手机通讯录实验报告及使用说明(附源代码)。
自查报告内容:在本次实验中,我使用了Java编程语言,开发了一个简单的手机通讯录应用程序。
该应用程序可以实现添加联系人、查找联系人、删除联系人等基本功能。
在开发过程中,我遵循了面向对象的编程思想,使用了类和对象的概念来组织和管理联系人信息。
在实验中,我首先设计了Contact类,用于表示一个联系人的信息,包括姓名、电话号码、邮箱等属性。
然后,我设计了AddressBook类,用于管理联系人信息,包括添加联系人、查找联系人、删除联系人等操作。
最后,我编写了一个简单的用户界面,用于与用户交互,实现对通讯录的操作。
在实验过程中,我遇到了一些问题,比如在删除联系人时没有进行足够的输入验证,导致程序出现了错误。
不过,通过调试和修改代码,我最终解决了这些问题,并且实现了一个稳定和可靠的手机通讯录应用程序。
使用说明:1. 添加联系人,在应用程序中选择“添加联系人”选项,然后输入联系人的姓名、电话号码、邮箱等信息,点击“确认”按钮即可完成添加。
2. 查找联系人,在应用程序中选择“查找联系人”选项,然后输入联系人的姓名或电话号码,点击“搜索”按钮即可查找到对应的联系人信息。
3. 删除联系人,在应用程序中选择“删除联系人”选项,然后输入要删除的联系人的姓名或电话号码,点击“确认”按钮即可删除该联系人。
4. 显示所有联系人,在应用程序中选择“显示所有联系人”选项,即可查看当前通讯录中的所有联系人信息。
源代码:```java。
public class Contact {。
private String name;private String phone;private String email;public Contact(String name, String phone, String email) {。
= name;this.phone = phone;this.email = email;}。
《汇编语言》课程设计-电话号码管理程序

摘要现代社会人与人之间进行通讯的主要工具离不开电话,当打电话给某人时,从电话簿中繁多的信息中查找对应的号码是很繁琐的事情。
根据现代人对快速查找电话簿信息的实际需要,设计了电话号码管理程序。
该程序是典型的信息管理程序,采用M a s m f o r W i n d o w s 为编译环境,D O S为运行环境,核心语言是汇编语言。
本程序主要分为五大模块:选择查找模块,增添模块,修改模块,删除模块和显示模块。
通过需求分析、程序设计、测试等过程,实现了对信息查找、增添、修改、删除和显示功能。
该程序满足了人们翻阅电话簿的实际需求,人们可以通过该电话号码管理程序随时调用电话号码簿,方便自己与他人的沟通,优化了信息配置,提高了生活效率,加速了生活节奏。
关键词:电话簿,信息管理,M a s m f o r W i n d o w s开始登录界面输入操作指令姓名选择号码选择姓名增添号码增添姓名修改号码修改姓名删除号码删除姓名显示号码显示进入对应指令操作项1 选题背景及意义进入21世纪以来,现代社会步入了高速的信息化的时代,人际之间的交往,新闻事件的传播,高科技设备的应用,远程技术操作,都离不开通讯设备。
对于个人而言,最常用的莫过于电话了。
但是伴随电话的普及,杂乱无章的电话号码持续困扰着人们,这反而成了现代高科技、信息化社会下的一块障碍,是快节奏下人们很难避免的一大问题。
随着信息技术的高速发展和各种各样的通讯设备的引入,作为人与人之间通讯的数据库,电话簿也要适应时代的发展。
现代通讯应该利用新的数据管理技术,开发数据管理程序,这样才能在激烈的现代社会中适应高节奏步伐。
2 主要设计内容及预期目标图2-1程序功能模块图本管理程序采用了M a s m f o r W i n d o w s为编译化境,D O S为运行环境,核心语言是汇编语言,使用者可以通过该管理程序灵活使用自己的电话簿,方便使用者。
该程序实施后,能够满足用户对号码选择查找,号码增添,号码修改,号码删除和号码显示进行操作,提高生活效率。
电话号码查询系统实验报告

课程名称: 《数据结构》课程设计分数_______课程设计题目:电文的编码和译码——简单Huffman编码/译码的设计与实现姓名:学习院系: 计算机学院专业:计算机科学与技术学院年级: 三学号:学习指导教师:王爱平2013 年 9月 27 日目录:1课程设计的目的 (3)2 需求分析 (3)3 课程设计报告内容 (x)3.1概要设计 (3)3.2详细设计 (3)3.3调试分析 (5)3.4用户手册 (5)3.5测试结果 (5)3.6程序清单 (8)4 小结 (14)5 参考文献 (15)1.课程设计的目的(1) 熟练使用 C 语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;2. 需求分析①I:初始化(Initialization)。
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
②E:编码(Encoding)。
利用已建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
③D:译码(Decoding)。
利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
④P:印代码文件(Print)。
将文件CodeFile以紧凑格式显示在终端上,每行50个代码。
同时将此字符形式的编码写入文件CodePrint中。
⑤T:印哈夫曼树(Tree Printing)。
将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
3 课程设计报告内容利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。
实验六-电话记录查询

#include<stdlib.h> //引用库函数#include<stdio.h>#define LIST_INIT_SIZE 100#define LISTINCRENENT 10 typedef struct INfo{int num; //关键字char name[10];int tele;char address[20];}INfo;typedef struct{INfo *elem;int length; //当前长度int listsize; //当前分配的存储容量}SqList;int InitList(SqList &L) //初始化线性表{L.elem=(INfo*)malloc(LIST_INIT_SIZE*sizeof(INfo));if(!L.elem)exit(1); //存储分配失败L.length=0;L.listsize=LIST_INIT_SIZE; //初始存储容量return 0;}int Create(SqList &L) //建立表{int i,l;L.length=0;printf("==============>> 电话号码查询系统<<===============\n");printf("请输入电话记录的长度:");scanf("%d",&l);printf("请输入关键字(num) 姓名电话号码地址\n");for(i=1;i<=l;i++){scanf("%d",&L.elem[i].num);scanf("%s",L.elem[i].name);scanf("%d",&L.elem[i].tele);scanf("%s",L.elem[i].address);L.length++;}return 1;}void SelectSort(SqList &L) //简单选择排序{int i,j,m;for(i=0;i<L.length;i++){m=i;for(j=i+1;j<=L.length;j++)if(L.elem[j].num<L.elem[m].num)m=j;if(m!=i){L.elem[0]=L.elem[i];L.elem[i]=L.elem[m];L.elem[m]=L.elem[0];}}}int Insert(SqList &L,int &m){int i=1;INfo *newbase,*p,*q;printf("请输入插入位置:num=");scanf("%d",&m);while((L.elem[i].num-m)!=0&&(i<=L.length))i++; /*查找判断*/if(i>L.length){printf("=======>提示:对不起,无该电话记录……\n"); /*输入失败信息*/ return 0;}printf("请输入插入的电话记录\n");printf("关键字(num) 姓名电话号码地址\n");scanf("%d",&L.elem[0].num);scanf("%s",L.elem[0].name);scanf("%d",&L.elem[0].tele);scanf("%s",L.elem[0].address);if(L.length>=L.listsize){newbase=(INfo*)realloc(L.elem,(L.listsize+LISTINCRENENT)*sizeof(INfo));if(!newbase)exit(1); //存储分配失败L.elem=newbase; //新基址L.listsize+=LISTINCRENENT; //增加存储容量}q=&(L.elem[i-1]); //q为插入位置for(p=&(L.elem[L.length]);p>=q;--p)*(p+1)=*p; //插入位置及之后的记录右移*q=L.elem[i];L.elem[i]=L.elem[0];++L.length;printf("=========>> 插入后的电话记录<<========\n");return 0;}int Search_Bin(SqList &L,int m){int low,high,mid;low=0;high=L.length;printf("请输入要查找的:num=");scanf("%d",&m);while(low<=high){mid=(low+high)/2;if(m==L.elem[mid].num){printf("---------所查找的电话记录--------\n");printf("关键字(num) 姓名电话号码地址\n");printf(" %d\t",L.elem[mid].num);printf(" %s\t",L.elem[mid].name);printf("%d\t",L.elem[mid].tele);printf(" %s\n",L.elem[mid].address);return mid;}else if(m<L.elem[mid].num)high=mid-1;else low=mid+1;}if(low>high)printf("=======>提示:对不起,无该电话记录……\n");return 0;}void Modify(SqList &L,int m) /*按关键字num查找,修改电话记录*/{int i=1;printf("请输入要修改电话记录的:num=");scanf("%d",&m);while((L.elem[i].num-m)!=0&&(i<=L.length))i++; /*查找判断*/if(i>L.length){printf("=======>提示:对不起,无该电话记录……\n"); /*输入失败信息*/ return ;}printf("---------该电话记录--------\n");printf("关键字(num) 姓名电话号码地址\n");printf(" %d\t",L.elem[i].num);printf(" %s\t",L.elem[i].name);printf("%d\t",L.elem[i].tele);printf(" %s\n",L.elem[i].address);printf("请重新输入电话记录\n");printf("关键字(num) 姓名电话号码地址:\n");scanf("%d",&L.elem[i].num);scanf("%s",L.elem[i].name);scanf("%d",&L.elem[i].tele);scanf("%s",L.elem[i].address);printf("==========>> 修改后,电话记录排序<<===========\n");}int Delete(SqList &L,int m){int i=1;INfo *p,*q;printf("请输入要删除的电话记录:num=");scanf("%d",&m);while((L.elem[i].num-m)!=0&&(i<=L.length))i++; /*查找判断*/if(i>L.length){printf("=======>提示:对不起,无该电话记录……\n");return 0;}p=&(L.elem[i]); //p为被删除记录的位置q=(L.elem+L.length);for(++p;p<=q;++p)*(p-1)=*p;--L.length;printf("============>> 删除后的电话记录<<============\n");return 0;}void Print(SqList L) //打印电话记录本中的现有记录{int i;printf("关键字(num) 姓名电话号码地址\n");for(i=1;i<=L.length;i++){printf(" %d\t",L.elem[i].num);printf(" %s\t",L.elem[i].name);printf("%d\t",L.elem[i].tele);printf(" %s\n",L.elem[i].address);}printf("\n");printf("目前电话记录本中有%d个记录!\n",L.length);printf("\n");}void main() //主函数//{int num,choice;SqList L;InitList(L);Create(L);printf("===========>> 输入后,经排序打印出<<============\n"); SelectSort(L);Print(L);for(;;){printf("==============>> 电话号码查询系统<<==============\n");printf("1:插入一个新的电话记录\n");printf("2:查找电话记录\n");printf("3:修改电话记录\n");printf("4:删除电话记录\n");printf("0:退出\n");printf("请输入选择:");scanf("%d",&choice);switch(choice){case 1:printf("=================>> 插入<<================\n");Insert(L,num);Print(L);printf("=========>> 插入后,电话记录排序<<========\n");SelectSort(L);Print(L);break;case 2:printf("================>> 查找<<=================\n");Search_Bin(L,num);break;case 3:printf("================>> 修改<<=================\n");Modify(L,num);SelectSort(L);Print(L);break;case 4:printf("================>> 删除<<=================\n");Delete(L,num);Print(L);break;case 0:printf("=====>> 退出! <<=====\n");exit(0);default:printf("输入有误,请重新输入!\n");break;}}while(1);}。
(完整word版)哈希表实现电话号码查询报告
《数据结构》课程设计报告书题目:哈希表存储的电话号码查询专业:学号:学生姓名:指导教师:完成日期:目录1.实训题目………………………………………………1。
1实训要求…………………………………………. 1。
2需求分析…………………………………………。
2.系统设计………………………………………………2。
1总体设计………………………………………….. 2。
2详细设计…………………………………………。
2。
2。
1程序头文件…………………………………。
2。
2.2学生信息类及哈希表类……………………。
.2.2.3主函数流程…………………………………。
. 3。
系统实现………………………………………………。
3.1编码………………………………………………。
3。
2测试………………………………………………。
4。
归纳总结……………………………………………….4.1实训中遇到的问题以及解决办法………………。
.4.2感想和心得体会…………………………………。
5。
参考资料………………………………………………1.实训题目1.1实训要求⏹设每个记录有以下数据项:用户名、电话、地址;⏹从键盘输入各记录,以电话号码为关键字建立哈希表;⏹采用链地址法方法解决冲突;⏹能够查找并显示给定电话号码的相关记录。
1。
2需求分析本次实验要求采用哈希表完成信息的查找和储存,哈希表即为散列表。
本程序采用学生信息管理为例,设每个学生有电话号码,学生姓名,家庭住址三个信息。
通过建立哈希表储存信息,信息储存在节点中,并通过以电话号码为关键字完成查找,并显示出该学生的姓名,电话号码以及家庭住址.当哈希表中的数据与输入的数据发生冲突时,使用节点向后移一位的方法来解决冲突。
2.系统设计2.1总体设计本系统通过设计学生信息类和哈希表类来完成整个系统。
通过学生信息类实现从键盘输入学生的姓名,电话号码以及家庭地址.将学生的信息储存在建立的哈希节点内,通过多个链表保存,相同信息的保存在同一个节点内。
汇编语言表格查找实验报告
四、实验分析及总结
通过这次的实验,让我更熟悉了汇编语言。
并且在程序的调试过程中,
多困难。
这次试验让我初步了解DOS显示功能调用。
这让我对调试程序也有了更深的体会。
调试程序的时候一直出错,但是检查了很久都发现没有错误。
发现有几个字打错了。
最后才把程序调试成功。
而且在写程序的时候也遇到了很多疑惑,都是不停的翻书和询问同学才解决的这些问题。
这次的实验比上次试验难度有所加大。
有的时候自己不太能理解代码里面的内容,所以以后要更加认真的学习。
无论是实验课和理论课我都会全力以赴去学好它。
教评价指标。
汇编实验四:查找电话号码
汇编实验四:查找电话号码一、实验目的学习用汇编语言设计与编写子程序二、实验要求(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 把人名存入电话号码表 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 按要求格式显示人名及电话号码; (13)重复查号提示符直至用户不要求查号为止。
四、实验程序datarea segmenttel_name label bytemaxnlen db 20namelen db ?namefld db 21 dup(?) ;定义20个字符的用于存放人名的字符串tel_num label bytemaxtlen db 8tellen db ?telfld db 9 dup(?) ;定义8个字符的用于存放电话号码的字符串tel_tab db 50 dup(20 dup(' '), 8 dup(' ')) ;定义可存放50项纪录的电话号码表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)', '$'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 db 'Do you want a Tel_Lab?(Y/N)', '$'endadd dw ?swapped db 0tel_count db 0 ;计算电话号码表中的条目数量datarea endsprognam segmentmain proc far ;主程序assume cs: prognam, ds: datarea, es: datareastart:push dssub ax, axpush axmov ax, datareamov ds, axmov es, axcldlea di, tel_tab ;将电话号码表传给目的变址寄存器cho_inp: ;进行选择,是否输入条目mov ah, 09lea dx, string5int 21h ;输出“Would you like to in put a telephone list?(Y/N)” mov ah, 01int 21h ;输入,进行选择mov dl, 4ehcmp al, dlje sort_n ;若输入为N,则跳转至sort_n,进行电话号码表的排序mov dl, 6ehcmp al, dlje sort_n ;若输入为n,则同上mov dl, 59hcmp al, dlje input_n ;若输入为Y,则跳转至input_n,进行电话号码条目的输入mov dl, 79hcmp al, dlje input_n ;若输入为y,则同上mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hjmp cho_inp ;若输入不为Y(y)/N(n),则返回cho_inp,重新进行选择input_n: ;输入人名,并保存mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hmov ah, 09lea dx, string1int 21h ;输出“Input name:”call input_name ;调用子程序input_name接收人名call stor_name ;调用子程序stor_name把人名存入电话号码表tel_tab中input_p: ;输入电话号码,并保存lea dx,string2mov ah, 09int 21h ;输出“Input a telephone number:”call inphone ;调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中jmp cho_inp ;跳转至cho_inp,按提示选择是否继续输入条目sort_n: ;对电话号码表进行排序mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hcall name_sort ;调用子程序name_sort,对电话号码表按人名排序print_lab: ;输出整个电话号码表lea dx, string9mov ah, 09int 21h ;输出“Do you want a tel_lab?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov cl, almov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hmov al, clmov dl, 4ehcmp al, dlje search_n ;若输入为N,则跳转至search_n,进行电话号码的查找mov dl, 6ehcmp al, dlje search_n ;若输入为n,则同上mov dl, 59hcmp al, dlje goon_p ;若输入为Y,则跳转至goon_p,继续该部分操作mov dl, 79hcmp al, dlje goon_p ;若输入为y,则同上jmp print_lab ;若输入不为Y(y)/N(n),则跳转至print_lab,重新进行选择goon_p: ;继续输出电话号码表的操作call printall ;调用子程序printall,输出整个电话号码表search_n: ;查找电话号码条目lea dx, string3mov ah, 09int 21h ;输出“Do you want a telephone number?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov cl, almov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hmov al, clmov dl, 4ehcmp al, dlje exit ;若输入为N,则跳转至exit,退出程序mov dl, 6ehcmp al, dlje exit ;若输入为n,则同上mov dl, 59hcmp al, dlje goon_s ;若输入为Y,则跳转至goon_s,继续该部分操作mov dl, 79hcmp al, dlje goon_s ;若输入为y,则同上jmp search_n ;若输入不为Y(y)/N(n),则跳转至search_n,重新进行选择goon_s: ;继续查找操作lea dx, string4mov ah, 09int 21h ;输出“name?”mov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hcall input_name ;调用子程序input_name,接收人名call name_search ;调用子程序name_search,对电话号码表按人名进行查找jmp search_n ;跳转至search_n,继续进行查找exit: ;退出程序retmain endpinput_name proc near ;子程序input_name,用于接受人名mov ah, 0ahlea dx, tel_nameint 21h ;输入人名mov ah, 02hmov dl, 0dhint 21hmov dl, 0ahint 21hmov bh, 0mov bl, namelenmov cx, 20sub cx, bxnamebrk: ;将人名除外所剩下的字符用空格填满mov namefld[bx], 20hinc bxloop namebrkretinput_name endpstor_name proc near ;子程序stor_name,用于把人名存入电话号码表tel_tab中inc tel_count ;将人名存入电话号码之后,电话号码条目数量增1 cldlea si, namefldmov cx, 10rep movswretstor_name endpinphone proc near ;子程序inphone,用于接受电话号码,并把它存入电话号码表tel_tab中mov ah, 0ahlea dx, tel_numint 21h ;输入电话号码mov ah, 02hmov dl, 0dhint 21hmov dl, 0ahint 21hmov bh, 0mov bl, tellenmov cx, 8sub cx, bxtelbrk: ;将电话号码数字除外,所剩下的字符用空格填满mov telfld[bx], 20hinc bxloop telbrkcldlea si, telfldmov cx, 4rep movswretinphone endpname_sort proc near ;子程序name_sort,用于对电话号码表按人名排序sub di, 56mov endadd, dicmp al, 0je emptystart_sort:mov swapped, 0lea si, tel_tabcmp_n:mov cx, 20mov di, siadd di, 28mov ax, dimov bx, sirepe cmpsbjbe no_exchgcall exchange_name ;调用子程序exchang_name,将两个相邻的条目进行对调jmp no_exchgempty: ;若电话号码表为空mov ah, 09lea dx, string6int 21h ;输出“The tel_lab is empty.”jmp exit_sortno_exchg: ;不进行对调mov si, axcmp si, endaddjbe cmp_ncmp swapped, 0jnz start_sortexit_sort:retname_sort endpexchange_name proc near ;子程序exchange_name,用于将电话号码表中的两个相邻的条目进行对调mov cx, 14lea di, listmov si, bxrep movswmov cx, 14mov di, bxrep movswmov cx, 14lea si, listrep movswmov swapped, 1retexchange_name endpname_search proc near ;子程序name_search,用于按人名在电话号码表中查找所要的电话号码push dimov al, tel_countlea si, tel_tabagain:cmp al, 0je no_listmov cx, 20lea di, namefldmov bx, sirepz cmpsbjb find_nja no_listdec almov ah, 09lea dx, string8int 21h ;输出“name tel. ”mov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hcall printline ;调用子程序printline,输出所查找到的条目jmp exit_schfind_n:mov si, bxadd si, 28jmp againno_list: ;若不存在该条目mov ah, 09lea dx, string7int 21h ;输出“There is no list fitting.”mov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hexit_sch:pop diretname_search endpprintline proc near ;子程序printline,用于输出所查找到的电话号码条目mov si, bxlea di, listmov cx, 14rep movswmov ah, 09lea dx, listint 21hretprintline endpprintall proc near ;子程序printall,用于输出整个电话号码表push dimov ah, 09lea dx, string8int 21hmov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hmov bl, tel_countcmp bl, 0je empty_lablea si, tel_tabnext:lea di, listmov cx, 14rep movswmov ah, 09lea dx, listint 21hdec bljnz nextjmp exit_pallempty_lab:mov ah, 09lea dx, string6int 21hexit_pall:pop diretprintall endpprognam endsend start五、模块说明主函数main:用来显示用户操作提示,调用子模块,使程序完成查找电话号码的过程接收人名函数input_name:输入人名,将此人名保存至缓冲区,并用空格补足保存人名函数stor_name:将人名从缓冲区中取出,保存在电话号码表中的人名区中接收并且保存电话号码函数inphone:输入电话号码,将此电话号码保存至缓冲区,并用空格补足,然后,将电话号码从缓冲区中取出,保存在电话号码表中的电话号码区中电话号码表排序函数name_sort:运用冒泡法,对电话号码表按人名排序对调条目位置函数exchange:将不符合排序规律的条目的位置进行调整查找电话号码函数name_search:输入人名,在电话号码表中依次比较人名进行查找输出电话号码条目函数printline:查找到条目之后,将条目输出输出电话号码表函数printall:将整个电话号码表的所有条目依次输出六、模块层次图主函数main接收保存接收并且电话号查找电输出电人名人名保存电话码表排话号码话号码函数函数号码函数序函数函数表函数 Input_Stor_ inphone Name_ Name_ printall name name sort search对调条目输出电话位置函数号码条目exchange 函数printline七、调试结果。
汇编编写电话号码表
call crlf
mov tel_tab[si+0],21
lea dx,tel_tab[si+0]
mov ah,0ah
int 21h
xor bx,bx
lea dx,inputn
mov ah,09h
int 21h
call stor_name
call crlf
lea dx,inputp
mov ah,09h
inphone proc near ;输入电话并保存到表中
mov al,tel_tab_num
mov bl,36
mul bl
mov si,ax
search:
lea dx,inputn
mov ah,09h
int 21h
mov cx,20
mov si,0
setspace:
mov putname[si+2],' '
jz sort_exit_jmp
jmp loop1
sort_exit_jmp:
jmp sort_exit
loop1: mov di,cx
mov bx,0
loop2: mov al,tel_tab[bx+2]
putname db 21,0,21 dup(' ')
noname db 'The name you input is not exist!$'
yorn db 'n' ;用于判断是否找到所输入的名字
inc si
loop setspace
lea dx,putname
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的学习用汇编语言设计与编写子程序二、实验要求(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 把人名存入电话号码表 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 按要求格式显示人名及电话号码;(13)重复查号提示符直至用户不要求查号为止。
四、实验程序datarea segmenttel_name label bytemaxnlen db 20namelen db ?namefld db 21 dup(?) ;定义20个字符的用于存放人名的字符串tel_num label bytemaxtlen db 8tellen db ?telfld db 9 dup(?) ;定义8个字符的用于存放电话号码的字符串tel_tab db 50 dup(20 dup(' '), 8 dup(' ')) ;定义可存放50项纪录的电话号码表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)', '$'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 db 'Do you want a Tel_Lab?(Y/N)', '$'endadd dw ?swapped db 0tel_count db 0 ;计算电话号码表中的条目数量datarea endsprognam segmentmain proc far ;主程序assume cs: prognam, ds: datarea, es: datareastart:push dssub ax, axpush axmov ax, datareamov ds, axmov es, axcldlea di, tel_tab ;将电话号码表传给目的变址寄存器cho_inp: ;进行选择,是否输入条目mov ah, 09lea dx, string5int 21h ;输出“Would you like to in put a telephone list?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov dl, 4ehcmp al, dlje sort_n ;若输入为N,则跳转至sort_n,进行电话号码表的排序mov dl, 6ehcmp al, dlje sort_n ;若输入为n,则同上mov dl, 59hcmp al, dlje input_n ;若输入为Y,则跳转至input_n,进行电话号码条目的输入mov dl, 79hcmp al, dlje input_n ;若输入为y,则同上mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hjmp cho_inp ;若输入不为Y(y)/N(n),则返回cho_inp,重新进行选择input_n: ;输入人名,并保存mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hmov ah, 09lea dx, string1int 21h ;输出“Input name:”call input_name ;调用子程序input_name接收人名call stor_name ;调用子程序stor_name把人名存入电话号码表tel_tab中input_p: ;输入电话号码,并保存lea dx,string2mov ah, 09int 21h ;输出“Input a telephone number:”call inphone ;调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab 中jmp cho_inp ;跳转至cho_inp,按提示选择是否继续输入条目sort_n: ;对电话号码表进行排序mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hcall name_sort ;调用子程序name_sort,对电话号码表按人名排序print_lab: ;输出整个电话号码表lea dx, string9mov ah, 09int 21h ;输出“Do you want a tel_lab?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov cl, almov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hmov al, clmov dl, 4ehcmp al, dlje search_n ;若输入为N,则跳转至search_n,进行电话号码的查找mov dl, 6ehcmp al, dlje search_n ;若输入为n,则同上mov dl, 59hcmp al, dlje goon_p ;若输入为Y,则跳转至goon_p,继续该部分操作mov dl, 79hcmp al, dlje goon_p ;若输入为y,则同上jmp print_lab ;若输入不为Y(y)/N(n),则跳转至print_lab,重新进行选择goon_p: ;继续输出电话号码表的操作call printall ;调用子程序printall,输出整个电话号码表search_n: ;查找电话号码条目lea dx, string3mov ah, 09int 21h ;输出“Do you want a telephone number?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov cl, almov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hmov al, clmov dl, 4ehcmp al, dlje exit ;若输入为N,则跳转至exit,退出程序mov dl, 6ehcmp al, dlje exit ;若输入为n,则同上mov dl, 59hcmp al, dlje goon_s ;若输入为Y,则跳转至goon_s,继续该部分操作mov dl, 79hcmp al, dlje goon_s ;若输入为y,则同上jmp search_n ;若输入不为Y(y)/N(n),则跳转至search_n,重新进行选择goon_s: ;继续查找操作lea dx, string4mov ah, 09int 21h ;输出“name?”mov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hcall input_name ;调用子程序input_name,接收人名call name_search ;调用子程序name_search,对电话号码表按人名进行查找jmp search_n ;跳转至search_n,继续进行查找exit: ;退出程序retmain endpinput_name proc near ;子程序input_name,用于接受人名mov ah, 0ahlea dx, tel_nameint 21h ;输入人名mov ah, 02hmov dl, 0dhint 21hmov dl, 0ahint 21hmov bh, 0mov bl, namelenmov cx, 20sub cx, bxnamebrk: ;将人名除外所剩下的字符用空格填满mov namefld[bx], 20hinc bxloop namebrkretinput_name endpstor_name proc near ;子程序stor_name,用于把人名存入电话号码表tel_tab中inc tel_count ;将人名存入电话号码之后,电话号码条目数量增1cldlea si, namefldmov cx, 10rep movswretstor_name endpinphone proc near ;子程序inphone,用于接受电话号码,并把它存入电话号码表tel_tab 中mov ah, 0ahlea dx, tel_numint 21h ;输入电话号码mov ah, 02hmov dl, 0dhint 21hmov dl, 0ahint 21hmov bh, 0mov bl, tellenmov cx, 8sub cx, bxtelbrk: ;将电话号码数字除外,所剩下的字符用空格填满mov telfld[bx], 20hinc bxloop telbrkcldlea si, telfldmov cx, 4rep movswretinphone endpname_sort proc near ;子程序name_sort,用于对电话号码表按人名排序sub di, 56mov endadd, dicmp al, 0je emptystart_sort:mov swapped, 0lea si, tel_tabcmp_n:mov cx, 20mov di, siadd di, 28mov ax, dimov bx, sirepe cmpsbjbe no_exchgcall exchange_name ;调用子程序exchang_name,将两个相邻的条目进行对调jmp no_exchgempty: ;若电话号码表为空mov ah, 09lea dx, string6int 21h ;输出“The tel_lab is empty.”jmp exit_sortno_exchg: ;不进行对调mov si, axcmp si, endaddjbe cmp_ncmp swapped, 0jnz start_sortexit_sort:retname_sort endpexchange_name proc near ;子程序exchange_name,用于将电话号码表中的两个相邻的条目进行对调mov cx, 14mov si, bxrep movswmov cx, 14mov di, bxrep movswmov cx, 14lea si, listrep movswmov swapped, 1retexchange_name endpname_search proc near ;子程序name_search,用于按人名在电话号码表中查找所要的电话号码push dimov al, tel_countlea si, tel_tabagain:cmp al, 0je no_listmov cx, 20lea di, namefldmov bx, sirepz cmpsbjb find_nja no_listdec almov ah, 09lea dx, string8int 21h ;输出“name tel. ”mov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hcall printline ;调用子程序printline,输出所查找到的条目jmp exit_schfind_n:mov si, bxjmp againno_list: ;若不存在该条目mov ah, 09lea dx, string7int 21h ;输出“There is no list fitting.”mov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hexit_sch:pop diretname_search endpprintline proc near ;子程序printline,用于输出所查找到的电话号码条目mov si, bxlea di, listmov cx, 14rep movswmov ah, 09lea dx, listint 21hretprintline endpprintall proc near ;子程序printall,用于输出整个电话号码表push dimov ah, 09lea dx, string8int 21hmov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hmov bl, tel_countcmp bl, 0je empty_lablea si, tel_tabnext:lea di, listmov cx, 14rep movswmov ah, 09lea dx, listint 21hdec bljnz nextjmp exit_pallempty_lab:mov ah, 09lea dx, string6int 21hexit_pall:pop diretprintall endpprognam endsend start五、模块说明主函数main:用来显示用户操作提示,调用子模块,使程序完成查找电话号码的过程接收人名函数input_name:输入人名,将此人名保存至缓冲区,并用空格补足保存人名函数stor_name:将人名从缓冲区中取出,保存在电话号码表中的人名区中接收并且保存电话号码函数inphone:输入电话号码,将此电话号码保存至缓冲区,并用空格补足,然后,将电话号码从缓冲区中取出,保存在电话号码表中的电话号码区中电话号码表排序函数name_sort:运用冒泡法,对电话号码表按人名排序对调条目位置函数exchange:将不符合排序规律的条目的位置进行调整查找电话号码函数name_search:输入人名,在电话号码表中依次比较人名进行查找输出电话号码条目函数printline:查找到条目之后,将条目输出输出电话号码表函数printall:将整个电话号码表的所有条目依次输出六、模块层次图七、调试结果。