这篇是一个复制文件的汇编程序,它的作用是将当前目录下的一个文件的内容复制到另一个文件中。
这个程序有以下几点需要注意的地方:
- 文件最大允许的字节数我设置为512 bytes,可根据实际情况自行变动
- 复制操作的源文件和目标文件的文件名都可以由用户输入。注意:源文件必须存在,否则报错;目标文件可以不必存在,不存在则创建,存在则覆盖。
- 注意dos中断的3c号创建文件功能的一些限制条件,需要将cx置为零,其含义是所创建文件的属性。需要特别关注。
下面给出源代码:
dseg segment
errmsg db 'error:cannot open file$'
input1 db 'source file:$'
input2 db 'destination file:$'
filename1 db 20,?,20 dup(0)
filename2 db 20,?,20 dup(0)
buff db 512 dup(?)
dseg ends
sseg segment stack
STKTOP db 80h dup(?)
sseg ends
cseg segment
assume ds:dseg,cs:cseg,ss:sseg
openfile proc
mov dx,si
mov ah,9h
int 21h ;提示字符串
mov dx,di
mov ah,0ah
int 21h ;输入源文件名
mov bl,[di+1]
xor bh,bh ;扩展为字
mov [bx+di+2],bh ;最后一位置0
lea dx,[di+2]
ret
openfile endp
newLine proc
push dx
push ax
mov dl,0ah
mov ah,02h
int 21h ;输出换行符
pop ax
pop dx
ret
newLine endp
START:
mov ax,dseg
mov ds,ax ;设置数据段
mov ax,sseg
mov ss,ax ;设置堆栈段
mov ax,length STKTOP
mov sp,ax ;设置栈顶指针
lea si,input1
lea di,filename1
call openfile
mov ax,3d00h ;读 模式打开文件
int 21h
jc err
call newLine
mov bx,ax
lea dx,buff
mov cx,512 ;最大读取字节数
mov ah,3fh
int 21h ;读取文件内容
mov cx,ax
mov ah,3eh
int 21h ;关闭文件
lea si,input2
lea di,filename2
call openfile
push cx
xor cx,cx
mov ah,3ch ;建立文件
int 21h
jc err
pop cx
call newLine
mov ax,3d01h
int 21h ;以写模式打开文件
jc err
mov bx,ax
lea dx,buff ;写内容
mov ah,40h
int 21h
mov ah,3eh
int 21h ;关闭文件
jmp end_
err:
call newLine
lea dx,errmsg
mov ah,9h
int 21h ;输出错误信息
end_:
mov ah,4ch
int 21h ;退出
cseg ends
end START
END
代码中写了许多注释,此处不再赘述。