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\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)的更多相关文章
- ORB-SLAM: A Versatile and Accurate Monocular SLAM System 笔记(一)
ORB-SLAM: A Versatile and Accurate Monocular SLAM System Abstract 这篇文章提出了 ORB-SLAM,一个基于特征的单目SLAM系统,这 ...
- 【C#基础】System.Reflection (反射)
在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于"自成一体"的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息.在System. ...
- 奇特的Local System权限(转载)
转载自:http://mp.weixin.qq.com/s?__biz=MzA3NTM1MzE4Nw==&mid=202597764&idx=1&sn=0cef1a40fb3c ...
- C# System.Reflection (反射)
在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于“自成一体”的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息. 在System.Reflectio ...
- 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 ...
- 如何在Computer下添加System Folder(续)
之前的一篇博客如何在Computer下添加System Folder里提到需要每次都使用一个新的guid,否则再次在"HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...
- ORB-SLAM: A Versatile and Accurate Monocular SLAM System 笔记(二)
4. 自动地图初始化 地图初始化的目标是两个帧之间相对位姿来三角化一系列的点云(riangulate an initial set of map points),这个操作是独立与场景且不需要人为的干预 ...
- Google File System翻译(转)
摘要 我们设计实现了google文件系统,一个面向大规模分布式数据密集性应用的可扩展分布式文件系统.它运行在廉价的商品化硬件上提供容错功能,为大量的客户端提供高的整体性能. 尽管与现有的分布式文件系统 ...
- 计算机四级网络工程师--《操作系统(Operating System)》重点内容学习
开篇语 今天开始看<操作系统>,没办法,计算机网络技术还算有点底子.至于操作系统要不是以前看过一些这方面的书籍,以及上学期学了单片机工作原理,我估计我真的是懵逼的!所幸,在网上找的233网 ...
随机推荐
- C#实现窗体全屏
方法一:设置窗体属性 //程序启动路径,与生成程序的exe文件在同一目录下 public String exePath = Application.StartupPath; //定义窗体宽高 ; ; ...
- C#图片裁切,生成新图片
/// 图片裁剪,生成新图,保存在同一目录下,名字加_new,格式1.png 新图1_new.png /// </summary> /// <param name="pic ...
- [leetcode](4.21)2. 按字典序排列最小的等效字符串
给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...
- 零基础学Python--------入门篇 第1章 初始Python
入门篇 第1章 初始Python 1.1 Pyhton 概述 1.1.1 了解 Python Python,本义是指“蟒蛇”.1989年,荷兰人Guido van Rossum发明了一种面向对象的 ...
- Linux系统使用
linux(操作系统的内核) 浏览器功能:(内核的解释) 各个浏览器 实现的方式不一样 呈现内容 //解析内容和样式 用—webkit— (内核)解析 实现交互逻辑 v8 引擎 (内核) 实现 =&g ...
- 当view为wrap_conten时获取一个view的具体宽高
int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec. ...
- python调用C程序代码
DHT11的驱动使用C语言编写 然后用python调用C的程序 显示温湿度 pycall.py文件如下: #!/usr/bin/env python # -*- coding:utf-8 -*- ...
- memset的用法
memset的功能是将一块内存中的内容以单个字节逐个拷贝的方式放到指定的内存中去. 如memset(dp,0,sizeof(dp))其中dp为一个int型数组,因为int为4个字节,那么每一个字节的位 ...
- LeetCode算法题-Average of Levels in Binary Tree(Java实现)
这是悦乐书的第277次更新,第293篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第145题(顺位题号是637).给定一个非空二叉树,以数组的形式返回每一层节点值之和的平 ...
- Linux Collection:系统信息和配置
PAS Linux系统配置相关文件 /etc 目录中是系统和各类软件的配置文件 /var/log 系统日志 /proc 系统运行信息 PAS /boot空间不足 查看内核 dpkg --get-sel ...