文档库 最新最全的文档下载
当前位置:文档库 › 汇编从命令行读入文件名,调用DOS功能打开文件

汇编从命令行读入文件名,调用DOS功能打开文件

汇编从命令行读入文件名,调用DOS功能打开文件
汇编从命令行读入文件名,调用DOS功能打开文件

实验九文件操作

一、实验分析及框图

1、从命令行读入参数:DOS加载一个外部命令或用户程序时,把文件名之后到回车符

之间的字符串,送到PSP位移81H开始的区域,位移80H的一个字节存放参数字符串长度(回车符不算在内)。读入参数可利用一个循环将80h之后的字节存放到已经申请的用于存放ACSIIZ串的内存空间。在读参数的时候需要判断参数开始存放的位置和参数结束的位置。因为第一个空格以前的字符串为命令名(必须符合DOS命名规则),第一个空格(包括空格)到回车之间的字符作为命令或程序的参数,所以判断的时候可利用第一个不是空格的字节开始,以回车作为结束。在此过程中遇到做一些简单的输入格式错误的响应。

2、调用DOS功能打开文件,并处理可能发生的错误(如文件不存在等)。

在将命令行参数读进响应的内存后,在其后存放一个全零的字节形成ASCIIZ串。设置相应的入口参数之后,调用DOS功能调用INT 21h打开文件。

判断返回参数CF,如果为0,保存文件代码;如果为1,显示出错并退出程序。

3.将文件内容显示在显示器上:设置入口参数如文件代号、读取字节数等,然后调用

读文件的功能调用。判断返回参数CF,如果为0,表示读取成功;如果为1,读取失败显示失败信息并退出程序。

4、关闭文件,返回DOS:设置文件代号,调用关闭文件的功能调用。判断返回参数

CF,如果为0,表示读取成功;如果为1,读取失败显示失败信息并退出程序

二、程序

code segment

assume cs:code,ds:code,es:code,ss:code

org 100h

main proc near

jmp start

org 1000h

fpath db 50 dup(?) ;'D:\hello.txt',0

errmsg3 db'File Operating Error !',0dh,0ah,24h

errmsg2 db'File Cannot Be Closed !',0dh,0ah,24h

errmsg1 db'File Not Found !',0dh,0ah,24h

endmsg db'Press any key to continue !$'

handle dw?;存文件代号

buf db 586 dup(?),'$';数据缓冲区

count dw?;计数

start:

mov al,byte ptr ds:[80h];路径字节数+1

mov si,0

mov cx,count

dec cx ;路径字节数

loop1:

mov al,byte ptr ds:[si+82h]

mov fpath[si],al ;保存路径

inc si

loop loop1

mov fpath[si],0 ;补0,以构成ASCIIZ串

;openf

lea dx,fpath

mov ax,3d02h ;打开,读写文件

int 21h

jc Err1

mov handle,ax ;将文件代号存入handle

;readf

mov bx,handle

mov cx,0ffffh ;读取的字节数

lea dx,buf ;数据缓冲区地址

mov ah,3fh

int 21h

;showf

lea dx,buf

mov ah,09h

int 21h

;closef

mov bx,handle

mov ah,3eh

int 21h

jc Err2

call enter ;输出回车

;stop

lea dx,endmsg

mov ah, 09h

int 21h

mov ah,8 ;无回显键盘输入

int 21h

jmp Exit

Err1: call Error1 ;文件路径错误提示

ret

Err2: call Error2 ;不能关闭提示

ret

Err3: call Error3 ;操作错,此程序中未用到ret

Exit:

ret

main endp

Error1 proc near ;文件路径错误提示

lea dx,errmsg1

mov ah, 09h

int 21h

ret

Error1 endp

Error2 proc near ;不能关闭提示

lea dx,errmsg2

mov ah, 09h

int 21h

ret

Error2 endp

Error3 proc near ;操作错,此程序中未用到lea dx,errmsg3

mov ah, 09h

int 21h

ret

Error3 endp

enter proc near ;输出回车符

mov ah,02h

mov dl,0dh

int 21h

mov ah,02h

mov dl,0ah

ret enter endp

code ends

end main 三.实验截图

相关文档