问题描述
- 关于8086汇编,int21写入文件不成功,文件为空
-
;rddisk.asm
;function:创建一个save.txt,并把0磁头0磁柱1扇区数据读取过去assume cs:code,ds:data
data segment
file db 'save.txt',0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0
mov es,ax
;创建文件save.txt
mov dx,offset file
mov cx,0
mov ah,3cH
int 21H;将0磁头,0柱面,1扇区读取到0:200内存区
mov bx,200H
mov ah,2mov al,1
mov ch,0
mov cl,1
mov dh,0
mov dl,80H
int 13H
;打开save.txt mov dx,offset file mov al,1 mov ah,3dH int 21h ;将0:200写入save.txt mov bx,0 mov ds,bx mov dx,200H mov bx,ax mov cx,256 mov ah,40H int 21H ;关闭文件 mov ah,3eH int 21H mov ax,4c00H int 21H
code ends
end start
解决方案
你在什么环境下运行的,如果是windows,根本不让你写扇区的。
如果你要看到效果,需要安装一个bochs之类的模拟器,里面运行dos 6.x等真正的dos系统。在你的虚拟磁盘上写文件。
解决方案二:
在windows下是不能,我装了个虚拟机,里面是dos7.10,可以读写扇区,但我读写文件不成功
解决方案三:
在dos6.22实机 上没有问题的,早年经常用。
解决方案四:
谢谢楼上两位,问题已经解决,创建文件后得到的文件号和打开文件得到的文件号不一样,也就是说,创建后就相当于打开了,
已经获得了一个文件号,不需再打开。如果再次打开那就操作的不是那个文件。
删除打开的代码 写入成功
时间: 2024-10-01 14:41:13