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 )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值