• Write your own operating system Day(1)


    工具准备:

    VirtualBox.exe是一个免费的轻巧的虚拟机

    Bz.exe是二进制编辑器

    NASM则是用来编译汇编语言的,具体使用方法自行百度

    HZK16.fnt 中文GB2312的二进制点阵文件

    QEMU软盘模拟器 加载BIOS程序到时候会用到

    开发平台:windows

    编写语言:C 和 汇编

    操作系统开发中的困难


    现在市面上众多的C编译器都是以开发Windows或Linux上的应用程序为前提而设计的,几乎从来没有人想过要用它们来开发其他的软件, 比如自己的操作系统。本次使用的也是Windows版的gcc为基础稍加改造而做成的,与gcc几乎没什么不同。或许也有为开发操作系统 而设计的C编译器,不过就算有,恐怕也只有开发操作系统的公司才会买,所以当然会很贵。这次我们用不了这么高价的软件。
    因为这些原因, 我们只能靠开发应用程序用的C编译器想方设法编写出一个操作系统来。这实际上是在硬来,所以当中就会有很多不方便的地方。
    就比如说printf{ “ hello ” );吧,这个函数总是出现在C语言教科书的第一章,但我们现在就连它也无法使用。为什么呢?因为printf“这个函数是以操作系统提供的功能为前提编写的, 而我们最开始的操作系统可是什么功能都没有。因此,如果我们硬要执行这个函数的话,CPU会发生 一般保护性异常,直接罢工(蓝屏啦)。刚开始的时候不仅是printf, 几乎所有的函数都无法使用。

    顺便插一句,在开发操作系统时不会受到限制的语言大概就只有汇编语言了。还是汇编语 言最厉害。

    首先先下载个BZ工具Bz.exe打开然后开始嗨了:记得文件另存为helloos.img

     配置bat文件信息略过一万字,然后启动QEMU加载编写的img文件

     

     汇编语言中的MOV可以简单理解为“赋值”

    “MOV SS,AX”就相当于“SS=AX;”

    代表性的寄存器8个:

    AX-accumulator,累加寄存器

    CX一counter,计数寄存器

    DX一一data,数据寄存器
    BX一base,基址寄存器
    SP-stack pointer,栈指针寄存器
    BP-一-base pointer,基址指针寄存器
    SI一-source index,源变址寄存器
    DI一--destination index,目的变址寄存器

     另外八个寄存器

    AL-------累加寄存器低位accumulator low
    CL-------记数寄存器低位counter low
    DL-------数据寄存器低位data low
    BL-------基址寄存器低位base low
    AH-------累加寄存器高位accumulator high
    CH-------记数寄存器高位counter high
    DH------数据寄存器高位data high
    BH-------基址寄存器高位base high

    AX,CX,DX,BX ...CPU寄存器好久之前都是8位加X(extend)扩展成16位寄存器了。

    EAX,ECX,EDX,EBX,ESI,ESP,EBP,EDI... 在16位寄存器前面加个E就是32位寄存器了,就是32位的CPU,只能存储32字节数据

    段寄存器:

    BS一一附加段寄存器(extra segment)

    CS一一代码段寄存器(code segment )

    SS一一栈段寄存器(stack segment )

    DS一一数据段寄存器(data segment)

    FS一一没有名称(segment part 2 )

    GS一一没有名称(segment part 3 )

  • 相关阅读:
    「BJOI2018」治疗之雨
    「NOIP2016」换教室
    「HNOI2015」亚瑟王
    2019/9/15 四校联训
    【AtCoder】 ARC 097
    【AtCoder】 ARC 098
    【AtCoder】 ARC 099
    【AtCoder】 ARC 100
    React:JS中的this和箭头函数
    React:styled-components
  • 原文地址:https://www.cnblogs.com/jackzz/p/10353643.html
Copyright © 2020-2023  润新知