汇编文件操作程序实验报告.docx
《汇编文件操作程序实验报告.docx》由会员分享,可在线阅读,更多相关《汇编文件操作程序实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
汇编文件操作程序实验报告
《汇编语言程序设计》
综合程序设计实验报告
题目:
文件操作以及对内容进行一些操作
1、项目简介
我们组做的是关于文件操作的,主要操作是创建文件,向文件写入内容,在读文件,把文件里的内容读出来,并在屏幕上显示,还有就是把文件里的小写字母变成大写字母,其他不变,并存入daxie文件里,把文件里的大写字母变成小写字母,其他不变,并存入xiaoxie文件中,并把它们读出来并在屏幕上显示,还有就是查找字符(看文件中有没有你要查找的字符),最后一个功能就是冒泡排序,将文件中的字符从大到小,从小到大在屏幕上输出。
2、小组成员具体分工
高晓林主要是写界面和创建文件,读文件
黄冠主要是写大写变小写,查找字符,写文件
华飞主要是写冒泡排序,并整合他们的程序,修改细节,完善程序
3、需求分析与设计
需求主要是汇编大作业要求,为了提高分数(因为老师没讲文件,自学文件也能提高自己的自学能力),还有个原因就是我们组觉得文件在程序设计中具有重要的地位,所以我们组决定吧大作业题目局限在文件领域。
设计,说简单也有点难度,说很难其实也不是很难,我们程序一共9各功能,每个功能都写成一个子程序,具体的实现其实就是有点繁琐(真心觉得汇编真麻烦,分支循环结构在高级语言写几句代码就搞定,而汇编要写很多,而且跳转跳的有时连自己都晕了)。
4、代码及分析
DATASSEGMENT
ppdb20,?
ss1db?
ss2db?
numberdw?
pathnm1db20dup(0)
filenamedb13,10,'enterfilename:
$'
stringdb13,10,'continue(y/n):
$'
filename1db'c:
\daxie',00
filename2db'c:
\xiaoxie',00
errordb13,10,'createfilefail','$'
str5db13,10,'oldstring:
$'
str6db13,10,'newstring:
$'
str7db13,10,'pleaseenterwhatyouneadlook:
$'
str8db13,10,'findsuccess!
$'
str9db13,10,'finderror!
$'
str10db13,10,'oldorder:
$'
str11db13,10,'neworder(bigtosmall):
$'
str12db13,10,'neworder(smalltobig):
$'
strdb13,10,'createfilesuccess','$'
str1db13,10,'writetofilesuccess','$'
str2db13,10,'readfilesuccess',13,10,'$'
str3db13,10,'entercontents:
',13,10,'$'
str4db'readcontents:
$'
menudb13,10,'**********************************',13,10
db'*menu*',13,10
db'*--------------------------------*',13,10
db'*1.Createfile*',13,10
db'*2.Writetofile*',13,10
db'*3.Readfile*',13,10
db'*4.A->a*',13,10
db'*5.a->A*',13,10
db'*6.Findword*',13,10
db'*7.Order(bigtosmall)*',13,10
db'*8.Order(smalltobig)*',13,10
db'*9.Quit*',13,10
db'*--------------------------------*',13,10
db'*choice(1-8)*',13,10
db'**********************************',13,10
db'enteryourchoice:
$'
bufdb?
inrecdb13,10,256dup('$')
newstringdb13,10,256dup('$')
handle1dw?
handle2dw?
handle3dw?
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
next5:
callscren
movah,9
leadx,menu
int21h
movah,01
int21h
movcl,al
cmpcl,31h
jznext1
cmpcl,32h
jznext2
cmpcl,33h
jznext3
cmpcl,34h
jznext4
cmpcl,35h
jznext7
cmpcl,36h
jznext8
cmpcl,37h
jznext9
cmpcl,38h
jznext10
cmpcl,39h
jznext11
jmpnext5
next1:
callcreate
callty
jmpnext5
next2:
callwrite
callty
jmpnext5
next3:
callread
callty
jmpnext5
next4:
calldbx
callty
jmpnext5
next7:
callxbd
callty
jmpnext5
next8:
callchazhao
callty
jmpnext5
next9:
callorder
callty
jmpnext5
next10:
callorder1
callty
jmpnext5
next11:
callexit
movah,4ch
int21h
exitprocnear;推出dos界面
movah,4ch
int21h
exitendp
screnprocnear;清屏
movax,3h
int10h
ret
screnendp
xbdprocnear;小写字母变大写,其他原样输出
movah,3dh
leadx,filename1
moval,2
int21h
movhandle2,ax
movah,9
leadx,str5
int21h
callopen
movah,3fh
movcx,256
movbx,handle1
leadx,inrec+2
int21h
leadx,inrec
movah,9
int21h
callclose
movah,9
leadx,str6
int21h
movah,3fh
movcx,256
movbx,handle2
leadx,newstring+2
int21h
leadx,newstring
movah,9
int21h
ret
movah,3Eh
movbx,handle2
int21h
xbdendp
dbxprocnear;大写字母变小写,其他原样输出
movah,3dh
leadx,filename2
moval,2
int21h
movhandle3,ax
movah,9
leadx,str5
int21h
callopen
movah,3fh
movcx,256
movbx,handle1
leadx,inrec+2
int21h
leadx,inrec
movah,9
int21h
callclose
movah,9
leadx,str6
int21h
movah,3fh
movcx,256
movbx,handle3
leadx,newstring+2
int21h
leadx,newstring
movah,9
int21h
movah,3Eh
movbx,handle3
int21h
ret
dbxendp
typrocnear;是否继续
movah,9
leadx,string
int21h
movah,01h
int21h
cmpal,'y'
jznext6
movah,4ch
int21h
next6:
ret
tyendp
createprocnear;创建文件
movah,9
leadx,filename
int21h
subsi,si
again1:
MOVAH,1
INT21H
CMPAL,0DH
JZEXIT3
MOVpathnm1[si],al
addsi,1
jmpagain1
exit3:
movah,3ch
movcx,00
leadx,pathnm1
int21h
jca1
movhandle1,ax
movah,9
leadx,str
int21h
callclose
ret
a1:
movah,9
leadx,error
int21h
subsi,si
movcx,20
yy1:
movpathnm1[si],00
incsi
loopyy1
ret
createendp
create1procnear;创建小写变大写的文件
movah,3ch
movcx,00
leadx,filename1
int21h
movhandle2,ax
ret
create1endp
create2procnear;创建大写变小写的文件
movah,3ch
movcx,00
leadx,filename2
int21h
movhandle3,ax
ret
create2endp
openprocnear;打开源文件
movah,3dh
leadx,pathnm1
moval,2
int21h
movhandle1,ax
ret
openendp
writeprocnear;往源文件里写内容并顺带吧小写变大写和大写变小写生成的字符写入daxie和xiaoxie文件
callopen
movah,9
leadx,str3
int21h
callcreate1
callcreate2
movnumber,0
subsi,si
again:
MOVAH,1
INT21H
CMPAL,0DH
JZEXIT2
addsi,1
movss1,al
MOVBUF,AL
MOVAH,40H
MOVBX,handle1
MOVCX,1
LEADX,BUF
INT21H
moval,ss1
cmpal,'a'
jnba2
MOVBUF,al
MOVAH,40H
MOVBX,handle2
MOVCX,1
LEADX,BUF
INT21H
jmpddd
a2:
cmpal,'z'
jbea3
MOVBUF,al
MOVAH,40H
MOVBX,handle2
MOVCX,1
LEADX,BUF
INT21H
jmpddd
a3:
subal,32
MOVBUF,al
MOVAH,40H
MOVBX,handle2
MOVCX,1
LEADX,BUF
INT21H
jmpddd
ddd:
moval,ss1
cmpal,'A'
jnba4
MOVBUF,al
MOVAH,40H
MOVBX,handle3
MOVCX,1
LEADX,BUF
INT21H
jmpagain
a4:
cmpal,'Z'
jbea5
MOVBUF,al
MOVAH,40H
MOVBX,handle3
MOVCX,1
LEADX,BUF
INT21H
jmpagain
a5:
addal,32
MOVBUF,al
MOVAH,40H
MOVBX,handle3
MOVCX,1
LEADX,BUF
INT21H
jmpagain
exit2:
movnumber,si
movah,9
leadx,str1
int21h
callclose
ret
writeendp
readprocnear;读源文件
callopen
movah,9
leadx,str2
int21h
movah,9
leadx,str4
int21h
movah,3fh
movcx,256
movbx,handle1
leadx,inrec+2
int21h
leadx,inrec
movah,9
int21h
callclose
ret
readendp
closeprocnear;关闭源文件
movah,3Eh
movbx,handle1
int21h
ret
closeendp
chazhaoprocnear;在源文件里查找字符,成功输出findsuccess,反之则finderror
movah,9
leadx,str7
int21h
movah,1
int21h
movss2,al
callopen
movah,3fh
movcx,256
movbx,handle1
leadx,inrec+2
int21h
callclose
moval,ss2
movcx,20
subsi,si
movsi,2
hhh:
cmpal,inrec[si]
jnza7
movah,9
leadx,str8
int21h
ret
a7:
addsi,1
loophhh
movah,9
leadx,str9
int21h
ret
chazhaoendp
orderprocnear;排序从大到小
callopen
movah,3fh
movcx,256
movbx,handle1
leadx,inrec+2
int21h
callclose
movah,9
leadx,str10
int21h
movah,9
leadx,inrec
int21h
movah,9
leadx,str11
int21h
subbx,bx
movbx,1
qqq:
movcx,number
subcx,1
subsi,si
movsi,2
addbx,1
hhh1:
moval,inrec[si]
cmpal,inrec[si+1]
jgea9
xchgal,inrec[si+1]
movinrec[si],al
a9:
addsi,1
loophhh1
cmpbx,number
jbeqqq
movah,9
leadx,inrec
int21h
ret
orderendp
order1procnear;排序从小到大
callopen
movah,3fh
movcx,256
movbx,handle1
leadx,inrec+2
int21h
callclose
movah,9
leadx,str10
int21h
movah,9
leadx,inrec
int21h
movah,9
leadx,str12
int21h
subbx,bx
movbx,1
qqq1:
movcx,number
subcx,1
subsi,si
movsi,2
addbx,1
hhh11:
moval,inrec[si]
cmpal,inrec[si+1]
jbea10
xchgal,inrec[si+1]
movinrec[si],al
a10:
addsi,1
loophhh11
cmpbx,number
jbeqqq1
movah,9
leadx,inrec
int21h
ret
order1endp
CODESENDS
ENDSTART
5、总结
我们组的实验心得:
一开始冲动得报了个文件操作的题目,得到开始做的时候,有点儿不知所措,因为汇编文件这章没学过,不过后来看书慢慢自学,可是验证时,一直卡在读文件这步上,后来才发现因为少输出了回车换行,把这个做好了,后面的就是顺水推舟,一步一步做,一步一步敲代码,把一个一个功能实现。
我们组共同认为凡事开头难,一旦下定决心,总能做出让自己满意的作品。