我从DOS-BOX挂载一个文件夹到我的计算机mount c c:\users\user\folder
上。然后我删除了这个文件夹中的一个文件,我的任务是恢复它。我有这个文件的字节掩码,所以我只需要直接从DOS-BOX中的磁盘读取数据来查找这个掩码。但是我怎么做呢?
我使用int 13 h,但结果是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
字符串
1条答案
按热度按时间bn31dyow1#
您的程序正在使用BIOS。ReadSectors函数02h(
int 13h
),驱动器编号为02h。所有没有设置第8位的BIOS驱动器编号都是指软盘驱动器。因此,您实际上是在请求访问系统上的第三个软盘驱动器。当然不是DOSBox安装的C:驱动器。此外,BIOS
int 13h
上的功能将磁盘作为物理实体处理,而DOSBox为您安装的c:\users\user\folder
目录则成为逻辑C:驱动器。DOS允许您使用
int 25h
(读)和int 26h
(写)在扇区级别上访问逻辑驱动器。参见http://www.techhelpmanual.com/565-int_25h_26h__absolute_disk_read_write.html我已经尝试使用DOS.绝对读取
int 25h
与DOS驱动器号2为C:,但DOSBox不返回任何东西,甚至没有一个进行标志的成功或失败.坦率地说,我不认为它会工作,特别是知道DOSBox的创建者一再表示,他们的模拟器应该只能运行旧的DOS游戏,仅此而已.也许,衍生工作DOSBox-X做得更好?