鱼C论坛

 找回密码
 立即注册
查看: 2408|回复: 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 | 显示全部楼层
先试试这个

  1. assume cs:code, ds:data

  2. data segment
  3.         fd dw 0
  4.         filename db 'main.asm', 0
  5.         buffer db 1024 dup(0)
  6.         err_msg db 'error!', 0
  7. data ends

  8. code segment
  9. start:
  10.         ; 打开文件
  11.         mov        ax, data
  12.         mov        ds, ax
  13.        
  14.         mov        dx, offset filename
  15.         mov        ax, 3d00h
  16.         int        21h
  17.         jc        print_error_message
  18.         mov        fd, ax
  19.        
  20.         ; 读文件
  21.         mov        bx, fd
  22.         mov        dx, offset buffer
  23.         mov        cx, 0ffffh
  24.         mov        ah, 3fh
  25.         int        21h
  26.         jc        print_error_message
  27.         mov        bx, ax
  28.         mov        buffer[bx], 0
  29.        
  30.         ; 输出文件内容
  31.         mov        bx, offset buffer
  32.         call        print_string
  33.        
  34.         ; 关闭文件
  35.         mov        bx, fd
  36.         mov        ah, 3eh
  37.         int        21h
  38.         jmp        done
  39.        
  40. print_error_message:
  41.         mov        bx, offset err_msg
  42.         call        print_string
  43.        
  44. done:
  45.         mov        ax, 4c00h
  46.         int        21h
  47.        
  48. ; 输出以0结尾的字符串
  49. ; 输入:BX -> 字符串
  50. print_string:
  51.         push        bx
  52. @@:
  53.         mov        al, byte ptr [bx]
  54.         cmp        al, 0
  55.         je        @f
  56.        
  57.         push        bx
  58.         mov        bl, 07h
  59.         mov        ah, 0eh
  60.         int        10h
  61.         pop        bx
  62.        
  63.         inc        bx
  64.         jmp        @b
  65. @@:
  66.         pop        bx
  67.         ret
  68.        
  69. code ends
  70. 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又不行了

在我这边可以呀,你截个图看看

  1. assume cs:code, ds:data

  2. data segment
  3.         fd dw 0
  4.         filename db 'd:\masm615\1.txt', 0
  5.         buffer db 1024 dup(0)
  6.         err_msg db 'error!', 0
  7. data ends

  8. code segment
  9. start:
  10.         ; 打开文件
  11.         mov        ax, data
  12.         mov        ds, ax
  13.        
  14.         mov        dx, offset filename
  15.         mov        ax, 3d00h
  16.         int        21h
  17.         jc        print_error_message
  18.         mov        fd, ax
  19.        
  20.         ; 读文件
  21.         mov        bx, fd
  22.         mov        dx, offset buffer
  23.         mov        cx, 0ffffh
  24.         mov        ah, 3fh
  25.         int        21h
  26.         jc        print_error_message
  27.         mov        bx, ax
  28.         mov        buffer[bx], 0
  29.        
  30.         ; 输出文件内容
  31.         mov        bx, offset buffer
  32.         call        print_string
  33.        
  34.         ; 关闭文件
  35.         mov        bx, fd
  36.         mov        ah, 3eh
  37.         int        21h
  38.         jmp        done
  39.        
  40. print_error_message:
  41.         mov        bx, offset err_msg
  42.         call        print_string
  43.        
  44. done:
  45.         mov        ax, 4c00h
  46.         int        21h
  47.        
  48. ; 输出以0结尾的字符串
  49. ; 输入:BX -> 字符串
  50. print_string:
  51.         push        bx
  52. @@:
  53.         mov        al, byte ptr [bx]
  54.         cmp        al, 0
  55.         je        @f
  56.        
  57.         push        bx
  58.         mov        bl, 07h
  59.         mov        ah, 0eh
  60.         int        10h
  61.         pop        bx
  62.        
  63.         inc        bx
  64.         jmp        @b
  65. @@:
  66.         pop        bx
  67.         ret
  68.        
  69. code ends
  70. 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-4-27 07:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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