书接上回安装bochs后出现No bootable device 这回我们要自己写一个MBR。
首先我们再linux系统里面需要下载一个编译器,nasm
在命令行窗口输入sudo apt-get install nasm
如果出现错误:无法找到软件包nasm,也不用急,我们只用换一次源即可,
点击左下角
点击软件和更新
我这里已经换过了,从原来的换成了现在的主服务器,并且把源代码这一行勾上了。
换好以后我们重启虚拟机或者双系统。
再在命令行里面输入sudo apt-get upgrade
这个我感觉是更新一下软件包一类的
然后再 sudo apt-get install nasm
这样应该就能完成了。 下一步就是编辑我们的MBR,这一步一定要记住去自己安装bochs的bin目录下执行,否则运行不了的。
有什么编译器就用什么编译器,比如我用的就是vim,
我就先vim mbr.S
再把下面这个代码输入进去,保存,编译。
SECTION MBR vstart=0x7c00 ;起始地址编译在0x7c00
mov ax,cs
mov ds,ax
mov es,ax
mov ss,ax
mov fs,ax
mov sp,0x7c00
;这个时候 ds = es = ss = 0 栈指针指向MBR开始位置
;ah = 0x06 al = 0x00 想要调用int 0x06的BIOS提供的中断对应的函数 即向上移动即完成清屏功能
;cx dx 分别存储左上角与右下角的左边 详情看int 0x06函数调用
mov ax,0x600
mov bx,0x700
mov cx,0
mov dx,0x184f
;调用BIOS中断
int 0x10
mov ah,3
mov bh,0
;获取光标位置 需要打印信息
int 0x10
mov ax,message
mov bp,ax
mov cx,5
mov ax,0x1301
mov bx,0x71;白底蓝字好cooi
int 0x10 ;写字符串
jmp $ ;无限循环 一直跳转到当前命令位置
;字符串声明 db == define byte dw == define word ascii一个字符占一个字节
message db "1 MBR"
;预留两个字节 其余空余的全部用0填满 为使检测当前扇区最后两字节为0x55 0xaa 检测是否为有效扇区
;510 = 512字节-2预留字节 再减去(当前位置偏移量-段开始位置偏移量)求出来的是剩余空间
times 510 - ($ - $$) db 0
db 0x55,0xaa
大家把这个复制进去就行,ctrl+shift+v 才能复制到虚拟机里面。
保存后我们开始编译。
编译时输入指令
nasm -o mbr.bin mbr.S
如果没有报错的话 可以看到你编译的文件夹中多了一个
mbr.bin的文件
我其实觉得书上有一句话写的特别特别好
就是 对于一个新事物的掌握 本质上是给了一个能够说服自己的理由 能够自圆其说 这就够了
之后我们再用指令ls -l 看看当前目录下文件 和文件的属性
发现也恰好是我们要求的512字节 那应该是没有其他的问题了
如果有问题回来再检查一下指令
在这个目录下面创建自己的mbr.S才是正确的。随后命令行里面输入这一段代码
dd if=/home/cooiboi/bochs/mbr.bin of=/home/cooiboi/bochs/hd60M.img bs=512 count=1 conv=notrunc
出现这三行就对了。
进入安装目录下 老套路
bochs -f boshsrc.disk
只有通过这个才能显示1MBR ,如果直接在bin目录下输入boshs的话,对话框跳出来的是【2】而不是【6】。
bin/bochs -f bochsrc.disk 处于黑屏状态 (注意!如果操作正确,这时候的默认数字应该是6,随后我们按6)再按个c
可以看见屏幕上打印了1 MBR 而不再是我们第一次安装后运行数字6出现的
No bootable device成功完成初次尝试!