工具准备:

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

Bz.exe是二进制编辑器

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

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

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

开发平台:windows

编写语言:C 和 汇编

操作系统开发中的困难

现在市面上众多的C编译器都是以开发Windows或Linux上的应用程序为前提而设计的,几乎从来没有人想过要用它们来开发其他的软件, 比如自己的操作系统。本次使用的也是Windows版的gcc为基础稍加改造而做成的,与gcc几乎没什么不同。或许也有为开发操作系统 而设计的C编译器,不过就算有,恐怕也只有开发操作系统的公司才会买,所以当然会很贵。这次我们用不了这么高价的软件。
因为这些原因, 我们只能靠开发应用程序用的C编译器想方设法编写出一个操作系统来。这实际上是在硬来,所以当中就会有很多不方便的地方。
就比如说printf{ “ hello\n” );吧,这个函数总是出现在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 )

Write your own operating system Day(1)的更多相关文章

  1. ORB-SLAM: A Versatile and Accurate Monocular SLAM System 笔记(一)

    ORB-SLAM: A Versatile and Accurate Monocular SLAM System Abstract 这篇文章提出了 ORB-SLAM,一个基于特征的单目SLAM系统,这 ...

  2. 【C#基础】System.Reflection (反射)

    在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于"自成一体"的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息.在System. ...

  3. 奇特的Local System权限(转载)

    转载自:http://mp.weixin.qq.com/s?__biz=MzA3NTM1MzE4Nw==&mid=202597764&idx=1&sn=0cef1a40fb3c ...

  4. C# System.Reflection (反射)

    在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于“自成一体”的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息. 在System.Reflectio ...

  5. UVA11400 Lighting System Design(DP)

    You are given the task to design a lighting system for a huge conference hall. After doing a lot of ...

  6. 如何在Computer下添加System Folder(续)

    之前的一篇博客如何在Computer下添加System Folder里提到需要每次都使用一个新的guid,否则再次在"HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...

  7. ORB-SLAM: A Versatile and Accurate Monocular SLAM System 笔记(二)

    4. 自动地图初始化 地图初始化的目标是两个帧之间相对位姿来三角化一系列的点云(riangulate an initial set of map points),这个操作是独立与场景且不需要人为的干预 ...

  8. Google File System翻译(转)

    摘要 我们设计实现了google文件系统,一个面向大规模分布式数据密集性应用的可扩展分布式文件系统.它运行在廉价的商品化硬件上提供容错功能,为大量的客户端提供高的整体性能. 尽管与现有的分布式文件系统 ...

  9. 计算机四级网络工程师--《操作系统(Operating System)》重点内容学习

    开篇语 今天开始看<操作系统>,没办法,计算机网络技术还算有点底子.至于操作系统要不是以前看过一些这方面的书籍,以及上学期学了单片机工作原理,我估计我真的是懵逼的!所幸,在网上找的233网 ...

随机推荐

  1. mongodb学习(入门。。。。。)

    db.xs.insert({name:zhangsan})   db:当前数据库  xs:学生集合(没有的话自动创建) show collections   显示当前数据库的集合名字 show dbs ...

  2. WordPress在Centos下Apache设置伪静态方法

    1.设置httpd.conf文件 1.1 添加或取消注释这段代码 LoadModule rewrite_module modules/mod_rewrite.so 1.2 运行httpd -M查看这个 ...

  3. 【Docker】基础学习及在.Net Core应用

    一.Docker基础 Docker 是一个开源的应用容器引擎,基于 Go 语言 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上 ...

  4. Eclipse Ctrl+Space 无法工作的问题

    Window->preference->Keys 然后找到content Assist,然后重新设置为自己想要的Short cut 就好了

  5. 【设计原则和编程技巧】单一职责原则 (Single Responsibility Principle, SRP)

    单一职责原则 (Single Responsibility Principle, SRP) 单一职责原则在设计模式中常被定义为“一个类应该只有一个发生变化的原因”,若我们有两个动机去改写一个方法,那这 ...

  6. 流程控制之 if 判断

    语法一:if 条件: 代码1 代码2 代码3 gender='female'age=18is_beautiful=True if gender == 'female' and age > 16 ...

  7. Vue利用canvas实现移动端手写板

    <template> <div class="hello"> <!--touchstart,touchmove,touchend,touchcance ...

  8. 通过Web API调用Action时各种类型输入参数传递值的方法

    本人微信公众号:微软动态CRM专家罗勇 ,回复280或者20180906可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . Dy ...

  9. C++ 重点关键字

    const 四种用法 1.修饰变量起到限定只读作用: void func(const int a, const string str) {...} const int* func(...) {...} ...

  10. WordCount结对项目

    合作者:201631062124,201631062423 代码地址:https://gitee.com/yryx/WordCount 作业地址:https://edu.cnblogs.com/cam ...