模板--汇编项目说明文档_第1页
模板--汇编项目说明文档_第2页
模板--汇编项目说明文档_第3页
模板--汇编项目说明文档_第4页
模板--汇编项目说明文档_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、WIN32汇编项目通讯录说明文档1、基本功能q 通讯录添加功能q 通讯录查找功能q 通讯录修改功能q 通讯录删除功能q 通讯录整体输出功能2、功能展示2.1.菜单界面图2-1菜单界面图2-3主程序运行框图2.2 通讯录增加功能流程图:示例图2-3选择菜单(添加)已满这返回主菜单判断是否为满提示保存成功任意键返回主菜单不满,接收用户输入使用movsb将输入内容移动至数组中将输入的内容存储临时变量里功能截图:介绍:1.首先用IsFull判断数组是否为满2.已满返回主菜单3.未满,提示用户输入4.将用于储存用户输入的g_strTemContacts复制进数组g_stContacts中相应位置5.提示

2、保存成功2.3 通讯录查找功能流程图:选择菜单(查找)为空返回主菜单判断是否为空不空,用户选择查询方式根据电话号码查询根据姓名查询根据用户输入电话查找姓名根据用户输入姓名查找电话提示该数据不存在并返回主菜单 没有查找到 没有查找到 找 找到 到打印该联系人后并返回主菜单功能截图:为空选择查询方式按姓名查询查询结果号码查询号码查询结果介绍:1、 IsEmpty判断是否为空2、 为空返回主菜单3、 不为空,提示用户选择查询方法4、 用g_strTemContacts中的姓名或者电话号码存储用于检索的姓名或者电话5、 找到数据,打印到屏幕上6、 未找到数据,返回主菜单2.4 通讯录修改功能流程图:选

3、择菜单(修改)不存在返回主菜单查询是否存在存在,接受用输入修改内容提示是否修改 直接返回主菜单 No Yes提示修改成功并返回主菜单功能截图:为空时查询存在输入完成提示是否修改YesNo直接返回主菜单介绍:1、 FindData查询要修改的用户信息是否存在2、 不存在返回主菜单3、 如果存在提示用户输入要修改为的信息4、 g_strTemContacts临时储存用户输入的修改信息5、 提示用户是否确认修改6、 NO直接返回7、 Yes将g_strTemContacts的信息拷贝到g_stContacts相应位置 2.5 通讯录删除功能流程图:选择菜单(删除)不存在返回主菜单查询是否存在存在,提

4、示是否确认删除直接返回主菜单 No Yes提示修改成功并返回主菜单功能截图:要删除的数据不存在存在提示是否删除NO直接返回Yes介绍: 1、 FindData查询要删除的数据是否存在2、 不存在返回主菜单3、 存在提示是否确认删除4、 否,返回主菜单5、 是,则将g_stContacts中要删除元素后一个元素覆盖将要删除的元素6、 提示删除成功2.5 通讯录全部输出功能流程图选择菜单(查看全部联系人)为空返回主菜单表是否为空不为空,打印全部联系人 任意键返回主菜单 截图:介绍:1. IsEmpty查看是否为空2. 为空,返回主菜单3. 不为空遍历数组,将信息打印到屏幕上3、程序代码清单3.1

5、头文件.data;定义结构体CONTACTSSTRUCT structszName BYTE 25 dup(0) ;姓名szPhoneNumber BYTE 12 dup(0) ;号码CONTACTSSTRUCT ends PCONTACTSSTRUCT TYPEDEF PTR CONTACTSSTRUCT ;取别名;声明全局变量g_stContacts CONTACTSSTRUCT 100 dup() ;定义结构体数组CONLength EQU sizeof(CONTACTSSTRUCT)g_nCount DWORD 0 ;元素个数g_nIndex DWORD 0 ;查询索引g_nMaxCo

6、unt DWORD 100 ;最大保存元素个数g_strTemContacts CONTACTSSTRUCT ;接收输入信息g_Cls Byte cls,0 ;清屏参数g_Pause Byte pause,0 ;暂停(按任意键继续) g_Menu Byte ,0dh,0ah,0dh,0ah, ,0dh,0ah,0dh,0ah,0dh,0ah, ,0dh,0ah,0dh,0ah, ,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0g_SelectNum Byte 0 ;获取选项;提示信息 g_Full Byte 电话簿已满,无法添加,0dh,0ah,0g_Empty Byte

7、电话簿为空,无法删除查询,0dh,0ah,0g_Name Byte 姓名,0dh,0ah,0g_PhoneNumber Byte 电话号码,0dh,0ah,0g_Exist Byte 要删除的联系人不存在,0g_IsAlter Byte 确定修改,0dh,0ah, 1.Yes,0dh,0ah, 2.No, 0dh,0ah,0 g_IsDelete Byte 确定删除,0dh,0ah, 1.Yes, 0dh,0ah, 2.No, 0dh,0ah,0 g_IsSave Byte 确定保存,0dh,0ah, 1.Yes, 0dh,0ah, 2.No, 0dh,0ah,0 g_SaveSuccess

8、Byte 保存成功,0 g_FindNone Byte 未找到要数据,0 g_DeleteSuccess Byte 删除成功,0 g_UserName Byte 联系人姓名:,0g_UserPhoneNumber Byte 联系人电话号码:,0 g_AlterSuccess Byte 修改成功,0 g_InName Byte 请输入姓名,0g_InPhoneNumber Byte 请输入电话号码,0 g_InputInfo Byte 请输入要添加的姓名和电话,0dh,0ah, 如:小强,0dh,0ah,0 g_AlterInfo Byte 请输入要修改的姓名和电话,0dh,0ah, 如:小强,

9、0dh,0ah,0 g_SelMethods Byte 选择查询方式,0dh,0ah, 1.根据姓名,0dh,0ah, 2.根据号码,0dh,0ah,0 ;定义格式控制符,用于输入输出时用到的格式控制符g_NextLine Byte 0dh,0ah,0g_szScanFormat BYTE %s %s,0g_szScanOne BYTE %s,0g_szCH Byte %c,0 3.2源文件.386.model flat,stdcalloption casemap:none;case sensitiveinclude windows.incinclude kernel32.incinclude

10、 msvcrt.incinclude Phonebook.incincludelib kernel32.libincludelib msvcrt.libMain proto; 主函数ShowMenu proto; 显示菜单CleanScreen proto; 清屏Pause proto; 暂停按任意键继续GetSelection proto; 获取选项数字IsFull proto; 是否已满IsEmpty proto; 是否为空ShowALlInfo proto; 显示全部联系人ADD_USER proto; 添加联系人FindData proto; 查询联系人AlterData proto;

11、 修改联系人RemoveData proto; 删除联系人.codestart:call MainINVOKE ExitProcess,0Main proc startMenu: call CleanScreencall ShowMenucall GetSelectioncmp g_SelectNum,1je ShowALcmp g_SelectNum,2je AddInfo cmp g_SelectNum,3je DelInfocmp g_SelectNum,4je AltInfocmp g_SelectNum,5je FinInfocmp g_SelectNum,6je Exitjmp s

12、tartMenuShowAL:call ShowALlInfojmp startMenuAddInfo: call ADD_USERjmp startMenuDelInfo: call RemoveData jmp startMenuAltInfo: call AlterData jmp startMenuFinInfo: call FindData jmp startMenu Exit : retMain endpIsFull procmov ebx,g_nMaxCountcmp ebx,g_nCountje yesjne noyes:mov eax,1retno:mov eax,0retI

13、sFull endpIsEmpty procmov ebx,g_nCountcmp ebx,0je yes ;空cmp ebx,0jne no ;非空yes:mov eax,0retno:mov eax,1retIsEmpty endpADD_USER PROC ;无参数call CleanScreen ;清屏call IsFull ;查看是否已满cmp eax,1je fullpush offset g_InputInfo ;printf函数输出信息字符串入栈 ;push r/m32(imm32) 可以是寄存器或内存或立即数call crt_printf add esp,4 push off

14、set g_strTemContacts.szPhoneNumber push offset g_strTemContacts.szName ;scanf函数后两个参数入栈 push offset g_szScanFormat ;scnaf函数格式控制符入栈 call crt_scanf add esp,0ch mov eax,g_nCount imul eax,CONLength lea esi, g_strTemContacts lea edi, g_stContacts add edi,eax mov ecx,CONLength rep movsb inc g_nCount push o

15、ffset g_SaveSuccess call crt_printf add esp,4 jmp no full: push offset g_Full call crt_printf add esp,4 no : call Pause ret ADD_USER endpPause proc push offset g_Pause call crt_system add esp,4 ret Pause endpShowMenu proc push offset g_Menu call crt_printf add esp,4 ret ShowMenu endpCleanScreen proc

16、 push offset g_Cls call crt_system add esp,4 ret CleanScreen endpGetSelection procpush offset g_SelectNum push offset g_szCH call crt_scanfadd esp,8retGetSelection endpFindData proc call CleanScreen call IsEmpty cmp eax,0 je Empty mov g_nIndex,0 push offset g_SelMethods call crt_printf add esp,4 res

17、elect: call GetSelection cmp g_SelectNum,1 je Sel_Name cmp g_SelectNum,2 je Sel_PhoneNum jmp reselect ;按照电话查询姓名 Sel_PhoneNum: push offset g_InPhoneNumber call crt_printf add esp,4 ;scanf函数 push offset g_strTemContacts.szPhoneNumber push offset g_szScanOne call crt_scanf add esp,8 mov ebx,offset g_st

18、Contacts ;将结构体数组的首地址给ebx add ebx,25 ;在首地址的接触上向前偏移name所占内存空间的长度 mov ecx,g_nCount ;外层循环以数组的元素个数为循环次数 inc g_nIndex ;索引值自增 First: lea esi,g_strTemContacts.szPhoneNumber ;将临时接受输入的结构体变量首地址给esi外层循环开始 mov edi,ebx FT: ;内层循环开始,将上面得到的结构体中电话号码成员的首地址给edi mov edx,esi ;判断是否到了末尾 cmp edx,0 je Finally ;如果esi到了末尾则调转到后

19、面判断是否edi也到了末尾 cmpsb ;内层逐字节比较 je FT ;如果不相等这接着比较接下来的元素 Second: add ebx,CONLength ;将原来ebx中保存的地址偏移结构体空间大小的长度 inc g_nIndex ;索引值增加 loop First ;外层循环进行下一次循环 ;外层循环结束时仍未找到打印“未找到”,并返回 mov g_nIndex ,0 ;索引值置零 push offset g_FindNone call crt_printf add esp,4 ret ;上面判断esi到达末尾时,跳转 Finally: mov edx,edi cmp edx,0 jne

20、 Second ;如果edi未到达末尾表示不是要查找的号码,进行下一次外层循环 ;如果edi也到达末尾,表示找到要查找的号码,并打印姓名 PrintfInfo: push ebx sub ebx,25 push ebx push offset g_szScanFormat call crt_printf add esp,8 call Pause ret ;按照姓名查询电话Sel_Name: push offset g_InName call crt_printf add esp,4 push offset g_strTemContacts push offset g_szScanOne cal

21、l crt_scanf add esp,8 mov ebx,offset g_stContacts inc g_nIndex mov ecx,g_nCount Si3: lea esi, g_strTemContacts mov edi,ebx Si1: mov edx,esi cmp edx,0 je Si2 cmpsb je Si1 Si4: add ebx,CONLength inc g_nIndex loop Si3 mov g_nIndex ,0 ;索引值置零 push offset g_FindNone call crt_printf add esp,4 call Pause re

22、t Si2: mov edx,edi cmp edx,0 jne Si4 add ebx,25 push ebx sub ebx,25 push ebx push offset g_szScanFormat call crt_printf add esp,0ch call Pause ret Empty: push offset g_Empty call crt_printf add esp,4 call Pause ret FindData endpAlterData proc call CleanScreencall FindData mov ebx,g_nIndexcmp ebx,0je

23、 retspush offset g_AlterInfocall crt_printfadd esp,4push offset g_strTemContacts.szPhoneNumber push offset g_strTemContacts.szName ;scanf函数后两个参数入栈 push offset g_szScanFormat ;scnaf函数格式控制符入栈 call crt_scanf add esp,0ch push offset g_IsAlter call crt_printf add esp,4 sel: call GetSelection cmp g_Select

24、Num,2 je rets cmp g_SelectNum,1 je Alter jmp sel Alter: lea esi,g_strTemContacts mov eax,g_nIndex dec eax imul eax,CONLength mov edi,offset g_stContacts add edi,eax mov ecx,CONLength rep movsb SuccAlt: push offset g_AlterSuccess call crt_printf add esp,4 call Pauserets: retAlterData endpRemoveData p

25、roc call CleanScreen call FindData ;想查看数据是否存在 mov ebx,g_nIndex cmp ebx,0 ;如果不存在则g_nIndex为0;直接返回 je return push offset g_IsDelete call crt_printf add esp,4 startSel: call GetSelection cmp g_SelectNum,1 je startDel cmp g_SelectNum,2 je return jmp startSel startDel: mov eax,g_nIndex dec eax imul eax,CONLength lea edi,g_stContacts ;数组首地址 add edi,eax mov esi,edi add esi,CONLength delete: mov eax,g_nIndex cmp eax,g_nCount je SuccDel mov ecx,CONLength rep movsb inc g_nIndex jmp delete SuccDel: push offset g_DeleteSuccess call crt_p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论