totolo 发表于 2019-4-15 14:10:11

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

人造人 发表于 2019-4-15 23:41:27

先试试这个

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

totolo 发表于 2019-4-16 13:14:13

人造人 发表于 2019-4-15 23:41
先试试这个

感谢!
可以运行了。
但为什么只能打开asm呢,换成txt又不行了

人造人 发表于 2019-4-16 22:00:24

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

totolo 发表于 2019-4-17 22:39:12

人造人 发表于 2019-4-16 22:00
在我这边可以呀,你截个图看看

我这里还无法上传图片。。
程序运行后就显示字符串 error!

人造人 发表于 2019-4-17 22:50:07

totolo 发表于 2019-4-17 22:39
我这里还无法上传图片。。
程序运行后就显示字符串 error!

qq:1440332527
页: [1]
查看完整版本: 21号中断3dh错误