《操作系统真象还原》第二章 ---- 编写MBR主引导记录 初尝编写的快乐

书接上回安装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

成功完成初次尝试!
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张学恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值