assembly 直接从DOS-BOX组件中的磁盘读取

fdx2calv  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(55)

我从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

字符串

bn31dyow

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做得更好?

相关问题