;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,2
mov 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实机 上没有问题的,早年经常用。
谢谢楼上两位,问题已经解决,创建文件后得到的文件号和打开文件得到的文件号不一样,也就是说,创建后就相当于打开了,
已经获得了一个文件号,不需再打开。如果再次打开那就操作的不是那个文件。
删除打开的代码 写入成功