汇编BIOS和DOS中断Word下载.docx
- 文档编号:19642052
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:23
- 大小:412.75KB
汇编BIOS和DOS中断Word下载.docx
《汇编BIOS和DOS中断Word下载.docx》由会员分享,可在线阅读,更多相关《汇编BIOS和DOS中断Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
若创建成功,则显示“CREATEFILEOK!
”,然后关闭该文件,返回DOS。
在创建及关闭FDATA.DAT文件时若遇到错误,则显示相关的错误提示信息;
(3)在D:
\assembly下新建filew.asm;
输入写文件的汇编程序源代码,实现功能为:
首先打开D:
\assembly\FDATA.DAT文件(由程序filec.asm创建);
接着在该文件中写入信息“WRITEDEMO!
”;
然后关闭它;
最后返回DOS。
若写入成功,则显示“WRITEFILEOK!
”。
在对FDATA.DAT文件操作时若遇到错误,则显示相关的错误提示信息;
(4)在D:
\assembly下新建filer.asm;
输入读文件的汇编程序源代码,实现功能为:
接着在该文件中读出信息(该信息应是由程序filew.asm写入的WRITEDEMO!
);
然后关闭FDATA.DAT文件;
若读取成功,则显示“READFILEOK!
在对FDATA.DAT文件操作时若遇到错误,则显示相关的错误提示信息。
为了验证其读取的正确性,在读文件的前后均调用了PUTS宏指令显示BUFFER中的信息,若程序运行正确,两次显示的信息应不相同;
(5)汇编以上三个程序(filec.asm、filew.asm、filer.asm)源代码,检查错误,错误可能是由宏指令库里的代码错误导致,应注意汇编程序的提示信息,并改正之,重新汇编;
(6)调试运行以上三个程序,并记录实验结果;
(7)完成实验报告。
五、实验过程原始记录(数据、图表、计算等)
1.新建文件管理功能宏指令库filefuc.mac:
filefuc.mac文件源码:
;
-----------------------------------
功能:
保存寄存器DX、CX、BX、AX
PUSHREGMACRO
PUSHDX
PUSHCX
PUSHBX
PUSHAX
ENDM
恢复寄存器AX、BX、CX、DX
POPREGMACRO
POPAX
POPBX
POPCX
POPDX
清屏
CLRSCRMACRO
PUSHREG
MOVAH,6
MOVAL,0
MOVBH,4EH
MOVCX,0
MOVDX,184FH
INT10H
POPREG
置光标
入口:
DH:
DL行,列
出口:
无
CURSORMACROROW,COL
MOVAH,2
MOVBH,0
MOVDH,ROW
MOVDL,COL
在指定位置显示字符串
S字符串变量(以$结束)
PUTSMACROROW,COL,S
CURSORROW,COL
LEADX,S
MOVAH,9
INT21H
给DS赋值
数据段名:
DATA
出口:
LOADDSMACRODATA
MOVAX,DATA
MOVDS,AX
返回DOS
RETURNMACRO
MOVAX,4C00H
创建文件
PNAME文件说明
MSG6文件创建失败时显示的字符串
AL=1成功,AL=0失败
NEWFILEMACROPNAME,MSG6
LOCALERROR
LOCALEXIT
MOVAH,3CH
MOVCX,0
LEADX,PNAME
JCERROR
MOVFILEHANDLE,AX
MOVAL,1
JMPEXIT
ERROR:
PUTS10,10,MSG6
MOV,AL,0
EXIT:
NOP
打开文件
MSG2文件打开失败时显示的字符串
OPENFILEMACROPNAME,MSG2
MOVAH,3DH
MOVAL,02H
PUTS10,10,MSG2
关闭文件
MSG4文件关闭失败时显示的字符串
CLOSEFILEMACROMSG4
MOVAH,3EH
MOVBX,FILEHANDLE
PUTS10,10,MSG4
读文件
LENGTH读字节数BUF缓冲区首址
MSG3文件打开失败时显示的字符串
READFILEMACROLENGTH,BUF,MSG3
MOVAH,3FH
MOVCX,LENGTH
LEADX,BUF
PUTS10,10,MSG3
写文件
LENGTH写字节数BUF缓冲区首址
MSG5写文件失败时显示的字符串
WRITEFILEMACROLENGTH,BUF,MSG5
MOVAH,40H
PUTS10,10,MSG5
2.新建filec.asm、filew.asm、filer.asm,分别按照实验步骤中的要求输入相应的代码:
filec.asm:
filew.asm:
filer.asm:
filec.asm文件源码:
INCLUDEFILEFUC.MAC
PURGEOPENFILE,WRITEFILE,READFILE
STACKSGSEGMENTSTACK'
S'
DW64DUP('
?
'
)
STACKSGENDS
DATASEGMENT
MSG0DB'
CREATEFILEOK!
'
$'
MSG4DB'
CLOSEFILEERROR!
MSG6DB'
CREATEFILEERROR!
FILEHANDLEDW0;
文件句柄
NAME1DB'
D:
\ASSEMBLY\FDATA.DAT'
0;
以0结尾的需创建的文件说明
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACKSG
MAINPROCFAR
LOADDSDATA;
给DS赋值
CLRSCR;
NEWFILENAME1,MSG6;
PUTS10,10,MSG0;
在指定位置显示信息
CLOSEFILEMSG4;
RETURN;
返回DOS
MAINENDP
CODEENDS
ENDMAIN
filew.asm文件源码:
INCLUDEFILEFUC.MAC
PURGENEWFILE,READFILE
WRITEFILEOK!
MSG2DB'
OPENFILEERROR!
MSG5DB'
WRITEFILEERROR!
BUFFERDB'
WRITEDEMO!
0DH,0AH
CTEQU$-BUFFER
FILEHANDLEDW0
0
DATAENDS
LOADDSDATA
CLRSCR
OPENFILENAME1,MSG2;
打开文件
WRITEFILECT,BUFFER,MSG5;
PUTS10,10,MSG0
CLOSEFILEMSG4
RETURN
ENDMAIN
filer.asm文件源码:
PURGENEWFILE,WRITEFILE
DW64DUP('
READFILEOK!
MSG3DB'
READFILEERROR!
BUFFERDB13DUP('
R'
),'
OPENFILENAME1,MSG2
PUTS10,10,BUFFER
READFILECT,BUFFER,MSG3;
读文件
PUTS12,10,BUFFER;
显示从D:
\ASSEMBLY\FDATA.DAT中读出的信息
PUTS14,10,MSG0
3.汇编以上三个源程序(filec.asm、filew.asm、filer.asm):
4.连接生成可执行文件(filec.obj、filew.obj、filer.obj):
filec.obj:
filew.obj:
filer.obj:
5.调试程序:
建立文件(filec.exe):
(1)首先反汇编源代码,程序最开始将先调用LOADDS宏指令为DS段赋值:
(2)从1550:
0005处开始将调用CLRSCR宏指令进行清屏操作:
(3)清屏后效果如下图,从1550:
001B处开始将调用NEWFILE宏指令创建指定文件:
(4)即将调用中断指令创建文件FDATA.DAT:
(5)可以看到,如果创建成功,则从1550:
0056处退出宏指令NEWFILE:
(6)从1550:
0057处开始将调用PUTS宏指令,输出字符串:
(7)可以看到在指定位置输出了字符串“CREATEFILEOK!
”,表明文件创建成功:
(8)从1550:
0079处开始将调用CLOSEFILE宏指令,关闭文件:
(9)文件关闭后,从1550:
00AD处开始将调用RETURN宏指令,返回DOS:
(10)程序完成,退出:
(11)在命令提示符下直接运行filec.exe效果如下:
(12)程序已经在指定目录下创建了FDATA.DAT文件:
写文件(filew.exe):
(1)程序开始时,从1552:
(2)清屏后效果如下图,将从1552:
001B处开始将调用OPENFILE宏指令打开指定文件:
(3)即将调用中断指令打开文件FDATA.DAT:
(4)可以看到,如果打开成功,则从1552:
0053处退出宏指令OPENFILE:
(5)从1552:
0054处开始将调用WRITEFILE宏指令将指定内容写入文件:
(6)当写文件成功后,将从1552:
008E处退出WRITEFILE宏指令:
(7)写文件完成后,则从1552:
008F处开始调用PUTS宏指令显示指定字符串:
(8)可以看到在指定位置输出了字符串“WRITEFILEOK!
”,表明写文件操作成功:
(9)从1552:
00B1处开始将调用CLOSEFILE宏指令,关闭文件:
(10)文件关闭后,从1552:
00E5处开始将调用RETURN宏指令,返回DOS:
(11)程序完成,退出:
(12)在命令提示符下直接运行filew.exe效果如下:
(13)程序已经在指定文件FDATA.DAT中写入了指定的内容:
读文件(filer.exe):
(3)从1552:
0053处退出OPENFILE宏指令,并准备调用PUTS宏指令输出当前缓冲区中的内容:
(4)可以看到,输出的当前缓冲区中的内容为RRRRRRRRRRRRR:
0076处开始将调用READFILE宏指令读取文件中的内容到缓冲区:
(6)从1552:
00B0处退出READFILE宏指令,并准备调用PUTS宏指令输出缓冲区中的内容:
(7)可以看到,读取文件内容到缓冲区后,其内容变为WRITEDEMO!
:
(8)然后调用PUTS宏指令,输出提示信息“READFILEOK!
”,表明读文件的操作成功:
00F5处开始将调用CLOSEFILE宏指令,关闭文件:
0129处开始将调用RETURN宏指令,返回DOS:
(12)在命令提示符下直接运行filer.exe效果如下:
六、实验结果、分析和结论(误差分析与数据处理、成果总结等。
其中,绘制曲线图时必须用计算纸)
1.在编写文件操作宏指令库时,要注意根据要求保护寄存器的值到堆栈,并在宏指令结束时按次序退栈,这样可以保证,无论程序中调用宏指令多少次,寄存器数据都始终保持一致,否则会导致不可预知的错误。
2.在进行文件的创建、打开、关闭、读写等操作时,要注意处理异常。
一旦操作失败,一定要运行指定的代码输出错误信息,否则一旦对文件操作失败,很可能导致程序出现异常或死循环,这种情况在程序设计中是非常有害的。
3.DOS系统把5个文件句柄分配给了标准输入输出设备。
既然设备和文件句柄之间建立了对应关系,那么用户就可以把这些设备视为文件一样处理,即可以通过文件句柄从输入设备中读数据或把数据写到输出设备上。
这是句柄方式访问文件的一个很大的好处,它方便了我们用程序对输入设备的操作,给我们的程序编写带来了很大的便利。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 BIOS DOS 中断