本文主要是介绍使用Virtualbox调试自制操作系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
自制操作系统,如果每次都用物理机调试,未免太慢了,《30天自制操作系统》里使用的PC模拟器QEMU软件,但是实际上,使用虚拟机是一个很不错的选择,功能强大,调试方便。
以下实现一个简单的hello world用例,代码来自《30天自制操作系统》。
1.生成镜像文件
; hello-os
; TAB=4ORG 0X7C00 ; 指明程序装载地址; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy codeJMP entryDB 0X90DB "HELLOIPL" ; 启动扇区名称,必须是8字节的,不满8字节就用0填满DW 512 ; 每个扇区(sector)大小(必须512字节)DB 1 ; 簇(cluster)大小(必须为1个扇区)DW 1 ; FAT起始位置(一般为第一个扇区)DB 2 ; FAT个数(必须为2)DW 224 ; 根目录大小(一般为224项)DW 2880 ; 该磁盘大小(必须为2880扇区1440*1024/512)软盘大小固定为1440kDB 0XF0 ; 磁盘类型(必须为0xf0)DW 9 ; FAT的长度(必须为9个扇区)DW 18 ; 一个磁道(track)有几个扇区(必须为18)DW 2 ; 磁头数(必须为2)DD 0 ; 不分区,必须为0DD 2880 ; 重写一次磁盘大小DB 0,0,0x29 ; 意义不明(固定)DD 0xffffffff ; (可能是)卷标号码DB "HELLO-OS " ; 磁盘的名称(必须为11字节,不足填空格)DB "FAT12 " ; 磁盘格式名称(必须是8字节,不足填空格)RESB 18 ; 先空出18字节;程序主体
entry:MOV AX,0 ; 初始化寄存器MOV SS,AX ;MOV SP,0X7C00MOV EX,AXMOV ES,AXMOV SI,msgputloop:MOV AL,[SI]ADD SI,1CMP AL,0JE fin;这段代码用来显示一个字符MOV AH,0x0e ; 显示一个文字MOV BX,15 ; 指定字符颜色INT 0x10 ; 调用显卡BIOS;循环JMP putloopfin:HAL ; 让CPU停止,等待指令JMP fin ; 无限循环msg:DB 0X0A,0X0A ; 换行两次DB "HELLO WORLD!"DB 0X0ADB 0RESB 0x7dfe-$ ; 用$可以提高程序健壮性 程序是从0x7c00开始的DB 0x55, 0xaa ; 软盘的第一个512扇区的最后两个字节必须是0x55aa,0x55aa代表这是一个启动程序
编译完成之后,生成.img文件。这个过程可以参考《30天自制操作系统》。如果是物理机,则需要把该镜像文件烧到软驱上,但是现在很少有软驱了。
2. 创建虚拟机
在VirtualBox里新建一个虚拟机,安装的操作系统选择other,并且不创建虚拟盘(后续手动加载软驱)。
3.加载镜像文件
然后加载刚刚生成的img文件,IDE控制器可以删除,因为暂时用的是软驱启动。
4.启动虚拟机
启动该虚拟机,就可以看到helloworld字样了。
DONE~
这篇关于使用Virtualbox调试自制操作系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!