OS实验 : 用NASM编写MBR引导程序,在BOCHS虚拟机中测试

实验环境

  • VMware Workstation Pro
  • ubuntu 20.10 amd64

实验步骤

安装Nasm

sudo apt install nasm

创建引导扇区

首先编写汇编代码。使用命令vim boot.asm创建 boot.asm 文件
写入以下代码:

org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510 - ($-$$) db 0
dw 0xaa55

输入 :wq保存并退出。再使用命令nasm boot.asm -o boot.bin生成 boot.bin 文件。

安装Bochs

使用命令sudo apt-get install vgabios bochs bochs-x bximage

使用bximage创建虚拟软盘

输入命令bximage,显示如下画面:
OS实验 : 用NASM编写MBR引导程序,在BOCHS虚拟机中测试
选择生成 fd(软盘),其他选择可以使用默认值,直接按回车。完成这一步后,当前目录就生成了软盘映像 a.img

将引导扇区写入软盘

使用命令dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

编写Bochs的配置文件

使用命令 vim bochsrc,将以下内容写入

megs: 32

romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/vgabios/vgabios.bin

floppya: 1_44=a.img, status=inserted

boot: floppy

log: bochsout.txt

mouse: enabled=0

启动Bochs 虚拟机(举有调试功能)

输入命令bochs -f bochsrc.进入后,返回终端,输入···c···,则会直接显示出 Hello,OS world
若想调试,可参考下表

查找和定位代码

行为 指令 举例
在某物理地址设置断点 b addr b 0x7c00
显示当前所有断点信息 info break info break
继续执行,直到遇上断点 c c
单步执行(n次) s n s 100
单步执行(遇到函数跳过) n n
反汇一段内存 u start end u 0x30400

查看寄存器

行为 指令 举例
查看所有寄存器 info cpu info cpu
查看通用寄存器 r r
查看段寄存器 sreg sreg
查看控制寄存器 creg creg
查看调试寄存器 dreg greg

查看内存

行为 指令 举例
查看内存物理地址内容 xp /nuf addr xp /40bx 0x9013e
查看线性地址内容 x /nuf addr x /40bx 0x13e

想要使用更多指令,可以参考8.15 Using Bochs internal debugger,或Bochs调试常用命令

上一篇:《操作系统真象还原》环境搭建


下一篇:Bochs 的调试命令