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

2021/4/10 18:14:52

本文主要是介绍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,显示如下画面:
在这里插入图片描述
选择生成 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 addrb 0x7c00
显示当前所有断点信息info breakinfo break
继续执行,直到遇上断点cc
单步执行(n次)s ns 100
单步执行(遇到函数跳过)nn
反汇一段内存u start endu 0x30400

查看寄存器

行为指令举例
查看所有寄存器info cpuinfo cpu
查看通用寄存器rr
查看段寄存器sregsreg
查看控制寄存器cregcreg
查看调试寄存器dreggreg

查看内存

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

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



这篇关于OS实验 : 用NASM编写MBR引导程序,在BOCHS虚拟机中测试的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程