21号中断3dh错误
本帖最后由 totolo 于 2019-4-15 14:10 编辑读D:\1.txt的内容,并输出到屏幕。但编译后提示文件打不开
file does not exist
D:\ASM\EMU8086\vdrive\D\1.txt
interrupt error:21h/3Dh:cannot open file
系统win8 x64
代码如下:
data segment
filehd dw ? ;储存文件代号
fileadd db 'D:\1.txt',0 ;文件地址
filesize db 255 dup(0) ;文件内容暂存区
echo db 'error!$' ;错误提示
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data ;打开文件
mov ds,ax
mov dx,offset fileadd
mov ah,3dh
mov al,0
int 21h
jc error ;如果打开错误,跳到error
mov bx,ax
mov dx,offset filesize ;读文件
mov cx,255
mov ah,3fh
mov al,0
int 21h
jc error
mov ah,3eh ;关闭文件
int 21h
error:
mov ah,9h
mov dx,offset echo
int 21h
end1:
mov ax,4c00h
int 21h
code ends
end start
先试试这个
assume cs:code, ds:data
data segment
fd dw 0
filename db 'main.asm', 0
buffer db 1024 dup(0)
err_msg db 'error!', 0
data ends
code segment
start:
; 打开文件
mov ax, data
mov ds, ax
mov dx, offset filename
mov ax, 3d00h
int 21h
jc print_error_message
mov fd, ax
; 读文件
mov bx, fd
mov dx, offset buffer
mov cx, 0ffffh
mov ah, 3fh
int 21h
jc print_error_message
mov bx, ax
mov buffer, 0
; 输出文件内容
mov bx, offset buffer
call print_string
; 关闭文件
mov bx, fd
mov ah, 3eh
int 21h
jmp done
print_error_message:
mov bx, offset err_msg
call print_string
done:
mov ax, 4c00h
int 21h
; 输出以0结尾的字符串
; 输入:BX -> 字符串
print_string:
push bx
@@:
mov al, byte ptr
cmp al, 0
je @f
push bx
mov bl, 07h
mov ah, 0eh
int 10h
pop bx
inc bx
jmp @b
@@:
pop bx
ret
code ends
end start 人造人 发表于 2019-4-15 23:41
先试试这个
感谢!
可以运行了。
但为什么只能打开asm呢,换成txt又不行了 totolo 发表于 2019-4-16 13:14
感谢!
可以运行了。
但为什么只能打开asm呢,换成txt又不行了
在我这边可以呀,你截个图看看
assume cs:code, ds:data
data segment
fd dw 0
filename db 'd:\masm615\1.txt', 0
buffer db 1024 dup(0)
err_msg db 'error!', 0
data ends
code segment
start:
; 打开文件
mov ax, data
mov ds, ax
mov dx, offset filename
mov ax, 3d00h
int 21h
jc print_error_message
mov fd, ax
; 读文件
mov bx, fd
mov dx, offset buffer
mov cx, 0ffffh
mov ah, 3fh
int 21h
jc print_error_message
mov bx, ax
mov buffer, 0
; 输出文件内容
mov bx, offset buffer
call print_string
; 关闭文件
mov bx, fd
mov ah, 3eh
int 21h
jmp done
print_error_message:
mov bx, offset err_msg
call print_string
done:
mov ax, 4c00h
int 21h
; 输出以0结尾的字符串
; 输入:BX -> 字符串
print_string:
push bx
@@:
mov al, byte ptr
cmp al, 0
je @f
push bx
mov bl, 07h
mov ah, 0eh
int 10h
pop bx
inc bx
jmp @b
@@:
pop bx
ret
code ends
end start 人造人 发表于 2019-4-16 22:00
在我这边可以呀,你截个图看看
我这里还无法上传图片。。
程序运行后就显示字符串 error! totolo 发表于 2019-4-17 22:39
我这里还无法上传图片。。
程序运行后就显示字符串 error!
qq:1440332527
页:
[1]