鱼C论坛

 找回密码
 立即注册
查看: 3005|回复: 5

21号中断3dh错误

[复制链接]
发表于 2019-4-15 14:10:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[bx], 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 [bx]
        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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-16 13:14:13 | 显示全部楼层

感谢!
可以运行了。
但为什么只能打开asm呢,换成txt又不行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[bx], 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 [bx]
        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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-17 22:39:12 | 显示全部楼层
人造人 发表于 2019-4-16 22:00
在我这边可以呀,你截个图看看

我这里还无法上传图片。。
程序运行后就显示字符串 error!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

qq:1440332527
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 07:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表