当前位置: 首页 > news >正文

编写MBR主引导记录

BIOS

检测,初始化硬件。挑一些重要的,能保证计算机能运行那些硬件的基本IO操作。

唤醒BIOS

唤醒BIOS需要知道其入口地址,在最后将跳转到0x7c00处
接电的一瞬间,cs:ip寄存器被初始化为0xF000:0xFFF0,所以等效地址是0xFFFF0(BIOS入口地址)

抓一张bochs图来分析

在这里插入图片描述

  • 第一个框:cs值(段基址)为0xf000,ip值(段内偏移地址)为0xfff0,组合出的地址是0xffff0(BIOS入口地址)
  • 第二个框:在内存0xffff0地址处是一条跳转指令,cpu根据该指令跳转至0xfe05b处(BIOS真正的地方)
  • 第三个框:接电强制将cs置为0xf000

MBR

BIOS最后的工作就是检验0盘0道1扇区的内容,因为mbr要离BIOS最近,

在检验过程中,若BIOS检验出该磁盘末尾两个字节是0x55和0xaa则认定其为MBR,便加载到物理地址0x7c00,然后跳转过去,即可开始执行MBR。

  1. MBR大小为512字节
  2. 第511以及512字节必须是0xaa,0x55,这是由于咱们模拟的是x86平台,所以采用小端序

编写MBR

;主引导程序
;----------------------------
SECTION MBR vstart=0x7c00   ;起始地址为0x7c00mov ax,csmov ds,ax               ;由于BIOS通过 0:0x7c00跳转MBR,所以此时cs为0,因此借他来初始化寄存器mov es,axmov ss,axmov fs,axmov sp,0x7c00;清屏利用0x06号子功能,上卷全部行,则可清屏
;------------------------
;INT 0x10     功能号:0x06   功能:上卷窗口
;------------------------
;输入:
;AH 功能号:0x06
;AL = 上卷行数(若为0则表示全部行,太适合我们辣)
;BH = 上卷行属性
;(CL,CH) = 窗口左上角的(X,Y)位置
;(DL,DH) = 窗口右下角的(X,Y)位置
;无返回值mov ax,0x600mov bx,0x700mov cx,0mov dx,0x184fint 0x10;;;;;;;;;;;下面三行获取光标位置 ;;;;;;;;;;;
;.get_cursor获取当前光标位置,并在光标位置打印字符mov ah,3mov bh,0int 0x10;;;;;;;;;;;获取光标位置结束 ;;;;;;;;;;;;;;;;;;;;;;打印字符串 ;;;;;;;;;;;;还是用10h中断,不过这次调用13号子功能打印字符串mov ax,messagemov bp,ax   ;es:bp为串首地址,es此时同cs一致;开头时已经为sreg初始化;光标位置要用到dx寄存器中内容,cx中的光标位置可huluemov cx,5mov ax,0x1301mov bx,0x2int 0x10;;;;;;;;;;;;   打印字符串结束   ;;;;;;;;;;;;;;;jmp $message db "1 MBR"times 510-($-$$) db 0db 0x55,0xaa
  1. 4~8行:

运行结果

请添加图片描述

CMD
mkdir OS
cd OS
vim mbr.S
nasm -I include/ -o loader.bin loader.S
sudo dd if=./mbr.bin of=/usr/local/hd60M.img bs=512 count=1 conv=notrunc
cd /usr/local
sudo bin/bochs -f bochsrc.disk
http://www.lryc.cn/news/221832.html

相关文章:

  • 从零开始搭建React+TypeScript+webpack开发环境-自定义配置化的模拟服务器
  • python 之字典的相关知识
  • 上下游系统对接的沟通与协作
  • pytest 的使用===谨记
  • Qt 4.8.6 的下载与安装
  • 图形推理 | 判断推理
  • npm的使用
  • Web服务器实战
  • 2021年电工杯数学建模B题光伏建筑一体化板块指数发展趋势分析及预测求解全过程论文及程序
  • pandas教程:Essential Functionality 索引 过滤 映射 排序
  • pyspark连接mysql数据库报错
  • HK WEB3 MONTH Polkadot Hong Kong 火热报名中!
  • “第六十三天”
  • 常用排序算法实现
  • 使用表单登录方法模拟登录通信人家园,要求发送登录请求后打印出来的用户名下的用户组类别
  • Redis 的缓存击穿,穿透,雪崩及其解决方案
  • JWT原理分析——JWT
  • Jprofiler/ VisualVM 定位内存溢出OOM
  • NOIP2023模拟13联测34 competition
  • Intel oneAPI笔记(2)--jupyter官方文档(oneAPI_Intro)学习笔记
  • 用 QT 开发软件会吃官司吗?
  • 远程运维用什么软件?可以保障更安全?
  • 数据结构与算法C语言版学习笔记(2)-线性表、顺序存储结构的线性表
  • 【vite】vite.defineConfig is not a function/npm无法安装第三方包问题
  • 234. 回文链表 --力扣 --JAVA
  • 【JAVA学习笔记】65 - 文件类,IO流--节点流、处理流、对象流、转换流、打印流
  • R语言 复习 习题图片
  • c语言 结构体 简单实例
  • 【ChatGPT】ChatGPT的自定义指令
  • 《哥德尔、艾舍尔、巴赫——集异璧之大成》阅读笔记1