1. 制作真正的IPL

  1. IPL 启动程序装载器, 用来装载程序
  2. 分析代码
; haribote-ipl
; TAB=4ORG     0x7c00          ; このプログラムがどこに読み込まれるのか; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述JMP     entryDB      0x90DB      "HARIBOTE"      ; ブートセクタの名前を自由に書いてよい(8バイト)DW      512             ; 1セクタの大きさ(512にしなければいけない)DB      1               ; クラスタの大きさ(1セクタにしなければいけない)DW      1               ; FATがどこから始まるか(普通は1セクタ目からにする)DB      2               ; FATの個数(2にしなければいけない)DW      224             ; ルートディレクトリ領域の大きさ(普通は224エントリにする)DW      2880            ; このドライブの大きさ(2880セクタにしなければいけない)DB      0xf0            ; メディアのタイプ(0xf0にしなければいけない)DW      9               ; FAT領域の長さ(9セクタにしなければいけない)DW      18              ; 1トラックにいくつのセクタがあるか(18にしなければいけない)DW      2               ; ヘッドの数(2にしなければいけない)DD      0               ; パーティションを使ってないのでここは必ず0DD      2880            ; このドライブ大きさをもう一度書くDB      0,0,0x29        ; よくわからないけどこの値にしておくといいらしいDD      0xffffffff      ; たぶんボリュームシリアル番号DB      "HARIBOTEOS "   ; ディスクの名前(11バイト)DB      "FAT12   "      ; フォーマットの名前(8バイト)RESB    18              ; とりあえず18バイトあけておく; プログラム本体entry:MOV     AX,0            ; レジスタ初期化MOV     SS,AXMOV     SP,0x7c00MOV     DS,AX; ディスクを読むMOV     AX,0x0820MOV     ES,AXMOV     CH,0            ; シリンダ0MOV     DH,0            ; ヘッド0MOV     CL,2            ; セクタ2MOV     AH,0x02         ; AH=0x02 : ディスク読み込みMOV     AL,1            ; 1セクタMOV     BX,0MOV     DL,0x00         ; AドライブINT     0x13            ; ディスクBIOS呼び出しJC      error; 読み終わったけどとりあえずやることないので寝るfin:HLT                     ; 何かあるまでCPUを停止させるJMP     fin             ; 無限ループerror:MOV     SI,msg
putloop:MOV     AL,[SI]ADD     SI,1            ; SIに1を足すCMP     AL,0JE      finMOV     AH,0x0e         ; 一文字表示ファンクションMOV     BX,15           ; カラーコードINT     0x10            ; ビデオBIOS呼び出しJMP     putloop
msg:DB      0x0a, 0x0a      ; 改行を2つDB      "load error"DB      0x0a            ; 改行DB      0RESB    0x7dfe-$       ; 0x7dfeまでを0x00で埋める命令DB      0x55, 0xaa
  1. 我们这里主要分析下面这段代码

1.2 相应指令分析

  1. INT 0x13 实际上是BIOS 的19 号函数, 用来操作硬盘


    对照上面的说明, 我们可以发现, 代码中, 将AH 赋值为 0x02, 实际上是读盘操作, 读取 AL 个扇区,* 将读取数据写入到内存 【ES:BX】所指定的位置处*
    另外如果操作出现问题, 会将错误号码存入AH 中, 并将 CF(进位) 标志位标记为 TRUE

1.3 软盘驱动器的构造


ie, 一张软盘有80个柱面, 2 个磁头, 18 个扇区, 每个扇区 512 byte, 总容量 1440kb, 共计2880 个扇区

  1. 一般我们为了书写方便, 如果使用DS 段寄存器, 可以省略

2. 试错代码



这里我们使用SI 记录错误尝试的次数, 超过 5 次就显示 error 信息, 否则继续尝试, 需要注意的是, 由于AH 放置了错误信息, 在重新尝试的时候, 需要将其进行复位 AH = 0

3. 读到18扇区

  1. 上面的代码只是读取了 磁盘中的 2 号扇区, 利用相同的方式, 我们可以读取后面的扇区, 由于1 个柱面总共有 18 个扇区, 因此这里我们只读到 18 扇区, ie, 读取一个柱面

  2. 这里每次向后读一个扇区, 需要将段寄存器 ES 向后移动 0x0020, ie, 内存地址向后移动 0x200, (正好就是 512 byte)

  3. 实际上, 他也是借助了一个循环进行实现

4. 读入 10 个柱面


这里需要注意的是, 由于一个柱面上虽然只有 18 个扇区, 但是他有正反两面, 2 个磁头, 所以在循环的时候, 需要注意寄存器变量的切换工作

5. 着手开发操作系统

  1. 一般向一个空软盘保存文件的时候:

    1. 文件名会写在0x002600 以后的地方
    2. 文件的内容会写在0x004200 以后的地方

6. 从启动区执行操作系统

  1. 当需要指定执行的操作系统的代码的时候, 在相应的xx.nas 里面加入ORG 0xc200 指令 (0x8000 + 0x4200)

7. 确认操作系统的执行情况


下面给出了 设置显卡的一些说明

ie, 我们这里采用的是 vga 图形模式

8. 32bit 模式前期准备

  1. 如果使用了 32bit 模式, 就不能调用 BIOS 的相关功能了, 这是因为BIOS 是通过16bit机器语言编写的, 如果想要使用BIOS 实现一些功能, 最好全部都放在开头来实现, 一旦进入32bit 模式就不能再调用 BIOS 函数了

9. 开始导入C 语言

  1. 使用C 语言, 需要涉及相应的链接工作

[读书笔记]30 天自制操作系统 day3 进入32bit模式并导入C语言相关推荐

  1. 30天自制操作系统Day3

    一.内存分布图 二.启动区汇编代码 这段代码是启动区代码,启动区的代码会保存到0x7c00至0x7dff(ORG 0x7c00),0x7c00之前的区域存放着BIOS程序或让BIOS程序用来实现各种功 ...

  2. 30天自制操作系统 Day3

    BIOS的寄存器和磁盘 http://community.osdev.info/?(AT)BIOS 作者给的这个页面可能需要科学上网,访问不了.我的选择是暂时放弃T_T.反正作者写了我们在还页面上会看 ...

  3. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

    <30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...

  4. 《30天自制操作系统》笔记(04)——显示器256色

    <30天自制操作系统>笔记(04)--显示器256色 进度回顾 从最开始的(01)篇到上一篇为止,已经解决了开发环境问题和OS项目的顶层设计问题. 本篇做一个小练习:设置显卡显示256色. ...

  5. 《30天自制操作系统》笔记(09)——绘制窗口

    <30天自制操作系统>笔记(09)--绘制窗口 进度回顾 上一篇中介绍了图层式窗口管理的思路和算法.在此基础上,本篇就解决绘制窗口及其简单的优化问题. 这里稍微吐槽一下<30天自制操 ...

  6. 《30天自制操作系统》学习笔记--第好多天

    之前看<30天自制操作系统>,参考而成,和书中系统并不完全一致,是在原有基础上按照自己的习惯而成,由于水平和工作原因,未完成内存管理和文件系统,有兴趣者可以通过以下网址https://gi ...

  7. 《30天自制操作系统》-day3(MAC)

    第3天 进入32位模式并导入C语言 基本配置 汇编语言内容 文件 hanbote.nas ipl.nas Makefile 原因 用法 基本配置 设备:Macbookpro(13-inch,2018) ...

  8. 30天自制操作系统——第1天 从计算机结构到汇编程序入门

    落灰一学期的<30天自制操作系统>,希望能够利用大二最后这几个月完成操作系统的制作,以下是我阅读本书所记录的笔记以及学习过程,愿顺利完成. 1.先动手操作 (1)安装"二进制编辑 ...

  9. 为什么《30天自制操作系统》封面中的猫是两只尾巴

    刚刚在一社区,发了一贴,被指出一问题,询一高人,得一答案.这便是我没有关注到的封面上的那只猫,我想这也是很多读者没有关注到的.因为在我微博的200转发贴中,并没有人提到封面中的猫为何有两只尾巴.于是咨 ...

最新文章

  1. 返回手势导致页面卡死并且UI错乱的问题解决
  2. 6-java代码片段
  3. 教你 Shiro + SpringBoot 整合 JWT
  4. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-6.微信扫码登录回调本地域名映射工具Ngrock...
  5. 高并发高可用高性能的解决方案
  6. 初学者关于贝叶斯纳什均衡各类符号的一点理解
  7. matlab绘图答案,专题四 MATLAB绘图--专题测验【含答案】
  8. 腾讯地图手把手教你实现微信小程序路线规划
  9. tensor之维度转换
  10. 会议OA(会议排座送审)
  11. 不得不了解的HTTP协议
  12. java gui界面设计qq_Java swing界面开发(仿QQ登录界面)
  13. Oracle EBS中分类账和法人实体 的关系(有sql语句实例)
  14. shell一键自动化批量安装服务
  15. chrome浏览器被360流氓捆绑,如何解决?
  16. 京东数科商用智能机器人首次亮相2019CES
  17. 如何下载国家标准分幅影像地图
  18. 安装SQLnbsp;SERVERnbsp;2000最后提示“安装…
  19. 手写板比较(可能不该发到这里)
  20. hdu 3509 Buge's Fibonacci Number Problem

热门文章

  1. php提交后刷新父页面,jquery – php ajax表单提交没有刷新父页面
  2. 5G代时,华为手机超越苹果是大概率事情
  3. virtio net前端
  4. FantaVerse(梵塔世界)获国际风险基金 Draper Dragon投资
  5. 如何做公众号SEO,公众号排名优化呢?
  6. Flyway 入门教程
  7. 次世代3D游戏场景贴图绘制技巧,学起建模更简单!
  8. CVPR 2022大会主席、港科大教授权龙:计算机视觉的现状与未来
  9. 鸿蒙系统升级以后长什么样,华为鸿蒙系统长什么样,系统页面焕然一新
  10. 简述8086计算机工作原理,8086/8088CPU的基本结构与其工作原理