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 文件。
使用命令sudo apt-get install vgabios bochs bochs-x bximage
输入命令bximage
,显示如下画面:
选择生成 fd(软盘),其他选择可以使用默认值,直接按回车。完成这一步后,当前目录就生成了软盘映像 a.img 。
使用命令dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
使用命令 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 -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调试常用命令