《汇编语言程序设计》实验报告 期末大作业.doc
文本预览下载声明
汇编语言程序设计实习
大
作
业
报
告
年 级 2008级
班 级
学 号
姓 名
2010 年 6 月 25 日
实验题目
个人档案管理系统 实验要求
设有一个档案文件DOCU,它包含每个人的姓名、年龄、性别、身高和体重。试编写一个管理程序,接受如下命令:
L命令:列出DOCU中所有人的情况,每人一行。
I命令:在DOCU文件最后插入一个人的情况(即一个记录)。
Q命令:退出DOCU的管理程序。
S命令:按指定项的值查询。即用户指定5项中一项,并给出要查的值,由程序负责搜索DOCU文件中具有与给定值相同的项的记录,并显示这些记录。
D命令:删去指定记录。操作与S命令类似。 程序设计说明(用来说明程序的功能、结构。包括:程序名、功能、原理及算法说明、程序及数据结构、主要符号名的说明、程序框图等。)
记录的各项字节长度:
项目
姓名
年龄
性别
身高
体重
长度
10
2
1(f/m)
3
2
程序接收的命令采用小写。记录的文件名为DOCU.txt,与程序在同个目录中。
L命令的结果每22个记录一页,用空格键继续显示。
I命令插入到文件的最后。
S命令提供5个搜索项,搜索结果每22个记录一页,用空格键继续显示。
D命令在扫描的时候把结果记录到另外一个临时文件中,略去符合删除条件的记录。最后把原文件删除,把临时文件命名为原文件名。
程序把常用的、代码较短的小功能程序段定义成宏。即减少了代码输入量,避免重复输入时出错,也使程序结构更清晰,代码更紧凑,提高代码复用率。程序中宏名全部用大写表示。
宏名
参数
功能
MOVE_CURSOR
row为行坐标,col为列坐标
移动光标
CLEAR
无
清屏
CRLF
无
打印回车换行
PRINT
msg为以‘$’结尾字符串
打印字符串
PUTCHAR
char为字符
打印字符
PRINT_ITEM
addrs为字符串首地址,count1为字符串的长度,count2为随后分隔用的空格数
打印记录中的某一项
GETIN
addrs为接收输入的地址,count为字符数
输入记录中的某一项
DEL_FILE
fname为文件名
删除文件
RENAME_FILE
fname为新名称,fname2为旧名称
重命名文件
程序按照功能组织成以下子程序。子程序功能相对比较独立,这里为了提高效率不对寄存器进行入栈保护。
子程序名
功能
备注
get_record
输入一个记录
print_record
打印一个记录
main
主程序,用于接收、处理命令。
cmpstr
比较字符串
从recd+pos开始,长度为len
list_all
打印所有记录
22行一屏,用空格键继续
list_by
打印符合要求的记录
delete_by
删除符合要求的记录
insert
插入新记录
search
搜索记录,获取参数后,调用list_by
delete
删除记录,获取参数后,调用delete_by
open_file
打开文件
入口参数dx=文件名偏移
出口参数ax=文件句柄
close_file
关闭文件
入口参数bx=文件句柄
命名规则:
程序主体小写。
子程序名一律小写。
宏名一律大学
标号为了防止命名污染,添加 _XX_ 前缀,其中XX为该子程序或宏的名称缩写。
常量用大写,以下划线 _ 开头。
变量命名为name时编译发生错误,只好改为name1
程序流程图
delete_by子程序
list_by子程序
程序调试说明(包括:调试情况,如上机时遇到的问题及解决办法,观察到的寄存器、存储器的内容或状态及其分析.对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析;实验的心得体会,以及诸如调试日期、文件存放位置等需要记录的信息。)
程序先在debug下简单调试,根据运行的结果推断后,再定位到程序的相应位置进行检查。检查不出再使用Turbo debugger进行单步调试。Turbo debugger无法追踪到宏体内,如有必要可以手工展开代码。本次实验较为顺利,加上定义的宏都比较简单,没有出现问题。
在debug下NULL(ASCII为0)显示为一个方格,不够美观。在文本文档中NULL复制时会被替换为空格,在notepad++中则无法复制,所以程序把字符串的空白部分设置为空格。
程序的各个功能相对独立,所以分开进行调试,降低难度。
程序在调试时发现字符串输出由于换行不当的问题会影响输入美观,相应进行调整。
在Turbo Debugger下能方便地查看寄存器和变量值 四、实验结果与结论(经调试正确的程序的运行结果)
程序主界面
显示全部