微机原理课程设计.docx
- 文档编号:3530084
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:19
- 大小:128.39KB
微机原理课程设计.docx
《微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
微机原理课程设计
二○一二~二○一三学年第二学期
电子信息工程系
课程设计报告书
姓名:
余梓奇
学号:
201012135031
班级:
电子信息工程2010级1班
课程名称:
微机原理及应用课程设计
学时学分:
1周1学分
指导教师:
杨君
二○一三年二月
课程设计题目:
简单文件管理
基本功能:
1文本文件的分页显示
2文件的拷贝
3文件的删除41hDS:
DX=ASCIZ串地址
smenudb'display|copy|deletefile',0dh,0ah
db'1.displaytextfile',0dh,0ah
db'2.copyfile',0dh,0ah
db'3.deletefile',0dh,0ah
db'0.TheEnd',0dh,0ah
db'selectplease:
1,2,3,0$'
问题描述:
理解磁盘的结构和存储原理。
掌握文件代号方式下MS-DOS对磁盘文件的管理方法,掌握文件代号方式下与磁盘文件操作相关的DOS功能调用。
具体的设计任务及要求:
1)出现提示后输入要显示的磁盘文件的路径名;
2)显示一页后暂停,等待用户命令:
·用户输入“1”,继续显示下一页;
·用户输入“2”,将刚才显示的一页拷贝到指定的磁盘文件中;
·用户输入“3”,将刚才显示的一页从文件中删除;
·用户输入“0”,结束程序。
3)文件显示完后显示提示信息。
设计中使用的方法:
1.文件代号存取方式
在DOS2.0以上的版本中,为了支持层次结构,引用了树形结构目录,因此相应增加了一个新的存取方式即文件代号存取方式(filehandlesaccess)。
这种方式将有关文件的完整的路径名(pathname),一旦文件的路径名被送入操作系统,就被赋予一个简单的文件代号(filehandle),这个文件代号是一个16位的数。
以后对该文件进行读写时,就用这个文件代号去查找相应的文件。
对于每一个打开的文件,DOS还为其管理一个读写指针(read/writepointer),读写指针总是指向下一个要存取的文件的字节,这个读写指针可以引动到文件的任意位置,从而能满足随机存取的要求。
2.写磁盘文件
写一个新文件或用同一个文件名重写一个旧文件时,首先要建立文件并赋给它一个属性,如果DOS发现要建立的文件已经存在,那么原来的文件就破坏。
建立文件的功能调用是3CH,调用该功能时,在DX中装入ASCIZ串的地址,在CX中装入文件的属性。
当写入文件操作完成后,必须用DOS功能调用3EH来关闭文件,以确保操作系统将文件记录在磁盘上,这个操作只要求在BX中放入文件代号。
3.读磁盘文件
调用读文件或设备功能(3FH),要求把文件打开取得文件代号,然后按照指定的字节数从磁盘中把文件读出,送入内存中预先定义好的数据缓冲区。
如果读入的字节数大于缓冲区空间,那么,这些多余的数据将送到程序所占空间上的存储器中。
打开文件操作(3DH)要检查文件名是否合法,文件是否有效。
文件名是一个ASCIZ串,其地址装入DX寄存器,并在AL中设置存取代码。
一个文件分几次读取,取决于文件的大小和输入缓冲区的空间。
如果文件很大,程序中不能设置如此大的缓冲区,则必须分几次重复调用读功能,直到整个文件结束。
程序流程图:
运行结果:
在exe运行文件目录下新建yzq1.txt和空文档yzq2.txt,程序开始运行显示如下:
按1翻页:
按2删除:
按3复制:
5.设计心得:
通过此次汇编课程设计,学到了很多实际运用得上的知识,并认识到了自己动手能力的不足,过程虽然很困难,但还是收获匪浅。
在课程设计的过程中,首先认识到了汇编语言与别的高级语言的差别。
汇编语言它与硬件知识联系非常紧密,要想学好汇编语言,对计算机组成原理和操作系统等课程要有一定的要求。
同时,汇编语言与存储地址的对应关系是非常明了的。
其次可从汇编语言的角度剖析高级计算机语言的组成,更一步了解了汇编语言在处理文件分页显示时运用到的一些基本知识。
这次课程设计是前面那些实验结合在一起的综合运用,并且通过这次课程设计进一步加深了我对整个汇编语言的理解和运用。
最后此次实验启示我们,要善于运用所学的知识并把它运用到实际的操作中,加强自己动手动脑的能力,加强独立思考分析的能力并以此检验所学知识的是否牢固扎实,知识是否欠缺和是否有漏洞以及如何运用所学知识实现真正需求的问题。
因此,在以后学习中要进一步加强运用知识解决问题和实际动手的能力。
6.程序清单:
;#Mode=DOS
datasegment
Pagesizedw?
buf_sizedb80
s_bufdb?
bufdb200dup(?
)
namesdb20dup(?
)
dstnamedb20dup(?
)
curdw?
handledw?
handle_cpydw?
;copy文件句柄
buf_tmpdb24*80dup(?
)
cur_tmpdw?
name_tmpdb"tmp",0
handle_tmpdw?
markdb?
mess_getnamedb0dh,0ah,"Pleaseinputfilename:
$"
mess_getdstnamedb0dh,0ah,"Pleaseinputdstfilename:
$";目标文件
mess_err1db0ah,0dh,"Illegalfilename!
$"
mess_err2db0ah,0dh,"Filenotfound!
$"
mess_err3db0ah,0dh,"Filereaderror!
$"
mess_psizedb0ah,0dh,"PageSize:
$"
mess_deledb0dh,0ah,"Thepageisdeleted!
$"
mess_okdb0dh,0ah,"fileopened!
$"
crlfdb0ah,0dh,"$"
mess_stardb0ah,0dh,"************************"
db0ah,0dh,"$"
dataends
codesegment
assumeds:
data,cs:
code
mainprocfar
start:
pushds
subax,ax
pushax
movax,data
movds,ax
movmark,0
movPagesize,24
movcur,200;Filedatabufferisempty
callgetline;Getfilename
callopenf;openthefileandcreattemporaryfile,
;(ax)=0meansnosuchfile
orax,ax
jnzdisplay
movdx,offsetmess_err2
movah,09h
int21h
jmpfile_end
display:
movcx,Pagesize
movcur_tmp,0
show_page:
callread_block;readalinefromhandletobuf
orax,ax
jnznext2
movdx,offsetmess_err3
movah,09h
int21h;errorinread.
jmpfile_end
next2:
callshow_and_reserve;displayalineinbuf,
;andputthelineinbuf_tmp.
;(bx)returned=0
;meansthatthefilereachitsend.
orbx,bx
jzfile_end;(bx)=0:
attheendoffile.
orcx,cx
jnzshow_page
;(cx)=0:
endofapage,printalineofstars.
movdx,offsetmess_star
movah,09h
int21h
;thecurrentpagehasbeenonscreen,
;andfollowedbyalineofstars.
wait_space:
movah,1
int21h
cmpal,""
jnzpsize
callwrite_buf_tmp
;command=space,thenreservethepageintempfile.
jmpdisplay
psize:
cmpal,"p"
jnzcopydst
callwrite_buf_tmp
;thelastpageisreserved.
callchange_psize
jmpstick
copydst:
cmpal,'c'
jnzdelete
callgetdstname
callopendstf
orax,ax
jzstick
callshowmessage;
callwrite_dst
callwrite_buf_tmp
jmpstick
delete:
cmpal,"d"
jnzwait_space
;commandisDELETE,thelastpage
;notreservedintempfile.
movmark,1
movdx,offsetmess_dele
movah,02h
int21h
stick:
movah,1
int21h
cmpal,""
jnzstick
jmpdisplay
file_end:
callwrite_buf_tmp
cmpmark,0
jzok
callwrite_tmp_back;writethetempfileback
;touser'sfile.
ok:
ret
mainendp
change_psizeprocnear
pushax
pushbx
pushcx
pushdx
movdx,offsetmess_psize
movah,09h
int21h
movah,01
int21h
cmpal,0dh
jzilleg
subal,"0"
movcl,al
getp:
movah,1
int21h
cmpal,0dh
jzpgot
subal,"0"
movdl,al
moval,cl
movcl,dl;exchangealandcl.
movbl,10
mulbl
addcl,al
jmpgetp
pgot:
movdl,0ah
movah,2
int21h;output0ahtocompletetheRETURN.
cmpcx,0
jleilleg
cmpcx,24
jgilleg
movPagesize,cx
illeg:
movdl,0ah
movah,09h
int21h;output0ahtocompletetheRETURN
popdx
popcx
popbx
popax
ret
change_psizeendp
openfprocnear
pushbx
pushcx
pushdx
movdx,offsetnames
moval,2
movah,3dh
int21h
movhandle,ax
movax,0
jcquit
movdx,offsetname_tmp
movcx,0
movah,3ch
int21h
movhandle_tmp,ax
jcquit
movax,1
quit:
popdx
popcx
popbx
ret
openfendp
getlineprocnear
pushax
pushbx
pushcx
pushdx
movdx,offsetmess_getname
movah,09h
int21h
movdx,offsetbuf_size
movah,0ah
int21h
movbl,s_buf
movbh,0
movnames[bx],0;insert0toformtheasciizstring.
name_move:
decbx
moval,buf[bx]
movnames[bx],al;movethelinegotintonamestring
jnzname_move
popdx
popcx
popbx
popax
ret
getlineendp
read_blockprocnear
pushbx
pushcx
pushdx
movax,1
cmpcur,200
jnzback
movcx,200
movbx,handle
movdx,offsetbuf
movah,3fh
int21h
movcur,0
movax,1
jncback
movcur,200
movax,0
back:
popdx
popcx
popbx
ret
read_blockendp
show_and_reserveprocnear
pushax
pushdx
movbx,cur
movbp,cur_tmp
loop1:
cmpbx,200
jllp
jmpexit
lp:
movdl,buf[bx]
movds:
buf_tmp[bp],dl;(dl)needshown,reserve
;itinbuf_tmp.
incbx
inccur
incbp
inccur_tmp
cmpdl,1ah;searchthefileend
jzexit_eof
movah,02
int21h;showthe(dl).
cmpdl,0ah
jzexit_ln;ifmeetsRETURN,exit.
jmploop1;elseshowanotherchar.
exit_eof:
movbx,0
exit_ln:
deccx
exit:
popdx
popax
ret
show_and_reserveendp
write_buf_tmpprocnear
pushax
pushbx
pushcx
pushdx
movdx,offsetbuf_tmp
movcx,cur_tmp
movbx,handle_tmp
movah,40h
int21h
popdx
popcx
popbx
popax
ret
write_buf_tmpendp
write_tmp_backprocnear
pushax
pushbx
pushcx
pushdx
movbx,handle_tmp
movah,3eh
int21h;closethetemporaryfile
movbx,handle
movah,3eh
int21h;closethefilegiving
movdx,offsetname_tmp
moval,0
movah,3dh
int21h;openthetemporaryfileforreading
movhandle_tmp,ax
movdx,offsetnames
moval,1
movah,3dh
int21h;reopenthefilegivingforwriting
movhandle,ax
movsi,1
wrt_back:
movbx,handle_tmp
movah,3fh
movcx,200
movdx,offsetbuf
int21h;readapagebytesfromtemporaryfiletobuf
jcwrt_end
movsi,ax
movbx,handle
movah,40h
movcx,si
movdx,offsetbuf
int21h;writeapagebytesfrombuftothefilegiving
orsi,si
jnzwrt_back
movah,3eh
movbx,handle
int21h;closethefilegiving
wrt_end:
popdx
popcx
popbx
popax
ret
write_tmp_backendp
getdstnameprocnear
pushax
pushbx
pushcx
pushdx
movdx,offsetmess_getdstname
movah,09h
int21h
movdx,offsetbuf_size
movah,0ah
int21h
movbl,s_buf
movbh,0
movdstname[bx],0;insert0toformtheasciizstring.
name_move1:
decbx
moval,buf[bx]
movdstname[bx],al;movethelinegotintonamestring
jnzname_move1
popdx
popcx
popbx
popax
ret
getdstnameendp
opendstfprocnear
pushbx
pushcx
pushdx
movdx,offsetdstname
moval,2
movah,3dh
int21h
movhandle_cpy,ax
movax,0
jcquit1
movax,1
quit1:
popdx
popcx
popbx
ret
opendstfendp
write_dstprocnear
pushax
pushbx
pushcx
pushdx
movdx,offsetbuf_tmp
movcx,cur_tmp
movbx,handle_cpy
movah,40h
int21h
popdx
popcx
popbx
popax
ret
write_dstendp
;
showmessageprocnear
pushax
pushbx
pushcx
pushdx
movdx,offsetmess_ok
movah,09h
int21h
popdx
popcx
popbx
popax
ret
showmessageendp
codeends
endstart
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)