汇编语言:文件复制源码

这篇是一个复制文件的汇编程序,它的作用是将当前目录下的一个文件的内容复制到另一个文件中。

这个程序有以下几点需要注意的地方:

  • 文件最大允许的字节数我设置为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

代码中写了许多注释,此处不再赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值