汇编文件管理系统实验报告.docx

上传人:b****6 文档编号:8260317 上传时间:2023-01-30 格式:DOCX 页数:18 大小:28.18KB
下载 相关 举报
汇编文件管理系统实验报告.docx_第1页
第1页 / 共18页
汇编文件管理系统实验报告.docx_第2页
第2页 / 共18页
汇编文件管理系统实验报告.docx_第3页
第3页 / 共18页
汇编文件管理系统实验报告.docx_第4页
第4页 / 共18页
汇编文件管理系统实验报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

汇编文件管理系统实验报告.docx

《汇编文件管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《汇编文件管理系统实验报告.docx(18页珍藏版)》请在冰豆网上搜索。

汇编文件管理系统实验报告.docx

汇编文件管理系统实验报告

 

《汇编语言程序设计》

综合程序设计实验报告

题目:

文件管理系统

 

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机的程序,但是由于编程能力的欠缺,没能实现。

就做了一个文件管理,但是在诸多方面还有欠缺,程序功能方面还有很多不足,并没有实现我们平时对文件操作的需求。

在用户登录方面,目前仅容纳一个用户,没有实现多用户。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1