提问人:abobus228 提问时间:11/16/2023 更新时间:11/20/2023 访问量:45
在DOS-BOX程序集中直接从磁盘读取
Read directly from disk in DOS-BOX assembly
问:
我从DOS-BOX挂载到我的电脑上。然后我删除了这个文件夹中的一个文件,我的任务是恢复它。我有这个文件的字节掩码,所以我只需要直接从DOS-BOX的磁盘读取数据来查找这个掩码。但是我该怎么做呢?mount c c:\users\user\folder
我使用 int 13h,但结果是 512 个零字节,如果我在 DOS-BOX 中挂载的驱动器上,我怎么能找到磁盘号、段号。
.model tiny
.code
org 100h
Begin:
jmp Start
FName db 'myfile.txt',0
Count dw 512
position dw 0
Buf db 512 dup(?)
Start:
;-------------------------------------------------
;Read from disk to Buf
push cx
push dx
push ds
xor ax, ax
mov ds, ax
cld
mov ah, 02h ; Function code for reading disk sectors
mov al, 1 ; Number of sectors to read
mov ch, 0 ; Cylinder number (starting from 0)
mov cl, 2 ; Sector number (starting from 1)
mov dh, 0 ; Head number
mov dl, 02h ; Drive number
;xor bx, bx
;mov es, bx
lea bx, Buf ; Buffer to store the sector data
int 13h
pop ds
pop dx
pop cx
;--------------------------------------------------
;Write Buf to file
mov ah, 3ch
mov cx, 1
mov dx, offset FName
int 21h
mov bx, ax
mov ah, 42h
mov al, 0
mov cx, 0
mov dx, position
int 21h
MOV CX, Count
MOV DX, offset Buf
MOV ah, 40h
int 21h
mov ah, 3eh
int 21h
;-----------------------------------------------------
Exit:
mov ah, 4ch
xor al, al
int 21h
end Begin
答:
您的程序正在使用 BIOS。驱动器编号为 02h 的 ReadSector 函数 02h ()。所有未设置第 8 位的 BIOS 驱动器号都是指软盘驱动器。因此,您实际上是在请求访问系统上的第三个软盘驱动器。当然不是 DOSBox 挂载的 C: 驱动器。
此外,BIOS 上的函数将磁盘作为物理实体进行处理,而 DOSBox 为您挂载的目录成为逻辑 C: 驱动器。
DOS 允许您使用(读取)和(写入)在扇区级别处理逻辑驱动器。查看 http://www.techhelpmanual.com/565-int_25h_26h__absolute_disk_read_write.htmlint 13h
int 13h
c:\users\user\folder
int 25h
int 26h
我尝试使用DOS。带有 C: 的 DOS 驱动器编号为 2 的 AbsoluteDiskRead,但 DOSBox 不返回任何内容,甚至没有成功或失败的进位标志。坦率地说,我不认为它会起作用,尤其是知道 DOSBox 的创建者一再表示他们的模拟器应该只能运行旧的 DOS 游戏,仅此而已。也许衍生作品 DOSBox-X 做得更好?int 25h
下一个:如何解决当前出现的错误?
评论
imgmount