微机原理课程设计Word格式文档下载.docx

上传人:b****4 文档编号:16435440 上传时间:2022-11-23 格式:DOCX 页数:19 大小:128.39KB
下载 相关 举报
微机原理课程设计Word格式文档下载.docx_第1页
第1页 / 共19页
微机原理课程设计Word格式文档下载.docx_第2页
第2页 / 共19页
微机原理课程设计Word格式文档下载.docx_第3页
第3页 / 共19页
微机原理课程设计Word格式文档下载.docx_第4页
第4页 / 共19页
微机原理课程设计Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

微机原理课程设计Word格式文档下载.docx

《微机原理课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

微机原理课程设计Word格式文档下载.docx

具体的设计任务及要求:

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

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

当前位置:首页 > 工程科技 > 电力水利

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

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