集 美 大 学
计 算 机 工 程 学 院
实 验 报 告
课程名称
汇编语言程序设计
实验名称
实验四、子程序设计一(查找电话号码)
实验类型
设计型
姓名
何荣贤
学号
2010810071
日期
2012-4-27
地点
陆大208
成绩
教师
吕俊音
评语:
1.实验目的及内容
1.实验目的
掌握子程序的调用、返回及入口参数的传递方法。
2.实验内容
要求程序建立一个可存放50项的电话号码
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
,每项包括人名(20个字符)及电话号码(8个字符)两部分。程序可接受输入人名及相应的电话号码表,并把它们加入电话号码表中;凡有新的输入后,程序应该按人名对电话号码表重新排序;程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,并在屏幕上以如下格式显示出来。
Name telphone
XXXXX XXXXXXXXXXXXX
2.实验环境
Masm for windows 集成实验环境 2011
3.实验方法
a. 首先定义个主菜单,菜单里面包含输入(1)、查询(2)、显示(3)、退出(4)等四项
功能,用定义的显示宏PRINT将其显示在屏幕上上;
b.在提示语下,用户根据需要,用键盘按下(1或者2或者3或者4)来选择菜单里
显示的功能;
c .程序根据用户输入的信息与程序里设置的关键字进行比较,根据比较
的结果调用相应的程序来实现用户所需要的功能;
d.分别编写输入输入子程序insert、显示子程序list、查找子程序search、
退出子程序exit,以实现上面的功能。
子程序INSERT:首先显示输入名字的提示语,然后调用0A功能输
入姓名(此时姓名暂存在临时空间N_TEMP存储单元里面),调用0A功能输入电话号码(电话号码暂T_TEMP存储单元里面),接着调用MOVSB指令,把姓名电话转存到电话号码表里,最后调用ORDER将电话号码按姓名排序。
子程序LIST:首先判断统计输入
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
个数的count的值,如果等于0,
则提示没有记录,否则用09功能依次显示所有记录。
子程序SEARCH:首先显示小菜单,用户选择:1按姓名查找,2按电话号
码查找,3退出。
子程序ORDER:首先判断记录条数,若小于等于1则退出,否则将刚插入的最后一条记录与前一条比较,若大等于则退出,否则交换记录位置,在继续与前一条记录比较,直到比较COUNT-1次或大等于前一条记录。
4.实验步骤
1.编写汇编和链接源程序产生可执行文件;
2.设计一组电话号码记录调用输入函数把它们输进去,程序根据输入的人名进行排序,再次选择不同的功能,看能不能满足用户的需要。如果不能则调用debug进行错误检测。
5.实验结论
A.菜单
B.输入功能
C.显示功能(已排序)
D.查找功能(按姓名)
查找失败
查找成功:
E.查找功能(按电话号码)
查找失败:
查找成功:
F.退出
6. 实验
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
1]本实验采取了模块化程序设计,设计了菜单,用户根据需要选择不同的功能,程序根据用户输入的内容,调用相应的子程序来实现,
2]刚开始时显示电话表时姓名会被电话号码覆盖,在老师的帮助下通过DEBUG调试,找出了错误原因,为避免该错误,必须在每次输入前将输入缓冲区置为空格,输完后需将标志输入结束的回车改为空格 。
3]经过此次实验,我深刻地体会到,程序精简很重要,但必须在功能强大的前提下。
附件:
一、 流程图
主程序:
Y
N
Y
N
Y
N
Y
子程序:
Y
N
Y
N
N
Y
Y
N
Y
N
N
Y
Y
2、程序代码
1.
DATAS SEGMENT
COUNT DW 0
TEMP DW 0
TELBOOK DB 50 DUP(32 DUP(' '))
WINDOW1 DB 13,10,13,10,' /************| MENU |***********\',13,10,13,10
DB '| 1---INSER |',13,10
DB '| 2---SEARCH |',13,10
DB '| 3---LIST |',13,10
DB '| 4---QUIT |',13,10,13,10
DB ' \*******************************/',13,10,' SELET:','$'
WINDOW2 DB 13,10,13,10,'|-----------| SEARCH |------------|',13,10,13,10
DB '| 1--- NAME |',13,10
DB '| 2--- TELEPHONE |',13,10
DB '| 3--- QUIT |',13,10,13,10
DB '|---------------------------------|',13,10,' SELET:','$'
STR1 DB 13,10,13,10,'1>INPUT NAME:','$'
STR2 DB 13,10,'2>INPUT TEL:','$'
STR3 DB 13,10,13,10,'|---NAME---*^_^*---TELEPHONE---|' ,13,10,13,10,'$'
STR5 DB 13,10,13,10,'|------------------------------|' ,13,10,13,10,'$'
STR4 DB 13,10,13,10,'WHAT YOU SEARCHED IS NOT EXIST ! ! !',13,10,'$'
STR6 DB 13,10,13,10,'THERE IS NO RECORD ! ! !',13,10,'$'
ERROR DB 13,10,13,10,'ERROR!YOU SHOULD INPUT (1-4) !',13,10,'$'
ERROR1 DB 13,10,13,10,'ERROR!YOU SHOULD INPUT (1-3) !',13,10,'$'
N_TEMP DB 21,?
N_T DB 20 DUP(' '),' '
T_TEMP DB 9,?
T_T DB 8 DUP(' '),' ',13,10,'$'
DATAS ENDS ;------------------------数据段
PRINT MACRO X1
LEA DX,X1
MOV AH,9
INT 21H
ENDM ;--------------宏显示字符串
INPUT MACRO X1
LEA DX,X1
MOV AH,10
INT 21H
ENDM ;--------------宏输入字符串
RENEW MACRO MING,WEI
LOCAL NEXT
MOV CX,WEI
LEA SI,MING
NEXT:MOV BYTE PTR [SI],' '
INC SI
LOOP NEXT
ENDM ;宏定义将输入缓冲区还原
QUHC MACRO TEMP,T
XOR DX,DX
MOV DL,TEMP+1
LEA SI,T
ADD SI,DX
MOV BYTE PTR [SI],' '
ENDM ;宏定义去除回车符号
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX