工具准备:

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. Linux,在不使用U盘的情况下使用wubi.exe程序在Win7上安装ubuntu-14.04.3版系统

    本文介绍如何在不使用U盘的情况下使用wubi.exe程序在Win7上安装ubuntu-14.04.3版系统. 花了一天的时间终于安装上了Ubuntu14.04,过程坎坷,是血泪史,开始报“cannot ...

  2. 我的第三个开源库GuaJiangViewDemo——中文文档

    GuaJiangViewDemo 欢迎Star 一个可以简单的刮刮奖View的封装 测试图 使用 1.在根目录上添加 maven { url 'https://jitpack.io' } 2.添加依赖 ...

  3. SpringBoot 之Actuator.

    一.Actuator 介绍 Actuator 是 SpringBoot 项目中一个非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api 请求来监管.审计.收集应用的运行情况. ...

  4. js实现多个倒计时并行 js拼团倒计时

    本文是对类似于拼团,多个商品每个都有各自的js倒计时,一开始接到接到这个需求也是头疼了一阵子,如果是在商品列表少的时候完全就可以写成死的,固定的变量,写几个定时器就ok了, 但是这次数据是活的,看一些 ...

  5. HTML5 Video player jQuery plugin

    <!DOCTYPE html> <html lang="en" > <head> <meta charset="utf-8&qu ...

  6. HTML5利用canvas,把多张图合并成一张图片

    需求分析,根据当前网页中的几张图片,在手机上长按,保存图片到相册或者发送给好友. drawCanvas(){ var self = this; var imgsrcArray = [ require( ...

  7. MySQL 常用指令小结

    l  创建数据库:CREATE DATABASE table_name; l  删除数据库:DROP DATABASE table_name; l  展示数据库:SHOW DATABASE; l  选 ...

  8. git submodule 删除及更新URL 转载的

    删除一个submodule 1.删除 .gitsubmodule中对应submodule的条目 2.删除 .git/config 中对应submodule的条目 3.执行 git rm --cache ...

  9. mysql安装出现问题(The service already exists)

    1.管理员身份运行cmd(系统win10) 2.输入命令cd /d F:\mysql-5.7.19-win32\bin(此为mysql要安装的目录) 3.输入安装命令mysqld install 出现 ...

  10. Java 环境部署之Idea :解决Idea 中gradle编译 war 包编码不对

    IDE进行Gradle操作,那么还需要设置IDE的参数.例如在IDEA中,需要打开File->Other Settings->Default Settings->Gradle,在Gr ...