书接上回安装bochs后出现No bootable device 这回我们要自己写一个MBR。

首先我们再linux系统里面需要下载一个编译器,nasm

在命令行窗口输入sudo apt-get install nasm

bios中iGPU multimonitor没有_服务器

如果出现错误:无法找到软件包nasm,也不用急,我们只用换一次源即可,

bios中iGPU multimonitor没有_vim_02


点击左下角

bios中iGPU multimonitor没有_操作系统_03


点击软件和更新

bios中iGPU multimonitor没有_命令行_04


我这里已经换过了,从原来的换成了现在的主服务器,并且把源代码这一行勾上了。

换好以后我们重启虚拟机或者双系统。

再在命令行里面输入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字节 那应该是没有其他的问题了

如果有问题回来再检查一下指令

bios中iGPU multimonitor没有_命令行_05


在这个目录下面创建自己的mbr.S才是正确的。随后命令行里面输入这一段代码

dd if=/home/cooiboi/bochs/mbr.bin of=/home/cooiboi/bochs/hd60M.img bs=512 count=1 conv=notrunc

bios中iGPU multimonitor没有_linux_06


bios中iGPU multimonitor没有_服务器_07

出现这三行就对了。
进入安装目录下 老套路

bochs -f boshsrc.disk

只有通过这个才能显示1MBR ,如果直接在bin目录下输入boshs的话,对话框跳出来的是【2】而不是【6】。

bin/bochs -f bochsrc.disk 处于黑屏状态 (注意!如果操作正确,这时候的默认数字应该是6,随后我们按6)再按个c

bios中iGPU multimonitor没有_命令行_08


可以看见屏幕上打印了1 MBR 而不再是我们第一次安装后运行数字6出现的

No bootable device成功完成初次尝试!

bios中iGPU multimonitor没有_命令行_09