微机原理课程设计Word格式文档下载.docx
- 文档编号:16435440
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:19
- 大小:128.39KB
微机原理课程设计Word格式文档下载.docx
《微机原理课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
具体的设计任务及要求:
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
jnznext2
movdx,offsetmess_err3
int21h;
errorinread.
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
thecurrentpagehasbeenonscreen,
andfollowedbyalineofstars.
wait_space:
movah,1
cmpal,"
"
jnzpsize
callwrite_buf_tmp
command=space,thenreservethepageintempfile.
jmpdisplay
psize:
p"
jnzcopydst
thelastpageisreserved.
callchange_psize
jmpstick
copydst:
cmpal,'
c'
jnzdelete
callgetdstname
callopendstf
orax,ax
jzstick
callshowmessage;
callwrite_dst
callwrite_buf_tmp
jmpstick
delete:
d"
jnzwait_space
commandisDELETE,thelastpage
notreservedintempfile.
movmark,1
movdx,offsetmess_dele
movah,02h
stick:
jnzstick
file_end:
callwrite_buf_tmp
cmpmark,0
jzok
callwrite_tmp_back;
writethetempfileback
touser'
sfile.
ok:
ret
mainendp
change_psizeprocnear
pushbx
pushcx
pushdx
movdx,offsetmess_psize
movah,01
cmpal,0dh
jzilleg
subal,"
0"
movcl,al
getp:
jzpgot
movdl,al
moval,cl
movcl,dl;
exchangealandcl.
movbl,10
mulbl
addcl,al
jmpgetp
pgot:
movdl,0ah
movah,2
output0ahtocompletetheRETURN.
cmpcx,0
jleilleg
cmpcx,24
jgilleg
movPagesize,cx
illeg:
output0ahtocompletetheRETURN
popdx
popcx
popbx
popax
change_psizeendp
openfprocnear
movdx,offsetnames
moval,2
movah,3dh
movhandle,ax
movax,0
jcquit
movdx,offsetname_tmp
movcx,0
movah,3ch
movhandle_tmp,ax
movax,1
quit:
popbx
ret
openfendp
getlineprocnear
movdx,offsetmess_getname
movdx,offsetbuf_size
movah,0ah
movbl,s_buf
movbh,0
movnames[bx],0;
insert0toformtheasciizstring.
name_move:
decbx
moval,buf[bx]
movnames[bx],al;
movethelinegotintonamestring
jnzname_move
getlineendp
read_blockprocnear
cmpcur,200
jnzback
movcx,200
movbx,handle
movdx,offsetbuf
movah,3fh
movcur,0
jncback
movcur,200
back:
read_blockendp
show_and_reserveprocnear
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
showthe(dl).
cmpdl,0ah
jzexit_ln;
ifmeetsRETURN,exit.
jmploop1;
elseshowanotherchar.
exit_eof:
movbx,0
exit_ln:
deccx
exit:
show_and_reserveendp
write_buf_tmpprocnear
movdx,offsetbuf_tmp
movcx,cur_tmp
movbx,handle_tmp
movah,40h
write_buf_tmpendp
write_tmp_backprocnear
movah,3eh
closethetemporaryfile
closethefilegiving
moval,0
openthetemporaryfileforreading
moval,1
reopenthefilegivingforwriting
movsi,1
wrt_back:
readapagebytesfromtemporaryfiletobuf
jcwrt_end
movsi,ax
movcx,si
writeapagebytesfrombuftothefilegiving
orsi,si
jnzwrt_back
wrt_end:
write_tmp_backendp
getdstnameprocnear
movdx,offsetmess_getdstname
movdstname[bx],0;
name_move1:
movdstname[bx],al;
jnzname_move1
getdstnameendp
opendstfprocnear
movdx,offsetdstname
movhandle_cpy,ax
jcquit1
quit1:
opendstfendp
write_dstprocnear
movbx,handle_cpy
write_dstendp
showmessageprocnear
movdx,offsetmess_ok
showmessageendp
codeends
endstart
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计