磁盘无符号字节数据文件小于64KB操作.docx
- 文档编号:16215460
- 上传时间:2023-07-11
- 格式:DOCX
- 页数:28
- 大小:150.22KB
磁盘无符号字节数据文件小于64KB操作.docx
《磁盘无符号字节数据文件小于64KB操作.docx》由会员分享,可在线阅读,更多相关《磁盘无符号字节数据文件小于64KB操作.docx(28页珍藏版)》请在冰点文库上搜索。
磁盘无符号字节数据文件小于64KB操作
微机原理课程设计任务书
一、设计题目
磁盘无符号字节数据文件(小于64KB)操作
二、总则
1、在19周完成并提交设计,通过演示和非抄袭确认后所取得的成绩为有效
成绩。
2、设计过程中严禁抄袭,否则将根据情节扣减成绩直至取消成绩。
3、设计调试在EDA实验室(408)进行,时间为19周周一至周五。
三.设计内容及要求
题目要求
设计一汇编语言程序,实现对数据文件的操作,具体要求如下:
1)通过键盘输入被操作的文件名,然后完成数据文件的排序(从大到小),通过键盘输入排序后的新文件名,并显示文件的长度(字节数)、最大值和最小值。
2)通过键盘输入要搜索的关键字,对新文件进行搜索,并显示搜索结果。
3)根据需要可对搜索到的关键字进行修改。
四.设计报告要求
1)设计思想描述及总体设计功能与结构框图
2)程序流程框图
3)源程序(附程序及功能模块注释)。
目录
摘要--------------------------------------------------------------------------------4
1、课题名称--------------------------------------------------------------------4
2、总体设计功能描述及要求-----------------------------------------------4
3、设计思想描述--------------------------------------------------------------4
4、源程序及流程图(附功能模块注释)--------------------------------4
1、程序及功能描述---------------------------------------------------------4
2、设计流程图--------------------------------------------------------------14
5、程序运行结果及调试过程中出现的问题、原因及解决方案----15
1、程序运行结果截图-----------------------------------------------------15
2、调试过程中出现的问题、原因及解决方案-----------------------17
6、设计心得体会-------------------------------------------------------------18
7、参考文献-------------------------------------------------------------------18
摘要:
一、课题名称
磁盘无符号字节数据文件(小于64KB)操作
2、总体设计功能描述及要求
1.可以创建文件、读取文件,并通过键盘输入被操作的文件名,然后完成数据文
件的排序(从大到小),能够显示出文件的长度(字节数)、最大值和最小值。
2.通过键盘输入被操作过的数据存入到新文件。
3.通过键盘输入要搜索的关键字,对新文件进行搜索,并显示搜索结果。
4.根据需要可对搜索到的关键字进行修改。
3、设计思想描述
因为本设计要求的功能较多,程序较为繁琐,所以本程序采用分块子程序进行功能的实
现,且程序清晰,功能调用方便。
4、源程序及流程图(附功能模块注释)
1、程序及功能描述
datasegment
data1db0ah,0dh,'========mainmenu:
=========='
db0ah,0dh,'^_^1.creatanewfile.'
db0ah,0dh,'^_^2.readafile.'
db0ah,0dh,'^_^3.exit.'
db0ah,0dh,'pleasechooseonefunctionofthem:
$'
data12db0ah,0dh,'submenu:
'
db0ah,0dh,'*******1.displaythecontent***********'
db0ah,0dh,'*******2.orderthecontent*************'
db0ah,0dh,'*******3.displaythelengthmaxandmin'
db0ah,0dh,'*******4.searchakeyword**************'
db0ah,0dh,'*******5.changeakeyword**************'
db0ah,0dh,'*******6.backmainmenu*****************'
db0ah,0dh,'pleasechooseonefunctionofthem:
$'
okydb0ah,0dh,'ok!
$'
errordb0ah,0dh,'error!
$'
handledw?
introdb0dh,0ah,'Enterypath:
$';提示语--输入磁盘文件路径;此处输入数据段代码
intronewdb0dh,0ah,'Enterynewpath:
$';提示语--输入新文件路径
newnamedb50,?
50dup(?
);输入的新文件路径
namebuffdb50,?
50dup(?
);输入的磁盘文件路径
crlfdb0dh,0ah,'ok!
$';显示一个回车
databuffdb200dup(?
);数据保存区
lengththdw0;文件字符总长度
msgdb0ah,0dh,'pleaseinputthefilenameandfilepath:
$'
msg1db0ah,0dh,'pleaseinputthecontent:
$'
msg2db0ah,0dh,'thecontentis:
$'
msg3db0ah,0dh,'pleaseinputthesearchcontent:
$'
msg4db0ah,0dh,'change$'
msg5db'to$'
msg6db0ah,0dh,'notfindthekeyword$'
msg7db0ah,0dh,'thelengthmaxandminis:
$'
msg8db0ah,0dh,'pleasechooseytosaveyouroprationsandbackmainmenu'
db0ah,0dh,'orchoosentonotsaveandbackmainmenu:
$'
msg9db0ah,0dh,'thesearchresultis:
$'
result1db?
?
?
",?
",?
'$'
resultdb?
?
?
'$'
bufdb20,?
20dup(?
);字符串输入文件地址及文件名
buf1db200,?
200dup(?
);字符串输入文件内容
hodedw?
;保存文件
dataends
codesegment
assumecs:
code,ds:
data
startprocfar
movax,data
movds,ax
p1:
movdx,offsetdata1;输入功能信息(主菜单)
movah,9
int21h;显示字符串
movah,1
int21h;键盘输入
cmpal,'1';比较查询用户选着了哪项功能
jzone
cmpal,'2'
jztow
cmpal,'3'
jzthree
jmpp1;用户没有输入提供的功能进行再次询问
three:
movah,4ch
int21h;终止当前程序,返回调用程序
one:
movdx,offsetmsg;主菜单1号功能(新建文件并写文件功能)
movah,9
int21h;显示msg
movdx,offsetbuf;字符串输入文件名字及路径
movah,0ah
int21h;带缓冲的键盘输入
xorbx,bx
movbl,buf[1]
addbx,2
movbuf[bx],'0'
xorbp,bp
callcreat;创建一个空白文件
movdx,offsetoky
movah,9
int21h;显示OK
movdx,offsetmsg1
movah,9;显示msg1
int21h
movdx,offsetbuf1;把要输入文件的内容写入缓存
movah,0ah
int21h;带缓冲的键盘输入字符串
xorbx,bx
movbl,buf1[1]
movbp,bx
callcreat;把输入的文件写入文件
movdx,offsetoky
movah,9
int21h
p2:
jmpp1;写文件完毕,返回主菜单
tow:
movdx,offsetmsg;主菜单2号功能(读去文件并对文件进行数据操作)
movah,9
int21h
movdx,offsetbuf;字符串输入文件名字及路径
movah,0ah
int21h
xorbx,bx
movbl,buf[1]
addbx,2
movbuf[bx],'0'
xorbp,bp
callopen
tow1:
movdx,offsetdata12;对数据文件的操作功能(子菜单)
movah,9
int21h
movah,1
int21h
cmpal,'1';对用户输入的功能号进行查询
jzfunc1
cmpal,'2'
jzfunc2
cmpal,'3'
jzfunc3
cmpal,'4'
jzfunc4
cmpal,'5'
jzfunc5
cmpal,'6'
jzfunc6
jmptow1
p3:
jmpp2;中间过度跳转用
func1:
movdx,offsetmsg2;子菜单1号功能
movah,9
int21h
movdx,offsetbuf1[2]
movah,9
int21h
to:
jmptow1
func2:
callorder;子菜单2号功能(排序功能)
jmptow1
func3:
calldisplay;子菜单3号功能(显示文件信息功能)
jmpto
func4:
callsearch;子菜单4号功能(搜索关键字功能)
jmpto
func5:
callchange;子菜单5号功能(替换关键字功能)
jmpto
func6:
callback;子菜单6号功能(返回主菜单并查询是否保存操作功能)
jmpp3
startendp
;------------------------------------------------排序子程序----------------------------------------
orderproc;冒泡排序法
decbp
movdx,bp
xorbx,bx
l0:
movcx,bp
subcx,bx
movsi,offsetbuf1[2]
l1:
mov[si],al;从大到小排序
incsi
cmp[si],al;前一个数和后一个数比较
jael2
xchgal,[si];若前一个数小,则把它和后一个互换
mov[si-1],al
l2:
loopl1;拿后一个和后后一个数比较
incbx
decdx
jnzl0
incbp
movdx,offsetoky
movah,9
int21h
ret
orderendp
;-------------------------------------新建文件子程序----------------------------------------
creatproc
movdx,offsetbuf[2]
movcx,0
movah,3ch
int21h;创建文件,若磁盘上原有此文件,则覆盖
jcerr1;创建出错,转err
movhode,ax;保存文件号
movbx,ax
movcx,bp;设置要写入的字节数
movlengthth,bp
movdx,offsetbuf1[2]
movah,40h
int21h;向文件中写入缓存中的字节内容
jcerr1;写出错,转err
movbx,hode
movah,3eh
int21h;关闭文件
jcerr1;关闭文件出错,转err
ret
err1:
movdx,offseterror
movah,9
int21h
movah,4ch
int21h
ret
createndp
;--------------------------------------------打开文件子程序-------------------------------------
openproc
movdx,offsetbuf[2]
moval,0;表示为读文件而打开(1为写,3为读写)
movah,3dh
int21h;打开文件
jcerr;若打开出错,转err
movhode,ax;保存文件号
movbx,ax
movcx,199;要读入的字节数
movdx,offsetbuf1[2]
movah,3fh
int21h;从文件读取199字节→buf1[2]
jcerr;若读出错,转err
movbx,ax;实际读到的字符数送入bx
movlengthth,bx
addbx,2
movbuf1[bx],'$';在文件结束处放置一"$"符
movbp,ax
movbx,hode
movah,3eh
int21h;关闭文件
jcerr
ret
err:
movdx,offseterror
movah,9
int21h
movah,4ch
int21h
ret
openendp
;----------------------------------------------搜索子程序------------------------------------------
searchproc
movdx,offsetmsg3
movah,9
int21h
movah,1
int21h
movcx,bp
xorbx,bx
movdi,offsetbuf1[2]
cmpal,[di]
jzs1
sch:
incdi;用输入的数跟文件里的数进行逐个比较
cmpal,[di]
jzs1
loopsch
jmpend2
s1:
incbx;记录有几个相同的数
jmpsch
end2:
movdx,offsetmsg9
movah,9
int21h
movax,bx
callten;调用十进制转换子程序,把搜索的结果转换成十进制的
addbl,30h
movresult[2],bl
addcl,30h
movresult[1],cl
movch,30h
movresult,ch
movdx,offsetresult;显示搜索结果
movah,9
int21h
ret
searchendp
;--------------------------------------------------替换子程序--------------------------------------
changeproc
xorbx,bx
movdx,offsetmsg4
movah,9
int21h
movah,1
int21h
movbl,al
movdx,offsetmsg5
movah,9
int21h
movah,1
int21h
movcx,bp
movsi,offsetbuf1[2]
ll:
cmpbl,[si];搜索是否有与要搜索的数有相同的数
jzls
incsi
loopll
jmprsl
ls:
mov[si],al;把搜索的结果修改掉
incbh
incsi
jmpll
rsl:
cmpbh,0;检查是否搜索的结果为0
jzno
movdx,offsetoky;不为0显示成功
movah,9
int21h
ret
no:
movdx,offsetmsg6;为0显示没找到
movah,9
int21h
ret
changeendp
;--------------------------------------------------显示文件信息子程序-------------------------
displayproc
movdx,offsetmsg7
movah,9
int21h
decbp
movcx,bp
movsi,offsetbuf1[2];寻找最大值
moval,[si]
next:
incsi
cmpal,[si]
jbchg
loopnext
jmpovera
chg:
moval,[si]
loopnext
overa:
movresult1[4],al
movcx,bp
movsi,offsetbuf1[2];寻找最小值
moval,[si]
next1:
incsi
cmpal,[si]
jachg1
loopnext1
jmpoverb
chg1:
moval,[si]
loopnext1
overb:
movresult1[6],al
incbp
movax,bp
callten;把长度转化成十进制
addbl,30h
movresult1[2],bl
addcl,30h
movresult1[1],cl
addch,30h
movresult1,ch
movdx,offsetresult1
movah,9
int21h
ret
displayendp
;-----------------------------------------返回主菜单的查询程序--------------------------------
backproc
ask:
movdx,offsetmsg8
movah,9
int21h
movah,1;查询是否要保存先前对文件的操作
int21h
cmpal,'y';输入y则保存
jzsave
cmpal,'n';输入n则不保存
jzquit
jmpask;输入不是y或n则再次请求输入选择y或n
save:
movdx,offsetintronew
movah,09h
int21h
movdx,offsetnewname;输入文件路径
movah,0ah
int21h
movdx,offsetcrlf;回车换行
movah,09h
int21h
movsi,offsetnewname+1
movbl,[si];得到实际字节数
movbh,0
movbyteptr[newname+bx+2],0;在路径后面加0
;建立文件
movdx,offsetnewname+2
movcx,0
movah,3ch
int21h
movsi,offsethandle
mov[si],ax;保存文件代号
;往文件写内容
movsi,offsethandle
movbx,[si];文件代号
leadx,buf1+2
movcx,lengthth
movah,40h
int21h
;关闭文件
movsi,offsethandle
movbx,[si]
movah,3eh
int21h
JMPSTOP;若选了y则进行改写原文件(即保存)
quit:
ret
backendp
;---------------------------------十六进制转换成十进制(最高百位)子程序----------------
tenproc
xorcx,cx
xorbx,bx
movbl,al;把要转换的数据放到bl
j0:
movbh,bl;计算有几个10
subbl,10
jcj1
inccl
jmpj0
j1:
movbl,bh;剩下的为个位数
j2:
movbh,cl;计算有几个100
subcl,10
jced
incch
jmpj2
ed:
movcl,bh;剩下的为十位数
ret
tenendp
;============================================================
stop:
movah,4ch
int21h
codeends
endstart
主能菜单显示
2、设计流程图
3号功能
判断功能号
1号功能
2号功能
读取文件
退出结束
创建文件
附加功能菜单显示
判断功能号
5号功能
返回主菜单
1号功能
显示文件内容
2号功能
n
3号功能
内容排序
是否保存
关键字检索
y
4号功能
字节替换
新文件保存
5、程序运行结果及调试过程中出现的问题、原因及解决方案
1.运行结果截图:
主菜单及创建文件结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 磁盘 符号 字节 数据文件 小于 64 KB 操作
![提示](https://static.bingdoc.com/images/bang_tan.gif)