无二不说,先上代码:
DATAS SEGMENT
;此处输入数据段代码
namepar label byte
maxnlen db 21
actnlen db ?
_name db 21 dup(?) ;在MASM5.0下不能用name哦
phonepar label byte
maxplen db 9
actplen db ?
phone db 9 dup(?)
crlf db 13,10,'$'
endaddr dw ?
mess1 db 'Input name:','$'
mess2 db 'Input a telephone number:','$'
mess3 db 'Do you want a telephone number?(Y/N)','$'
mess4 db 'name?','$'
mess5 db 'name',16 dup(' '),'tel',0dh,0ah,'$'
mess6 db 'Not in the table.',0dh,0ah,'$'
mess7 db 'Invalid input!',0dh,0ah,'$'
count db 0
tel_tab db 50 dup(20 dup(' '),8 dup(' '))
temp db 20 dup(' '),8 dup(' '),0dh,0ah,'$'
swapped db 0
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
main proc far
ASSUME CS:CODES,DS:DATAS,SS:STACKS
push ds
sub ax,ax
push ax
MOV AX,DATAS
MOV DS,AX
mov es,ax
cld
lea di,tel_tab ;di中存放表首地址
;此处输入代码段代码
inputloop:
;提示'Input name'
mov ah,09h
lea dx,mess1
int 21h
;
call input_name
cmp actnlen,0 ;没有输入人名时
jz a10 ;直接跳到提示是否查找的地方
cmp count,50 ;输入上限
je a10
call stor_name ;保存人名到tel_tab
;提示'Input a telephone number'
mov ah,09h
lea dx,mess2
int 21h
;
call input_stor_phone ;输入并保存电话号码
jmp inputloop
a10:
cmp count,1
jbe searchloop ;如果没有输入或者输入一个
call name_sort ;排序
searchloop:
lea dx,mess3
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,'N'
je exit
cmp al,'n'
je exit
cmp al,'Y'
je showname
cmp al,'y'
je showname
mov ah,09
lea dx,crlf
int 21h
lea dx,mess7 ;非法输入
mov ah,09h
int 21h
jmp searchloop
showname:
mov ah,09
lea dx,crlf
int 21h
lea dx,mess4 ;当输入Y时,显示'name?'
mov ah,09
int 21h
call input_name ;输入要查找的人名
call name_search ;查找
call printline
jmp searchloop
exit:
ret
main endp
;******************************************************
input_name proc near
mov ah,0ah
lea dx,namepar
int 21h
mov ah,02h
mov dl,0ah ;换行
int 21h
mov bh,0
mov bl,actnlen
mov cx,21
sub cx,bx
i20:
mov _name[bx],20h
inc bx
loop i20
ret
input_name endp
;*********************************************************
stor_name proc near
inc count
cld
lea si,_name
mov cx,10 ;把name中的前20个字符放入tel_tab中每一个人信息的前20个byte中
rep movsw
ret
stor_name endp
;*****************************************************
input_stor_phone proc near
mov ah,0ah
lea dx,phonepar
int 21h
mov ah,02h
mov dl,0ah ;换行
int 21h
mov bh,0
mov bl,actplen
mov cx,9
sub cx,bx ;计算剩下的长度
is20:
mov phone[bx],20h ;剩下的地方填充空格
inc bx
loop is20
cld
lea si,phone
mov cx,4 ;把phone中的前8个字符放入tel_tab中每一个人信息的后8个byte中
rep movsw
ret
input_stor_phone endp
;*****************************************************************
name_sort proc near
sub di,56 ;仔细想想为什么是这样的
mov endaddr,di
ns10:
mov swapped,0
lea si,tel_tab
ns20:
mov cx,20
mov di,si
add di,28 ;下一个被比较的名字
mov ax,di
mov bx,si
repe cmpsb
jbe ns30 ;小于或等于不用交换
call npxchg
ns30:
mov si,ax
cmp si,endaddr
jbe ns20
cmp swapped,0
jnz ns10
ret
name_sort endp
;*****************************************************
npxchg proc near
mov cx,14
lea di,temp
mov si,bx
rep movsw ;move lower item to save
mov cx,14
mov di,bx
rep movsw
mov cx,14
lea si,temp
rep movsw
mov swapped,1
ret
npxchg endp
;************************************************************
disp_all proc near
mov ah,09h
lea dx,mess5
int 21h
lea si,tel_tab
da10:
lea di,temp
mov cx,14
rep movsw
mov ah,09h
lea dx,temp
int 21h
dec count
jnz da10
ret
disp_all endp
;*********************************************
name_search proc near
lea si,tel_tab
mov bx,si
add endaddr,28
nase10:
lea di,_name ;存放待查找的人名地址
mov cx,10
repe cmpsw
jcxz nase_exit ;相等
add bx,28 ;表中下一个比较的人名
mov si,bx
cmp si,endaddr
jbe nase10
notintab:
mov cx,-1
ret
nase_exit:
mov si,bx
lea di,temp
mov cx,14
rep movsw
ret
name_search endp
;*******************************************************
printline proc near
cmp cx,-1
je norecord
mov ah,09h
lea dx,mess5
int 21h
mov ah,09h
lea dx,temp
int 21h
ret
norecord:
mov ah,09h
lea dx,mess6
int 21h
ret
printline endp
MOV AH,4CH
INT 21H
CODES ENDS
END main
分享到:
相关推荐
在Android平台上,构建一个简易通讯录是一个常见的应用场景,它涉及到数据存储、用户界面以及数据管理等方面。本项目采用SQLite作为数据库管理系统,SQLite是一款轻量级的、嵌入式的、关系型数据库,尤其适合于移动...
【简易通讯录】是一款基于Android平台开发的通讯录应用,旨在提供基本的联系人管理功能,包括创建、读取、更新和删除(CRUD)联系人记录,以及直接通过应用拨打电话。这款应用的设计和实现涉及到Android开发的核心...
【Android简易通讯录】是一个适合初学者学习的项目,它提供了基本的联系人管理功能,让你能够理解Android应用开发的基本架构和组件。这个项目没有包括通话和短信功能,但你可以根据自己的需求进行扩展。 首先,...
【ASP.NET简易通讯录】项目是一个面向初学者的教程,旨在教授如何利用ASP.NET、C#编程语言以及SQL Server 2000数据库来构建一个基础的通讯录系统。这个项目可以帮助初学者理解Web应用程序的基本架构,特别是针对.NET...
在C语言课程设计中,创建一个简单的通讯录系统是一个经典的项目,它可以帮助初学者更好地理解和应用C语言的基础知识。这个项目旨在实现一个基本的联系人管理功能,包括添加、删除、查找和显示联系人信息。以下是一些...
《Java连接Access数据库实现简单通讯录》 在IT领域,数据管理是不可或缺的一部分,而通讯录作为日常生活中常见的数据管理工具,其开发和实现对于学习和理解数据库操作有着重要作用。本项目“简单通讯录”正是基于...
《C#实现简单通讯录系统解析》 C#是一种广泛应用于软件开发的编程语言,尤其在Windows平台上,它以其高效、易用性受到开发者青睐。本篇将详细讲解如何使用C#来创建一个简单的通讯录系统,该系统利用XML文件进行数据...
在Android平台上,开发一款简易通讯录应用涉及到许多关键知识点,主要集中在SQLite数据库的使用和ListView控件的交互。SQLite是Android内置的关系型数据库,用于存储应用程序的数据,而ListView则是显示大量数据列表...
**Android Studio 安卓课设 - 简易通讯录** 在本次课设中,我们将会探讨如何使用Android Studio开发一个基于SQLite数据库的简易通讯录应用。这个应用包含两个主要界面:启动页和主页面。在主页面上,用户可以进行...
《VC++实现的简易通讯录系统详解》 在信息技术领域,开发个人通讯录系统是一项常见的实践项目,尤其适合初学者入门。本项目采用Microsoft的Visual C++(简称VC++)作为开发工具,构建了一个简单的通讯录系统,旨在...
【Android Studio简易通讯录界面】 在Android开发中,创建一个简易的通讯录界面是一个常见的练习,可以帮助开发者熟悉数据获取、UI设计以及性能优化等基础知识。本项目主要涉及以下几个关键知识点: 1. **获取手机...
在本案例中,"asp实现简易通讯录"是一个使用ASP技术构建的简单联系人管理系统,它提供了基本的联系人信息的增加、删除、修改和查询功能。下面将详细介绍这个系统可能涉及的关键知识点。 1. **ASP基础**: ASP是一...
【简易通讯录(C语言版)】是一款基于链表数据结构实现的通讯录管理程序,旨在帮助用户方便地存储、删除和查询联系人信息。在C语言中,链表是一种非常重要的数据结构,它允许我们在运行时动态地添加或删除元素,而...
在本项目"C#学习-制作简易通讯录"中,我们将探讨如何使用C#编程语言来构建一个基础的通讯录应用程序。这个项目对于初学者来说是一个很好的起点,因为它涵盖了几个核心的C#概念和技术,如面向对象编程、窗体界面设计...
【个人简易通讯录(jsp+javabean+mysql)】是一个基于Web的个人通讯录管理系统,主要用于学习和实践Java Web开发技术。这个项目的核心在于利用Java Servlet(通过JSP)、JavaBeans以及MySQL数据库来实现数据的存储、...
本程序的功能是为用户提供简单的通讯录进行管理,通过该程序存储联系人信息,提供关键字(只能是英文关键字进行查找)查找功能,可以对数据进行修改、删除、添加等操作。 各按钮的功能如下: 查找记录:以姓名为...
在这个“C++简易通讯录”项目中,我们利用C++的基本语法和面向对象编程(OOP)概念来实现一个简单的联系人管理程序。以下是对该项目的详细解析: 1. **面向对象编程基础** - 类(Class):在C++中,类是定义对象...
【C#简易通讯录】项目是一个使用C#编程语言实现的简单通讯录应用程序,它旨在帮助用户管理和存储联系人信息。这个项目对于初学者来说是一个很好的实践案例,可以帮助他们掌握C#的基础知识以及如何构建一个实用的应用...
在Android平台上,开发一个简易通讯录应用是许多初学者入门的首选项目,因为这个项目能够涵盖许多基础且实用的技术点。下面将详细讲解这个项目涉及的主要知识点,包括Android应用程序的基本结构、用户界面设计、...