自己动手写一个操作系统——MBR(2)
前言
上篇文章《自己动手写一个操作系统——MBR(1)》,我们使用 dd 生成了一个 512 字节的镜像,并用 vim 将其最后两个字节修改成了 55 AA,以此来完成了 MBR 的构建。这种办法终归上不了台面,而且还需要手动操作,无法纳入自动化编译工程中。今天,我们就介绍另外一种办法来完成这件事情。
代码
首先,编写一份汇编代码 mbr.S
.global _start_start:jmp _start.org 0x1fe.byte 0x55, 0xAA
Makefile
OUTPUT=outputall: cleanas --32 -o ${OUTPUT}/mbr.o mbr.S # 汇编ld -m elf_i386 ${OUTPUT}/mbr.o -o ${OUTPUT}/mbr.elf # 链接objcopy -O binary ${OUTPUT}/mbr.elf ${OUTPUT}/mbr.bin # elf --> bindd if=${OUTPUT}/mbr.bin of=${OUTPUT}/mbr.img conv=notrunc # bin --> imgclean:-rm ${OUTPUT}/*run:qemu-system-i386 -daemonize -m 128M -drive file=${OUTPUT}/mbr.img,index=0,media=disk,format=raw \#-s -S
然后执行 make 就 OK 了。
检查一下
org
org 的功能是告诉编译器:“嘿,老兄,你帮我把后面所有数据(指令和数据)的地址以 xxxx 为起始开始编吧”。
自己动手写一个操作系统——MBR(2)相关推荐
- 自己动手写一个操作系统——MBR(1)
文章目录 前言 MBR 1) 512 字节镜像 2) 0x55 和 0xAA qemu 运行 参考 前言 上篇<自己动手写一个操作系统--我们能做什么,我们需要做什么>我们介绍到 BIOS ...
- 自己动手写一个操作系统——MBR(4)_调试_elf_bin
文章目录 前言 elf 文件 指定代码入口地址 添加调试信息 代码 检验 调试 小结 前言 通过 GDB 我们可以跟踪程序的执行, 并且能够看到寄存器的状态, 但是,上面这种调试方式,没有和代码对应起 ...
- 自己动手写一个操作系统——loader(1)
前言 上篇文章中,我们写了一个简单的 loader 作为被加载的演示对象.我们知道 loader 是用来加载 kernel 的,今天我们就编写 loader 代码完成这件事情. 实模式下的内存地址 我 ...
- 自己动手写一个操作系统——我们能做什么,我们需要做什么
文章目录 计算机启动流程 第一条指令 BIOS MBR loader kernel 总结 计算机启动流程 第一条指令 在开机的一瞬间,也就是上电的一瞬间,CPU 的 CS:IP 寄存器被硬件强制初始化 ...
- 写一个操作系统有多难?自制 os 极简教程
不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了满足程序员们自带的成就感,还是为 ...
- (1)从1开始写一个操作系统
第一章 前言 偶然间使用到了RTX51-tiny做一些东西,它是keil自带的51操作系统,以小巧占用资源少著称,这里不细谈它是如何实现的,反正是一个真正的基于时间片的多任务系统. 往往我们在使用单片 ...
- [从 0 开始写一个操作系统] 一、准备知识
从 0 开始写一个操作系统 作者:解琛 时间:2020 年 8 月 29 日 从 0 开始写一个操作系统 一.准备知识 1.1 实现方案 1.2 gcc 1.2.1 AT&T 汇编基本语法 1 ...
- java 手编线程池_死磕 java线程系列之自己动手写一个线程池
欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...
- 自己动手写一个印钞机 第四章
2019独角兽企业重金招聘Python工程师标准>>> 作者:阿布? 未经本人允许禁止转载 ipython notebook git版本 目录章节地址: 自己动手写一个印钞机 第一章 ...
最新文章
- 手机WebAPP设计注意事项和解决方法
- RDS for MySQL 5.7 备份恢复为本地实例
- C++ 二分查找函数 lower_bound upper_bound
- TP、TN、FP、FN
- 第二次做HDOJ 1051
- 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(一)
- MacBooster清理除Mac大文件和旧文件
- Aliplayer的各种坑
- Xposed Installer框架v3.1.5 安卓版
- ORACLE数据库无法执行UPDATE
- ubuntu16.04使用umake安装pycharm-professional
- 第三部分 数据结构 -- 第四章 图论算法1374:铲雪车(snow)
- Unity3D-实现第一人称人物动作: 走,跑,跳,移动视角
- ASR项目实战-从源码开始构建Kaldi
- 同济大学核心学术刊物基本目录_党建丨清华大学建筑学院、同济大学建筑与城市规划学院研究生党支部联合举办“城乡二元关系与生态文明建设内涵”主题党日活动...
- 2006年最热门的职业
- 维嘉科技IPO被终止:年营收8亿 邱四军控制61%股权
- Python画图教程~海龟画图~turtle
- 基于FPGA视频图像处理系统设计
- 33学习笔记——描述统计分析3--数据的描述统计量
热门文章
- JQuery在IE中function ()报错函数未定义
- 2023全国特种作业操作证熔化焊接与热切割模拟考试试卷一[安考星]
- 六西格玛工具软件Minitab Workspace
- 自己动手做个智能小车(1)
- php多级审批功能,工作流定义:动态多级审批的应用场景?
- 对于单链表结构体中LinkList以及Lnode,*LinkList两种不同定义方式的个人理解
- IBM最新洞察:我们所熟知的通信服务时代已经结束
- # 代码质量控制和代码质量相关工具说明
- 集成电路/微电子/电子科学与技术 在IEEE上可以参考的期刊会议总结
- Kettle 使用资源库功能把ktr元数据统一存储到数据库中