d153b1b2bcc1cb2e766fa0090cb362d1.png

这是一个非常简单的demo性质的操作系统,可以称之为操作系统是因为已经实现了多任务以及任务切换:这可以说是操作系统最核心的功能。

8086sos的实现仅仅使用了300行汇编代码,运行在MBR中:这是BIOS读取并执行的第一个程序。虽然简单,然而却足够让人了解很多基本概念,包括汇编、寄存器、寻址、BIOS、中断、多任务,任务切换。

你可以使用bochs模拟器进行测试,这是一个强大的开源x86模拟器,模拟了包括x86处理器、BIOS、存储器和各类硬件外设,还可以进行单步调试。

8086sos运行起来之后,会进行两个任务taskA和taskB的切换,通过键盘中断来进行任务的切换,为什么不实用时钟中断?因为...我没有调通8086模式下的时钟中断(捂脸...),BIOS中断相关的资料实在太少。由于这只是一个简单的demo,而且键盘中断可以达到同样的演示效果,并不影响对系统本质的理解。在实验中按下任意一个按键即可触发键盘中断,中断函数中会执行任务切换的操作。

460c3323db4c7457e534df76c0794199.png

关于汇编的学习教程,推荐王爽的《汇编语言》。8086作为X86处理器系列的鼻祖,当前全世界运行在所有PC和服务器上的X64,我们依然可以看到8086的影子,其寄存器、寻址方式和8086仍然有着一定的一致性。理解8086对于后续的X86的学习仍然具有相当大的帮助。虽然目前已经几乎没有人会自己写汇编语言了,然而汇编作为计算机体系的最底层,理解汇编,对硬件掌握一定程度的了解,我认为是程序员的基本修养。王爽老师的《汇编语言》思路清晰,内容全面,知识点丰富,推荐大家选择适当的章节进行深入的阅读。

8086一般为DIP40的封装,可以看到有20位的地址总线A0-A19,以及16位的数据总线D0-D15,其中地址总线和数据总线复用在相同的引脚上面。由于内部的寄存器均为16bit,然而20位的地址总线可寻址1M的内存空间,所以8086使用了两个寄存器组合来进行内存的寻址,物理内存 = 段寄存器 << 4 | 偏移寄存器。

讲到这里,青山想起来刚接触8086寄存器的时候,对intel佩服的五体投地,intel设计的可真好啊:

AX:累加寄存器;BX:基址寄存器;CX:计数寄存器;DX:数据寄存器;

CS:代码段寄存器;DS:数据段寄存器

intel怎么可以将字母顺序和寄存器含义编排的这么好,仿佛是浑然天成的设计!在没接触其他类型处理器的很长的一段时间里,我曾经以为所有的寄存器必须以ABCD... 为前缀来命令(捂脸...)。

d9d2d18f93f34a66924a97a6558446ec.png

时至今日,你依然可以在某购物网站买到8086芯片:

660b93fd95c39cf9305768d3ce58ae5a.png
价格便宜,可以买几片收藏用(此处无广告费)

5869bb031d8d9d0ab5ba815693e11908.png
8088开发板,已经无人问津,因为实在是太过于古老,且没有太大学习价值
  • 所有资料,包括源码、模拟器、运行脚本:
wuxx/8086sos​github.com
09f80f8a3649f75e9a665f927d5044b0.png

如何运行8086sos

  1. 安装bochs-2.4.5.exe,一路单击下一步即可完成安装
  2. 双击脚本bochsrc.bxrc,即可运行8086sos

如何编译8086sos

需要在linux下进行编译

  1. 安装汇编编译器nasm $sudo apt-get install nasm
  2. 在8086sos目录下执行$make 即可编译出镜像kernel.img

视频教程

自己动手写操作系统之8086sos​www.bilibili.com
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐