前言

上篇文章《自己动手写一个操作系统——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)相关推荐

  1. 自己动手写一个操作系统——MBR(1)

    文章目录 前言 MBR 1) 512 字节镜像 2) 0x55 和 0xAA qemu 运行 参考 前言 上篇<自己动手写一个操作系统--我们能做什么,我们需要做什么>我们介绍到 BIOS ...

  2. 自己动手写一个操作系统——MBR(4)_调试_elf_bin

    文章目录 前言 elf 文件 指定代码入口地址 添加调试信息 代码 检验 调试 小结 前言 通过 GDB 我们可以跟踪程序的执行, 并且能够看到寄存器的状态, 但是,上面这种调试方式,没有和代码对应起 ...

  3. 自己动手写一个操作系统——loader(1)

    前言 上篇文章中,我们写了一个简单的 loader 作为被加载的演示对象.我们知道 loader 是用来加载 kernel 的,今天我们就编写 loader 代码完成这件事情. 实模式下的内存地址 我 ...

  4. 自己动手写一个操作系统——我们能做什么,我们需要做什么

    文章目录 计算机启动流程 第一条指令 BIOS MBR loader kernel 总结 计算机启动流程 第一条指令 在开机的一瞬间,也就是上电的一瞬间,CPU 的 CS:IP 寄存器被硬件强制初始化 ...

  5. 写一个操作系统有多难?自制 os 极简教程

    不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了满足程序员们自带的成就感,还是为 ...

  6. (1)从1开始写一个操作系统

    第一章 前言 偶然间使用到了RTX51-tiny做一些东西,它是keil自带的51操作系统,以小巧占用资源少著称,这里不细谈它是如何实现的,反正是一个真正的基于时间片的多任务系统. 往往我们在使用单片 ...

  7. [从 0 开始写一个操作系统] 一、准备知识

    从 0 开始写一个操作系统 作者:解琛 时间:2020 年 8 月 29 日 从 0 开始写一个操作系统 一.准备知识 1.1 实现方案 1.2 gcc 1.2.1 AT&T 汇编基本语法 1 ...

  8. java 手编线程池_死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  9. 自己动手写一个印钞机 第四章

    2019独角兽企业重金招聘Python工程师标准>>> 作者:阿布? 未经本人允许禁止转载 ipython notebook git版本 目录章节地址: 自己动手写一个印钞机 第一章 ...

最新文章

  1. 手机WebAPP设计注意事项和解决方法
  2. RDS for MySQL 5.7 备份恢复为本地实例
  3. C++ 二分查找函数 lower_bound upper_bound
  4. TP、TN、FP、FN
  5. 第二次做HDOJ 1051
  6. 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(一)
  7. MacBooster清理除Mac大文件和旧文件
  8. Aliplayer的各种坑
  9. Xposed Installer框架v3.1.5 安卓版
  10. ORACLE数据库无法执行UPDATE
  11. ubuntu16.04使用umake安装pycharm-professional
  12. 第三部分 数据结构 -- 第四章 图论算法1374:铲雪车(snow)
  13. Unity3D-实现第一人称人物动作: 走,跑,跳,移动视角
  14. ASR项目实战-从源码开始构建Kaldi
  15. 同济大学核心学术刊物基本目录_党建丨清华大学建筑学院、同济大学建筑与城市规划学院研究生党支部联合举办“城乡二元关系与生态文明建设内涵”主题党日活动...
  16. 2006年最热门的职业
  17. 维嘉科技IPO被终止:年营收8亿 邱四军控制61%股权
  18. Python画图教程~海龟画图~turtle
  19. 基于FPGA视频图像处理系统设计
  20. 33学习笔记——描述统计分析3--数据的描述统计量

热门文章

  1. JQuery在IE中function ()报错函数未定义
  2. 2023全国特种作业操作证熔化焊接与热切割模拟考试试卷一[安考星]
  3. 六西格玛工具软件Minitab Workspace
  4. 自己动手做个智能小车(1)
  5. php多级审批功能,工作流定义:动态多级审批的应用场景?
  6. 对于单链表结构体中LinkList以及Lnode,*LinkList两种不同定义方式的个人理解
  7. IBM最新洞察:我们所熟知的通信服务时代已经结束
  8. # 代码质量控制和代码质量相关工具说明
  9. 集成电路/微电子/电子科学与技术 在IEEE上可以参考的期刊会议总结
  10. Kettle 使用资源库功能把ktr元数据统一存储到数据库中