dosbox,可以用int 13h中断例程进行读写磁盘操作吗?
正在学习王爽的《汇编语言》一书,终于来到了最后一章:“17.4 应用int 13h中断例程对磁盘进行读写”。书中提供的代码示例(将当前屏幕的内容保存到磁盘上)运行不会报错,我寻思这也看不到效果,就想又将磁盘中的内容读出来,看它是不是真的干活了。结果运行仍然没有任何效果。
所以,dosbox中的int 13h到底能用吗?{:9_241:}
;17-4中的程序完全看不到运行效果
;实现:屏幕向上滚动一半
assume cs:code
data segment
db 4000 dup (0)
data ends
code segment
start:
mov ax,0b800h
mov es,ax
mov bx,0
;将显存保存到1~8扇区
mov al,8 ;操作扇区数量
mov ch,0 ;磁道号
mov cl,1 ;扇区号
mov dl,0 ;驱动器号
mov dh,0 ;磁头号
mov ah,3 ;功能号
int 13h
mov ax,0b800h
mov es,ax
mov bx,0
;将5~8扇区的内容显示到上半屏,达到上滚效果
mov al,4
mov ch,0
mov cl,5
mov dl,0
mov dh,0
mov ah,2
int 13h
mov ax,4c00h
int 21h
code ends
end start
在DOSBox中,可以使用int 13h中断例程进行读写磁盘操作。但是,由于DOSBox是一个模拟器,它模拟了一个DOS环境,而不是真实的硬件环境。因此,int 13h中断例程在DOSBox中的行为可能与真实的硬件环境有所不同。
在你提供的代码示例中,使用了int 13h中断例程将屏幕内容保存到磁盘上,并将5~8扇区的内容显示到上半屏,实现了屏幕向上滚动一半的效果。如果你没有看到任何效果,可能是由于以下几个原因:
1. 代码中的磁道号、扇区号、驱动器号、磁头号等参数设置不正确。请确保这些参数正确地指向你想要读写的磁盘位置。
2. DOSBox的配置文件中可能需要进行一些额外的设置才能正确模拟int 13h中断例程的行为。你可以查阅DOSBox的文档或者寻求相关的帮助来了解如何正确配置DOSBox以支持磁盘读写操作。
3. DOSBox的版本可能会影响int 13h中断例程的行为。你可以尝试更新到最新的DOSBox版本,或者尝试使用其他的DOS模拟器来进行测试。
总之,虽然在DOSBox中可以使用int 13h中断例程进行读写磁盘操作,但是由于DOSBox是一个模拟器,其行为可能与真实的硬件环境有所不同。如果你遇到了问题,请检查代码中的参数设置和DOSBox的配置,并尝试使用其他工具进行测试。 DOSBox是一个DOS模拟器,它模拟了一个完整的x86 PC,包括DOS和BIOS中断。因此,理论上,你应该可以在DOSBox中使用int 13h中断例程进行磁盘读写操作。然而,你可能会遇到一些问题。
首先,DOSBox模拟的是一个旧式的PC,它的硬件和现代PC可能有所不同。例如,它可能模拟的是一个有限的磁盘大小,或者它可能模拟的是一个特定的磁盘格式。这可能会影响你的代码的运行。
其次,DOSBox可能没有完全模拟所有的BIOS中断。虽然它模拟了大部分常用的中断,但是可能有一些较少使用的中断没有被模拟。这可能会导致你的代码无法正常运行。
最后,你的代码可能有一些错误,导致它无法正常运行。例如,你可能没有正确地设置所有的寄存器,或者你可能没有正确地处理错误。
你的代码看起来是在尝试将屏幕的内容保存到磁盘上,然后再读取出来。这是一个相对复杂的操作,可能会有很多地方出错。我建议你首先尝试一些更简单的操作,例如只读取或只写入磁盘,看看是否可以正常工作。
如果你仍然遇到问题,我建议你查看DOSBox的文档和论坛,看看是否有人遇到过类似的问题。你也可以尝试在其他的DOS模拟器上运行你的代码,看看是否可以正常工作。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案 问题回答:
在 DOSBox 中,可以使用 int 13h 中断例程进行读写磁盘操作。int 13h 是 BIOS 提供的磁盘操作中断例程,它提供了许多功能来读取和写入磁盘数据。
然而,你在运行示例代码时没有看到任何效果可能有以下几个原因:
1. 示例代码可能存在问题。请确保你正确地设置了寄存器的值,如扇区数量、磁道号、扇区号等。另外,也要注意驱动器号和磁头号是否设置正确。
2. 硬盘镜像文件可能没有正确挂载或者权限问题。请检查你的 DOSBox 配置,确保硬盘镜像文件正确设置并具有读写权限。
3. 示例代码可能不会直接在屏幕上显示结果。你可以尝试在屏幕上打印一些调试信息,以验证磁盘读写操作是否成功。
如果你想测试读取磁盘内容的功能,可以修改示例代码来读取指定扇区的内容,并将读取到的数据打印到屏幕上,或者保存到内存中后再进行其他操作。
总之,在 DOSBox 中,int 13h 中断例程是用于磁盘操作的有效方法,你可以通过正确设置寄存器的值来读取和写入磁盘数据。如果你遇到问题,请仔细检查代码和配置,并对代码进行调试和修改。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:} gpt入侵已经这么严重了吗?一发贴就一堆水文机器人。 int 13h 确实可以读写磁盘
dosbox 的 int 13h 很有可能不能用
你这个程序中的 dl 是 0,表示操作的是软盘
所以你得给你的 dosbox 配一个软盘,如果 dosbox 支持的话,^_^
这个代码我这边试了,确实能达到你预期的效果
页:
[1]