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

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

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

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

关于汇编的学习教程,推荐王爽的《汇编语言》。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... 为前缀来命令(捂脸...)。

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

价格便宜,可以买几片收藏用(此处无广告费)
8088开发板,已经无人问津,因为实在是太过于古老,且没有太大学习价值
  • 所有资料,包括源码、模拟器、运行脚本:

wuxx/8086sos​github.com

如何运行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

c++ 写x64汇编 5参数_自己动手写操作系统 8086sos相关推荐

  1. c++ 写x64汇编 5参数_第9篇-C/C++ x86_64的函数栈

    这是程序栈话题的最后一篇,可能有人会问,你前面5篇写那么多x86程序栈的文章干什么?请耐心看下去,即便现在x64硬件流行的今天,x86的过程调用约定仍然有存在的现实意义,这个戏说程序栈的最终篇,我们探 ...

  2. c++ 写x64汇编 5参数_怀念9年前用纯C和汇编写的入侵检测软件

    在翻出12年前用C#写的自我管理软件之后,进一步激发了本猫的怀旧情怀. 上一篇在此: 竟然无意间翻出12年前自己用C#写的程序 这不,昨天竟然又找出2010年写的一款Windows系统入侵检测及防御小 ...

  3. c++ 写x64汇编 5参数_Vs配置汇编开发环境,智能提示、代码颜色应有尽有~来打我呀...

    为什么使用Vs写汇编? 汇编开发环境,个人建议,如果已经安装了Visual Studio,推荐直接用vs作为开发调试工具,原因很简单,现在用的规则就是masm,微软的规则,没有人比微软更了解微软,而且 ...

  4. 写程序关键是真正自己开始动手写,不要总是想着等全部弄懂了再写

    //写程序关键是真正自己开始动手写,不要总是想着等全部弄懂了再写,可以自己先定个小目标,先写个小点简单点的功能,再一步步往上加.真正自己写起来之后其实感觉也还好.你甚至就可以根据自己的理解去写. // ...

  5. 如何在注解上拿到方法中的参数_想自己写框架?不会写Java注解可不行

    用注解一时爽,一直用一直爽 Java后端开发进入spring全家桶时代后,开发一个微服务提供简单的增删改查接口跟玩泥巴似的非常简单,一顿操作猛如虎,回头一看代码加了一堆注解:@Controller @ ...

  6. 自己动手写cpu 光盘_自己动手写CPU配套源码

    自己动手写CPU的源代码,一共15章,可以完整实现MIPS的指令 文件:n459.com/file/25127180-476886294 以下内容无关: ----------------------- ...

  7. 自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)

    自己动手写操作系统(开篇) 自己动手写操作系统(字符显示) 说明:Intel 8086 或者不同的处理器,开机寄存器数据可能不一样,但是大致原理差不多 了解过计算机启动的同学肯定知道,当计算机启动的时 ...

  8. .sql文件_自己动手写SQL查询引擎

    自己动手写SQL查询引擎 起因 笔者在实际工作中经常需要解析文件,每次文件稍有变化,都得拷贝粘贴一堆代码. 于是就想着能不能做一个通用的服务,通过配置的方式解析文件. 配置通用 最通用的方法就是自己定 ...

  9. put url带参数_避免自己写的 url 被diss!建议看看这篇RESTful API简明教程!

    RESTful API 是每个程序员都应该了解并掌握的基本知识,我们在开发过程中设计 API 的时候也应该至少要满足 RESTful API 的最基本的要求(比如接口中尽量使用名词,使用 POST 请 ...

  10. Java写js的Ajax代码_用JS写的一个Ajax库(实例代码)

    myajax是一个用js编写的一个跨浏览器的ajax库,支持get, post, jsonp请求,精巧,简单. 一.发送GET请求: myajax.get({ data: {}, //参数 url: ...

最新文章

  1. 取出list中属性_你是否用过List<T>和List<?>?
  2. 哇,union的优先级很高嘛
  3. Angular添加class的正确方式
  4. Let's Encrypt(开源SSL证书管理工具)
  5. C#中配置文件保存的路径
  6. 【TWVRP】基于matalb蚁群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1579期】
  7. java连接微信服务器调用微信接口
  8. NumPy下载与安装
  9. Docker进阶篇超详细版(https://www.bilibili.com/video/BV1kv411q7Qc)
  10. OK6410A 之 SPI 驱动 测试 步骤
  11. 张良(?—前189年)
  12. Go实战--golang中使用echo框架中JSONP(labstack/echo)
  13. 板材品牌排名之橱柜用生态板
  14. 华为2019秋招面试问答题!(附带笔试参考题)
  15. 安心做技术研究的技术的少,为了名气,改写文章如此泛滥!
  16. Johnson_Trotter 生成排列算法
  17. 孙鑫VC++深入详解笔记
  18. 鸿蒙系统可以跟ios媲美吗,华为鸿蒙三年媲美苹果iOS?技术上问题不大,生态才是真正考验...
  19. media-有声小说工作流详解
  20. 5、无线传输和卫星通信(物理层)

热门文章

  1. Dart基础第9篇:对象、类
  2. Android ListView更改item背景颜色
  3. 7-3 奇偶分家 (10 分)
  4. Linux内核中定义的延时函数
  5. RK3288_Android7.1写一个GPIO驱动控制LED灯亮灭
  6. mysql中explain使用
  7. Python学习教程(Python学习路线):Python3你还未get到的隐藏技能
  8. 移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签)...
  9. MYSQL 学习笔记记录整理之二:分组数据
  10. PageStateLayout