在DOS-BOX程序集中直接从磁盘读取

Read directly from disk in DOS-BOX assembly

提问人:abobus228 提问时间:11/16/2023 更新时间:11/20/2023 访问量:45

问:

我从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
组装 NASM DOS DOSBOX

评论

1赞 ecm 11/16/2023
DOSBox 不允许您访问扇区级别的主机文件系统。
2赞 Joachim Sauer 11/16/2023
是的,尝试在虚拟挂载的文件系统上尝试磁盘级文件系统交互似乎很愚蠢。使用“真实”磁盘(即磁盘映像),将其格式化为胖子,然后用于对其进行处理。然后,您就有机会在 dosbox 中与底层块存储进行交互。imgmount

答:

2赞 Sep Roland 11/20/2023 #1

您的程序正在使用 BIOS。驱动器编号为 02h 的 ReadSector 函数 02h ()。所有未设置第 8 位的 BIOS 驱动器号都是指软盘驱动器。因此,您实际上是在请求访问系统上的第三个软盘驱动器。当然不是 DOSBox 挂载的 C: 驱动器。
此外,BIOS 上的函数将磁盘作为物理实体进行处理,而 DOSBox 为您挂载的目录成为逻辑 C: 驱动器。
DOS 允许您使用(读取)和(写入)在扇区级别处理逻辑驱动器。查看 http://www.techhelpmanual.com/565-int_25h_26h__absolute_disk_read_write.html
int 13hint 13hc:\users\user\folderint 25hint 26h

我尝试使用DOS。带有 C: 的 DOS 驱动器编号为 2 的 AbsoluteDiskRead,但 DOSBox 不返回任何内容,甚至没有成功或失败的进位标志。坦率地说,我不认为它会起作用,尤其是知道 DOSBox 的创建者一再表示他们的模拟器应该只能运行旧的 DOS 游戏,仅此而已。也许衍生作品 DOSBox-X 做得更好?int 25h