汇编文件管理系统实验报告.docx
- 文档编号:8260317
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:18
- 大小:28.18KB
汇编文件管理系统实验报告.docx
《汇编文件管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《汇编文件管理系统实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
汇编文件管理系统实验报告
《汇编语言程序设计》
综合程序设计实验报告
题目:
文件管理系统
1、项目简介
我们组主要针对文件进行操作。
主要实现功能如下:
首先,进入系统之后是对文件的普通操作即只能对文件进行读操作,不能对文件进行修改。
所有用户都可以进行这些操作,用户也可选择通过登录到超级用户界面对文件进行更多的操作。
包括文件的写入和删除等普通用户无法进行的操作。
2、小组成员具体分工
宋善德:
界面制作,菜单制作,对文件的创建读写删除,和统计文件内单词数,及多次读文件缓存区清空等有关代码的编写。
吕晓宇:
超级用户登录时验证用户名和密码操作,及可通过输入文件名的方式创建,读写文件等有关代码的编写。
3、需求分析与设计
文件管理系统,需要实现对文件的管理,包括文件的创建、写入、读取、字符统计删除等功能。
在这个基础上,为了防止误操作,增加了用户验证功能。
直接进入系统菜单选项只有读文件的选项,需要文件的建立、删除等操作时需要,就选择超级用户选项,输入用户名密码,验证完成之后才可以进行接下来操作。
4、代码及分析
1.源代码:
datasegment
menu1db0dh,0ah,'****************************************',0dh,0ah
db'*menu*',0dh,0ah
db'*--------------------------------------*',0dh,0ah
db'*1.Readfile*',0dh,0ah
db'*2.superuser*',0dh,0ah
db'*3.quit*',0dh,0ah
db'*--------------------------------------*',0dh,0ah
db'*Choice(1--3)*',0dh,0ah
db'****************************************',0dh,0ah,'$'
menudb0dh,0ah,'****************************************',0dh,0ah
db'*------------------menu----------------*',0dh,0ah
db'*1.Createfile*',0dh,0ah
db'*2.Writetofile*',0dh,0ah
db'*3.Readfile*',0dh,0ah
db'*4.wordshu*',0dh,0ah
db'*5.deletefile*',0dh,0ah
db'*6.quit*',0dh,0ah
db'*-------------Choice(1--6)-------------*',0dh,0ah
db'****************************************',0dh,0ah,'$'
PATH1DB'c:
/a.txt',0
PATH2DB'c:
/b.txt',0
bufDB60DUP('$')
buf1DB60DUP('$')
ASK1DB13,10,'INPUTFILENAME:
','$'
STR1DB13,10,'shuruusername:
',13,10,'$'
STR2DB13,10,'shurumima:
',13,10,'$'
pathnamedb40,41dup(?
)
handledw?
buffer1db60,0,60dup(?
)
buffer2db60,0,60dup(?
)
huanhangdb'',0dh,0ah,'$'
chosedb0dh,0ah,'Pleaseenterthedigitalfrom1-4!
',0dh,0ah,'$'
enterydb0dh,0ah,'Enterwhatyouwanttowritetothefile!
(Thelengthofthestringsisunder60)',0dh,0ah,'$'
str_ok1db0dh,0ah,'Createfilesuccessfully!
',0dh,0ah,'$'
str_ok2db0dh,0ah,'Writetofilesuccessfully!
',0dh,0ah,'$'
str_ok3db0dh,0ah,'Readfromfilesuccessfully!
',0dh,0ah,'$'
str_ok4db0dh,0ah,'Deletefilesuccessfully!
',0dh,0ah,'$'
str_ok5db0dh,0ah,'wordnumberinfile:
',0dh,0ah,'$'
str_error1db0dh,0ah,'Createfileerror!
$'
str_error2db0dh,0ah,'Openfileerror!
$'
str_error3db0dh,0ah,'Writetofileerror!
$'
str_error4db0dh,0ah,'Readfileerror!
$'
str_error5db0dh,0ah,'Exitfromfileerror!
$'
str_error6db0dh,0ah,'usernameerror!
shuruagain$'
str_error7db0dh,0ah,'mimaerror!
shuruagain$'
str_error8db13,10,'filecannotbefound$'
inerrdb'inputnumbernot1~6',13,10,'$'
inerr1db'inputnumbernot1~3',13,10,'$'
BDB0
tabdwp01;定义地址表
dwp02
dwp03
dwp04
dwp05
dwp06
dataends
;---------------------------------
;以下为代码段
;---------------------------------
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movax,0600h
movah,0;设置显示方式
moval,04h
int10h
movah,0bh;置彩色调板
movbh,0
movbl,1
int10h
movah,0bh;置彩色调板
movbh,1
movbl,4
int10h
movah,9
leadx,menu1
int21h
test1:
;普通用户菜单调用
movah,1
int21h
cmpal,'1'
jnep2
p1:
leadx,huanhang
movah,9
int21h
callread
jmptest1
p2:
cmpal,'2'
jnep3
jmploop2
p3:
cmpal,'3'
jneler
jmpex_it
ler:
movdx,offsetinerr1
movah,9
int21h
jmpex_it
ex_it:
MOVAH,4CH
INT21H
loop2:
MOVAH,09H
LEADX,STR1
INT21H
callid
callcmpareid
loop3:
callpasswd
callcmparepass
loop1:
;超级用户菜单调用
callme
movah,1
int21h
cmpal,'1'
jblerr
cmpal,'6'
jalerr
andax,000fh
decax
addax,ax
movbx,ax
jmptab[bx]
lerr:
movdx,offsetinerr
movah,9
int21h
jmpexit
err1:
leadx,str_error6
movah,9
int21h
jmploop2
err2:
leadx,str_error7
movah,9
int21h
jmploop3
p01:
callcreath
p02:
callentry
p03:
leadx,huanhang
movah,9
int21h
callread
jmploop1
p04:
callNUM
jmploop1
p05:
calldelete
jmploop1
p06:
jmpexit
exit:
MOVAH,4CH
INT21H
;用户名验证模块
;-------------------------------------------
idprocnear
leasi,buf
movcx,6
shuru:
;用户名输入
MOVAH,01H
INT21H
mov[si],al
incsi
loopshuru
MOVAH,3DH;从文件中获取用户名
LEADX,PATH1
MOVAL,2
INT21H
LEADX,buf1
MOVBX,AX
MOVCX,100
MOVAH,3FH
INT21H
ret
idendp
cmpareidprocnear;循环比较程序,逐位比较用户名
leasi,buf
LEAdi,buf1
movcx,5
cmpare:
movax,[si]
cmpax,[di]
jneerr1
incsi
incdi
loopcmpare
ret
cmpareidendp
;密码验证模块
;-----------------------------------
passwdprocnear
LEADX,STR2
MOVAH,09H
INT21H
leasi,buf
movcx,6
mima:
;密码输入
MOVAH,01H
INT21H
mov[si],al
incsi
loopmima
MOVAH,3DH
LEADX,PATH2;从文件中获取密码
MOVAL,2
INT21H
LEADX,buf1
MOVBX,AX
MOVCX,60
MOVAH,3FH
INT21H
ret
passwdendp
cmparepassprocnear;循环比较程序,逐位比较密码
leasi,buf
leadi,buf1
movcx,5
cmpass:
movax,[si]
cmpax,[di]
jneerr2
incsi
incdi
loopcmpass
ret
cmparepassendp
;调用功能选择控制模块
;----------------------------------;me----主界面模块
meprocnear
movah,9
leadx,menu
int21h
ret
meendp
;----------------------------------;choice----功能选择控制模块
;----------------------------------;creath----创建文件模块
creathprocnear
callinput
movah,3ch;3CH建立文件AX=文件代号(成功)/错误码(失败)
leadx,pathname+2;DS:
DX=ASCIZ串地址
movcx,0;CX=文件属性
int21h
jcerror1
movhandle,ax
jmpexit0
error1:
movah,9;返回错误信息
leadx,str_error1
int21h
jmpexit1
exit0:
movah,9;返回成功信息
leadx,str_ok1
int21h
exit1:
jmploop1
creathendp
;----------------------------------;entry----写入文件模块
entryprocnear
movah,9
leadx,entery
int21h
leadx,buffer1
movah,0ah;0AH键盘输入到缓冲区(DS:
DX)=最大字符数(DS:
DX+1)=实际输入的字符数
int21h
subch,ch;把输入字符数存入CX
movcl,buffer1+1;
adddx,2
callwrith;转入“实现写入”
ret
entryendp
;----------------------------------;writh----实现写入
writhprocnear
callinput
movah,3dh;3DH打开文件AX=文件代号(成功)/错误码(失败)
leadx,pathname+2;DS:
DX=ASCIZ串地址
moval,1;AL=访问和文件共享方式;0=读1=写2=读/写
int21h
jcerror2
movhandle,ax
movah,40h;40H写文件或设备AX=实际写入的字节数(成功)/错误码(失败)
leadx,buffer1+2;DS:
DX=ASCIZ串地址
movbx,handle;BX=文件代号;CX=写入的字节数
int21h
jcerror3
movah,3eh;3EH关闭文件
movbx,handle
int21h
jcerror4
jmpback1
error2:
movah,9;错误提示
leadx,str_error2
int21h
jmpexit2
error3:
movah,9
leadx,str_error2
int21h
jmpexit2
error4:
movah,9
leadx,str_error4
int21h
jmpexit2
back1:
movah,9
leadx,str_ok2
int21h
exit2:
jmploop1
writhendp
;----------------------------------;read----读取文件模块
readprocnear
callinput
MOVAH,3DH
leadx,pathname+2
MOVAL,0
INT21H
JNCRFILE
ERRMSG:
LEADX,str_error2
MOVAH,9
INT21H
MOVAH,4CH;
INT21H
RFILE:
MOVBX,AX
LEADX,buf
MOVCX,60
MOVAH,3FH
INT21H
JCERRMSG
CALLCRLF
;callbufcl
LEADX,buf
MOVAH,9
INT21H
LEADX,str_ok3
MOVAH,9
INT21H
callbufcl
ret;返回功能选择控制
readendp
bufclprocnear
pushcx
pushbx
leasi,buf
movcx,60
movbx,20h
lop:
mov[si],bx
incsi
looplop
popcx
popbx
ret
bufclendp
CRLFPROCNEAR
MOVDL,0AH
MOVAH,2
INT21H
MOVDL,0DH
MOVAH,2
INT21H
RET
CRLFENDP
NUMPROCNEAR;字符统计子程序
callinput
MOVAH,3DH
LEADX,pathname+2
MOVAL,2
INT21H
LEADX,buf
MOVBX,AX
MOVCX,60
MOVAH,3FH
INT21H
MOVCX,AX
LEASI,buf
MOVAL,0
NEXT:
MOVDL,[SI]
CMPDL,20H;比较,若不为空格继续执行,为空格则B加1
JNEJISHU
INCB
JISHU:
INCSI
LOOPNEXT
MOVAH,3EH
INT21H
movah,9
leadx,str_ok5
int21h
ADDB,31H
MOVDL,B
MOVAH,02H
INT21H
RET
NUMENDP
INPUTPROCNEAR;输入文件路径传递调用程序
pushdx
LEADX,ASK1
MOVAH,9
INT21H
LEADX,pathname
MOVAH,0AH
INT21H
pushcx
MOVCL,pathname+1
MOVCH,0
MOVSI,CX
MOVpathname[SI+2],0
popcx
popdx
RET
INPUTENDP
deleteprocnear
leadx,ASK1
movah,9
int21h
leadx,buf
movah,10
int21h
moval,buf+1
movah,0
leabx,buf+2
addbx,ax
mov[bx],wordptr'$'
;删除文件
movdx,offsetbuf+2
movah,41h
int21h
cmpax,0
jneet2
et1:
leadx,str_ok4
movah,9
int21h
jmpq
et2:
leadx,str_error8
movah,9
int21h
q:
ret
deleteendp
codeends
endstart
2.代码分析
主要利用汇编有关文件读写方面的知识,同时实现了以下几点特色功能:
第一,增加了对文件的操作权限的限制模块,普通用户只能进入只读模式,而超级用户可以进行读写删除等操作。
第二,实现了统计文件中的单词个数的操作。
具体实现方法是将文件中内容与“空格符”一位位的比较,统计“空格符”的个数,从而等到文件中的单词个数。
第三,实现了可对任意文件进行操作而不是对固定的文件进行操作。
第四,解决了多次读文件时,将缓冲区中内容未清空的问题。
具体实现是通过把缓冲区中的每一位都换成“空格”的方式将缓冲区清空。
3.结果分析
(1)普通用户界面:
(只能读文件)
(2)选择2进入超级用户界面登录后界面如下:
此时可对文件进行创建,读写,统计单词个数,删除操作。
5、总结
这次汇编大作业,我们小组成员通力合作,完成了这个程序。
这次大作业不仅是对我们对汇编语言的掌握及编程能力的考验,更是对我们团队协作能力的考验。
先经过协商,完成对系统的功能的定位,再分工合作,讨论每个人需要实现的功能,然后对变量的设置、缓冲区的定义统一规划。
在我们完成各自的任务后没有经过什么波折就将程序组合在一起。
在编写程序是我们本来想做一个ATM机的程序,但是由于编程能力的欠缺,没能实现。
就做了一个文件管理,但是在诸多方面还有欠缺,程序功能方面还有很多不足,并没有实现我们平时对文件操作的需求。
在用户登录方面,目前仅容纳一个用户,没有实现多用户。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 文件 管理 系统 实验 报告