《汇编语言》- 读书笔记 - 第17章-外传之 DOSBox-X 调用 int 13 读写磁盘
- 总结
- dosbox-x.conf
- 不完美
- 读取成功
- 写入成功
- 参考资料
总结
DOSBox 中访问 int 13h
始终没反应。网上查了下有人说是没支持,建议使用 DOSBox-X
经过无数遍尝试后:
环境 | 状态 |
---|---|
Win11:DOSBox | 失败 |
Win11:DOSBox-X | 失败 |
Oracle VM VirtualBox:DOS | 失败 |
VMWare:DOS | 失败 |
VMWare:XP | 失败 |
VMWare:XP:DOSBox | 失败 |
VMWare:XP:DOSBox-X | 成功 但不完美 |
于是接下来我进入虚拟机
中的XP
系统使用 DOSBox-X
测试结果。
DOSBox-X 下载连接
EditPlus 文字编辑器 v5.4 汉化特别免费绿色版
Editplus 语法高亮文件
WinHex v21.0 绿色汉化特别版(无需注册)
dosbox-x.conf
这是我的设置,启动时自动挂载。
[autoexec]
# 挂载虚拟机XP中的 c:\masm 目录为 dosbox-x 中 DOS 系统的 c 盘
# 为了方便我把 masm,link,ml 等工具放在了 c:\tools 并追加到环境变量中
# 设置完成后自动切到 c 盘
mount c c:\masm
set PATH=%PATH%;c:\tools;
c:
# 挂载软盘镜像为 A 盘
IMGMOUNT A C:\masm\A.flp -t floppy
不完美
每回第一次调用 int 13
都会失败,需要刷新一下驱动器,第二次才能成功。
后续再多次读写,也是成功的。
奇怪的时,在第一次调用之前,我先刷新驱动器并不起作用。
比如:
assume cs:code
code segmentstart: mov ax,0mov es,axmov bx,200hmov al,1 ; 读取的扇区数mov dl,0 ; A 盘 mov dh,0 ; 磁头(面)mOV ch,0 ; 磁道号mov cl,1 ; 扇区号mov ah,2 ; 功能03H 写扇区int 13h ; 调用“直接磁盘服务”ok: mov ax,4c00hint 21h
code ends
end start
第一次读取返回结果: ah=06
软盘取出。
刷新驱动器(我挂载的是A盘),后再次执行就好了。
读取成功
读取前查看一下目标内存区域,是没有数据的。
调用后 AH=00h
表示成功。
此时的内存中正是软盘启动扇区的数据。
再用 WinHex
查看软盘镜像文件,对比读取到的内容。
写入成功
调用后 AH=00h
表示成功。
再直接用 WinHex
查看软盘镜像文件,正是刚才屏幕上的内容。
参考资料
《汇编语言》- 读书笔记 - 第17章-使用 BIOS 进行键盘输入和磁盘读写
FatFs 之三 FAT文件系统基础、FAT 数据格式、引导、编码