用BIOS和DOS的调用编程完成将一个文件复制到另一个文件中。要求文件名从键盘输入。
时间: 2023-06-17 20:07:19 浏览: 200
在BIOS和DOS环境下,可以使用中断调用来完成文件复制的任务。下面是一个示例程序,可以从键盘输入文件名,并将指定的文件复制到另一个文件中。
```assembly
.model tiny
.code
org 100h
start:
mov ax, @data
mov ds, ax
; 打印提示信息
mov ah, 09h
lea dx, prompt
int 21h
; 读取源文件名
mov ah, 0Ah
lea dx, src_filename
int 21h
; 读取目标文件名
mov ah, 0Ah
lea dx, dest_filename
int 21h
; 打开源文件
mov ah, 3Dh
lea dx, src_filename + 2
mov al, 0
int 21h
jc error_exit
mov bx, ax
; 创建目标文件
mov ah, 3Ch
lea dx, dest_filename + 2
mov cx, 0
int 21h
jc error_close_src
; 读取源文件内容并写入目标文件
mov ah, 3Fh
mov bx, ax
mov ah, 3Eh
mov cx, 100h
copy_loop:
mov ah, 3Fh
mov dx, buffer
int 21h
cmp ax, 0
je copy_done
mov ah, 40h
mov bx, dest_file_handle
int 21h
jnc copy_loop
copy_done:
; 关闭文件句柄
mov ah, 3Eh
mov bx, dest_file_handle
int 21h
mov ah, 3Eh
mov bx, src_file_handle
int 21h
; 打印成功信息
mov ah, 09h
lea dx, success_msg
int 21h
; 退出程序
mov ah, 4Ch
xor al, al
int 21h
error_close_src:
; 关闭源文件句柄
mov ah, 3Eh
mov bx, src_file_handle
int 21h
error_exit:
; 打印错误信息
mov ah, 09h
lea dx, error_msg
int 21h
; 退出程序
mov ah, 4Ch
mov al, 1
int 21h
; 数据段
.data
prompt db "请输入源文件名:$"
src_filename db 128, 0
dest_filename db 128, 0
buffer db 256
success_msg db "文件复制成功!$"
error_msg db "文件复制失败!$"
; 代码段末尾
end start
```
在上面的程序中,使用了以下中断调用:
- `int 21h / ah=09h`:打印字符串。
- `int 21h / ah=0Ah`:从键盘读取字符串。
- `int 21h / ah=3Dh`:打开文件。
- `int 21h / ah=3Ch`:创建文件。
- `int 21h / ah=3Fh`:读取文件内容。
- `int 21h / ah=40h`:写入文件内容。
- `int 21h / ah=3Eh`:关闭文件。
程序首先向用户提示输入源文件名,然后使用 `int 21h / ah=0Ah` 从键盘读取字符串。接着,程序再次提示用户输入目标文件名,并使用 `int 21h / ah=0Ah` 读取字符串。
接下来,程序使用 `int 21h / ah=3Dh` 打开源文件,并使用 `int 21h / ah=3Ch` 创建目标文件。然后,程序使用循环从源文件中读取数据,并使用 `int 21h / ah=40h` 将数据写入目标文件中。当读取到的数据长度为0时,说明文件内容已经全部复制完成,程序退出循环。
最后,程序使用 `int 21h / ah=3Eh` 关闭文件句柄,并向用户打印成功信息。如果在文件操作过程中发生错误,程序会跳转到 `error_exit` 标签处,向用户打印错误信息并退出程序。
阅读全文