Bochs加载VHD文件作为主引导设备

Posted 没头发的米糊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bochs加载VHD文件作为主引导设备相关的知识,希望对你有一定的参考价值。

最近在尝试通过8086汇编编写一个简单的主引导扇区,并在屏幕上打印一些字符。

相关的汇编代码(使用nasm)如下,已经写入到了VHD文件中,并在VirtualBox中完成测试。

mov ax, 0xb800
mov es, ax        ;将指向文本模式的显示缓冲区段地址放入es中

;设置数据段地址为当前代码段地址
mov ax, cs
mov ds, ax

;清空屏幕内容(防止某些Bios在jump至0x7c00前不会提前清理屏幕缓冲区)
mov cx, 2000
mov bx, 0
clear_screen:
mov byte [es:bx], 0
mov byte [es:bx+1], 0x07
add bx, 2
loop clear_screen


;显示字符串“Hello, World!”
mov cx, 0
;ax表示字符顺序,dx表示要写入的显示缓冲区地址
mov ax, 0
mov dx, 0
mov bx, 0
print_str1:
mov bx, ax
mov cl, [bx+str1+0x7c00]
mov bx, dx
mov byte [es:bx], cl
mov byte [es:bx+1], 0x07
add ax, 1
add dx, 2
;最后让cx自增,因为字符串以0结尾。
add cx, 1
loop print_str1

; 无限循环
infi:jmp near infi

str1 db "Hello, World!",0

jmp $

times 510-($-$$) db 0
db 0x55,0xaa

但是我们知道,VirtualBox并不能单步调试,因此需要在Bochs中加载VHD该文件作为主引导设备。

由于Bochs的设置比VirtualBox复杂得多,因此在这里进行记录。

首先,想要在Bochs中进行单步调试,要使用其安装目录下的bochsdbg.exe。

 启动后,作如下配置:

 

 

完成如上配置后, 记得将配置文件保存,下次通过“Load”重新加载。

 然后即可成功引导并启动VHD文件中的主引导扇区。

 如果启动过程中出现“could not open hard drive image file”,见这篇博客:

(36条消息) 《操作系统真xiang还原》阅读实践问题记录 bochs [HD ] ata0-0: could not open hard drive image file ‘hd60M.img‘_晰烟的博客-CSDN博客

以上是关于Bochs加载VHD文件作为主引导设备的主要内容,如果未能解决你的问题,请参考以下文章

Bochs加载VHD文件作为主引导设备

第三课 操作系统开发之x86模拟环境搭建

VHD文件怎么启动Win7系统

Linux系统启动过程

如何制作可引导的iso(不是cd或flash驱动器)来测试自己的引导加载程序?

Bochs调试Linux内核6 - 启动过程调试 - 跳到bootsect引导程序执行