zoukankan      html  css  js  c++  java
  • 30天自制操作系统 学习笔记3

    昨天刚吐槽完这个系统的启动区,只有个hello world,根本没起到“启动”的功能,今天在这一章就看到了“启动”的雏形。不得不说作者的风格我真的很喜欢。

    启动的关键是要把磁盘中操作系统的代码拷到指定的内存的位置上。所以作者一开始就讲了如何利用BIOS把内容从磁盘读到指定位置去。这个函数就不在这里赘述了。值得一提的是作者在这里写了关于flag的一些自己的看法。CPU有几个只有一位的寄存器。可以表示进位,也可以表示状态。

    还介绍了一下段寄存器。就是ES:BX这种方式表示地址,ES * 16 + BX

    写MOV CX,[1234]之类的语句时,默认的段寄存器是DS,所以记得要把DS预先指定为0。

    作者给出了读数据是出错后重读的代码,还有连续读N个扇区、N个柱面的方法。

    介绍了可用EQU赋值,比如说 CYLS EQU 0x0ff0

    其中讲了磁盘映像,我在这里纠结了一小会。这里说的是,将.nas文件用nask编译,输出.sys文件,再把.sys文件保存到磁盘映像里

    其中,保存到映像里,作者给出了解释:

    1. 使用 make install指令,将磁盘映像写入磁盘。

    2. 在windows里打开个磁盘,把.sys保存到磁盘上。

    3. 使用工具将磁盘备份为磁盘映像。

    而不借助磁盘和windows就得到最后的磁盘映像和文件,叫做保存到磁盘映像里。(edimg.exe就是可完成这项工作的工具之一)

    在这个地方我纠结了一下,前后的磁盘映像有什么不一样,都.img文件。其实前面的.img文件,包括第一天用二进制编辑器弄出来的.img文件都只是纯粹的机器码文件。而

    保存之后的磁盘映像,则应该是根据磁盘的布局作过一定调整后的文件,当然代码是不会变的,布局变了。(布局随磁盘的布局和性质变化)

    接下来讲了讲怎么用BIOS的函数设置显卡。以及在切换32位模式前,怎么保存一些画面模式、键盘状态等的信息(还要用16位的BIOS来设定)。

    最后讲了讲C语言以及如何在C语言程序里用汇编编写的函数。这个地方挺值得回看的。我现在才知道原来“链接”这一步是因为C语言有其局限性,所以有一些功能还是只能有汇编代码来实现。而这个链接则是把C语言的目标文件和这些用汇编写的目标文件,链接起来。

    程序里haribote.sys后半部分是C语言写的,而且为了调用C语言的程序,加了100行左右的代码,不过这些代码作者暂时让我们忽略,觉得是透明的就好。

  • 相关阅读:
    android权限大全
    Java反射经典实例
    SD卡的寄存器 SD总线协议 CRC算法
    ARM CortexM3 操作模式和特权级别
    使用 Printf via SWO/SWV 输出调试信息
    embOS实时操作系统 概览
    embOS实时操作系统 多任务调度
    android wifi hotspot
    Eclipse Java 智能提示
    ARM CortexM3 概览
  • 原文地址:https://www.cnblogs.com/HenryThinker/p/2990826.html
Copyright © 2011-2022 走看看