急求 汇编语言 文件拷贝

要求:1、通过人机对话获得源文件和目标文件的文件名(可以带文件路径);当拷贝不成功时,给出适当的出错信息。2、分析问题,给出程序流程图。3、适当的使用子程序。4、调试汇编... 要求:
1、通过人机对话获得源文件和目标文件的文件名(可以带文件路径);当拷贝不成功时,给出适当的出错信息。
2、分析问题,给出程序流程图。
3、适当的使用子程序。
4、调试汇编语言源程序。
需要原程序,及运行过程。
请发邮箱:398487961@qq.com
展开
 我来答
汤旺河边
推荐于2016-03-04 · TA获得超过2.9万个赞
知道大有可为答主
回答量:2675
采纳率:0%
帮助的人:3041万
展开全部
; 题目名称:复制文件
; 题目来源:http://zhidao.baidu.com/question/131059632.html
; 操作说明:在输入源文件名或目标文件名时,若直接回车,则结束程序,未有提示
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
Handle_File dw ?,? ;文件代号
Prompt_Str1 db 13,10,'Please input the path and name of source file: $'
Prompt_Str2 db 13,10,'Please input the path and name of target file: $'
Prompt_Str3 db 13,10,13,10,'The source file does not exist.$'
Prompt_Str4 db 13,10,13,10,'Invalid path.$'
Press_Key db 7,13,10,13,10,'The file has been copied.'
db 7,13,10,13,10,'Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
Input_Src: Output Prompt_Str1 ;提示输入源文件路径和文件名
lea dx,File_Name ;字符串缓冲区
mov ah,0ah
int 21h
lea si,File_Name[1]
lodsb ;读入实际输入的字符个数
test al,al
jz Exit_Proc ;若输入文件名时,直接回车,则结束程序
xor ah,ah
mov bx,ax
mov BYTE ptr [bx][si],0
mov dx,si
Open_File: mov ax,3d40h ;打开源文件
int 21h
jc $+8
mov Handle_File,ax ;保存源文件代号
jmp Input_Tar
cmp ax,5
jz Open_File ;若访问被拒绝,尝试再次打开文件
cmp ax,2
jnz $+12
Output Prompt_Str3 ;提示:文件不存在
jmp Input_Src
cmp ax,3
jnz $+12
Output Prompt_Str4 ;提示:无效的路径
jmp Input_Src
Input_Tar: Output Prompt_Str2 ;提示输入目标文件路径和文件名
lea dx,File_Name ;字符串缓冲区
mov ah,0ah
int 21h
lea si,File_Name[1]
lodsb ;读入实际输入的字符个数
test al,al
jz Exit_Proc ;若输入文件名时,直接回车,则结束程序
xor ah,ah
mov bx,ax
mov BYTE ptr [bx][si],0
mov dx,si
Create_File: xor cx,cx
mov ah,3ch ;建立目标文件
int 21h
jnc @@Next1
cmp ax,3
jnz Create_File
Output Prompt_Str4 ;提示:无效的路径
jmp Input_Tar
@@Next1: mov Handle_File[2],ax ;保存目标文件代号
lea dx,File_Name ;文件内容缓冲区
mov cx,0ffc0h ;预留32个字的堆栈空间
sub cx,dx ;设置读写一次文件内容的字节数
mov bp,cx ;暂存
Read_File: mov cx,bp
mov bx,Handle_File ;读取源文件代号
mov ah,3fh ;读文件内容
int 21h
jc Read_File ;读文件失败,尝试再读
test ax,ax
jz Close_File ;若实际读取的字节数为0,结束读写操作,关闭源文件和目标文件
mov bx,Handle_File[2] ;读取目标文件代号
mov cx,ax
Write_File: mov ah,40h ;写文件
int 21h
jc Write_File ;写文件失败,尝试再写
jmp Read_File
Close_File: mov bx,Handle_File ;读取源文件代号
mov ah,3eh ;关闭文件
int 21h
mov bx,Handle_File[2] ;读取目标文件代号
mov ah,3eh ;关闭文件
int 21h
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
File_Name db 81 ;字符串缓冲区
Code Ends
END Start ;编译到此结束
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式