一、为什么选择这两款虚拟机?
在 x86 汇编语言开发中,VirtualBox和Bochs是黄金搭档:
- VirtualBox提供完整的 x86 硬件虚拟化能力,支持图形化操作系统运行,适合运行需要图形输出的汇编程序(如引导扇区、简单 GUI 界面),直接观察程序执行结果。
- Bochs是专业级 x86 模拟器,内置强大的调试器,支持逐指令跟踪、寄存器监控、内存查看等底层调试功能,尤其适合操作系统内核开发和复杂汇编逻辑调试。
二、VirtualBox 安装指南(以 Windows 为例)
-
下载最新版本
访问VirtualBox 官网,点击 “Download VirtualBox”,选择对应主机系统的安装包(如 Windows 主机选择 “Windows hosts”)。
-
执行安装程序
- 双击下载的
.exe
文件,点击 “Next” 进入安装向导。 - 选择安装路径(建议默认),勾选 “Create a desktop shortcut” 方便访问。
- 安装过程中可能提示网络适配器配置,选择默认设置即可。
- 安装完成后,重启计算机以加载驱动程序。
- 双击下载的
-
创建虚拟机
- 打开 VirtualBox,点击 “控制” 按钮,然后点击“新建”按钮。
- 输入虚拟机名称(如 “NANJIU”),类型选择 “Linux”,版本选择 “Ubuntu (64-bit)”。
- 创建虚拟硬盘只需要20MB,还可以了(其实不是安装Linux系统)。
-
安装操作系统
- 不用安装(后面我会用解释的)
三、Bochs 安装与配置详解
(一)Windows 平台安装
-
下载预编译二进制包
访问Bochs 官网,进入 “See All Releases” 页面,选择 Windows 版本的安装包(Bochs-win64-2.6.11.exe
)。 -
图形化配置工具
- 安装完成后,运行
bochsdbg.exe
(带调试功能的版本)。 - 在图形化配置界面中:
- 磁盘设置:指定虚拟硬盘镜像路径(如E:\STUDY\study\虚拟系统\),类型选择 “vhd”。
- 启动选项:设置第一启动设备为 “Disk”,跳过软盘检查。
- 安装完成后,运行
保存以后启动就点 “bochsrc.bxrc”就可以了,就不用每次配置了。
看到这里大概大家都已经明白了吧,二个虚拟机用的是共同的虚拟盘,这样方便操作。
现在我来给大家介绍一下如何把我们生成的.bin文件写入到虚拟硬盘,当然我们是需要工具的,也就是李忠老师写的软件,我在之前的教程中发过,但是没有讲任何使用,因为在那个时候讲了也是白讲,因为用不到,所以没有介绍。现在我来补充一下
工具:网盘链接: https://pan.baidu.com/s/1pbWZ6f7F3lSruhjC4ORndg?pwd=difn 提取码: difn(点工具就是github)
fixvhdw这个有二个版本一个32,一个64位的,根据自己的需求选择(主要帮助您写入要执行的汇编.bin)
Nasmide同样也是有二个版本,根据自己需求选择(点开图片的文件,里面有打开源文件和创建,保存的操作,还要最重要的编译操作也集成了)
我这里有一个.asm程序,帮助大家练习写入 ,把下面的文件复制到编译软件上面编译,最后按照要求把.bin写入,然后打开虚拟机查看
;从1加到100并显示累加结果
jmp start
message db '1+2+3+...+100=' ;等于同于 db '1', '+','2','+','.','.','.','+','1','0','0','='
start:
mov ax, 0x7c0 ;设置数据段的段基地址
mov ds, ax
mov ax, 0xb800 ;设置附加段基址到显示缓冲区
mov es, ax
;以下显示字符串
mov si, message
mov di, 0
mov cx, start-message
showmsg:
mov al, [si]
mov [es:di], al
inc di
mov byte [es:di], 0x07
inc di
inc si
loop showmsg
;以下计算1到100的和
xor ax, ax ;AX用于存放累加结果
mov cx, 1
summate:
add ax, cx
inc cx
cmp cx, 100
jle summate
;以下分解累加和的每个数位
xor cx, cx ;设置栈段的段基地址
mov ss, cx
mov sp, cx
mov bx, 10
xor cx, cx
decompo:
inc cx
xor dx, dx
div bx
add dl, 0x30
push dx
cmp ax, 0
jne decompo
;以下显示各个数位
shownum:
pop dx
mov [es:di], dl
inc di
mov byte [es:di], 0x07
inc di
loop shownum
jmp $
times 510-($-$$) db 0
db 0x55, 0xaa
VirtualBox显示结果(最后结束直接关闭就可以了,也就是强制关机):
Bochs显示结果(操作方法:打开之前已经保存的配置 bochsrc.bxrc --> Start,然后再黑色的命令框输入:b 0x7c62 回车 ,最后输入:c,就是以下结果了):
补充,如果要退出在命令框输入:q ,如果不是命令关的就会虚拟机上锁,就会下次打不开了,解决方法就是找到自己虚拟盘的位置然后你就会发现多了一个文档,把他删掉就可以运行Bochs虚拟机了:
四、环境对比与最佳实践
特性 | VirtualBox | Bochs |
---|---|---|
硬件模拟精度 | 高(接近真实硬件) | 极高(可定制模拟参数) |
图形支持 | 完整(支持 3D 加速) | 有限(仅 VGA 模式) |
调试功能 | 基础(仅快照 / 日志) | 专业(指令级调试) |
适用场景 | 应用程序测试、GUI 开发 | 操作系统内核开发、汇编调试 |
建议工作流:
- 使用 VirtualBox 运行完整操作系统,验证汇编程序的实际执行效果。
- 在 Bochs 中启用调试器,对关键代码段进行逐指令分析。
- 结合
bximage
和dd
工具实现镜像文件在两个环境间的无缝迁移。
通过这种双环境配置,开发者可以兼顾高效开发与深度调试,显著提升 x86 汇编项目的开发效率。