c++ 写x64汇编 5参数_自己动手写操作系统 8086sos
这是一个非常简单的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芯片:
- 所有资料,包括源码、模拟器、运行脚本:
wuxx/8086sosgithub.com
如何运行8086sos
- 安装bochs-2.4.5.exe,一路单击下一步即可完成安装
- 双击脚本bochsrc.bxrc,即可运行8086sos
如何编译8086sos
需要在linux下进行编译
- 安装汇编编译器nasm $sudo apt-get install nasm
- 在8086sos目录下执行$make 即可编译出镜像kernel.img
视频教程
自己动手写操作系统之8086soswww.bilibili.com
c++ 写x64汇编 5参数_自己动手写操作系统 8086sos相关推荐
- c++ 写x64汇编 5参数_第9篇-C/C++ x86_64的函数栈
这是程序栈话题的最后一篇,可能有人会问,你前面5篇写那么多x86程序栈的文章干什么?请耐心看下去,即便现在x64硬件流行的今天,x86的过程调用约定仍然有存在的现实意义,这个戏说程序栈的最终篇,我们探 ...
- c++ 写x64汇编 5参数_怀念9年前用纯C和汇编写的入侵检测软件
在翻出12年前用C#写的自我管理软件之后,进一步激发了本猫的怀旧情怀. 上一篇在此: 竟然无意间翻出12年前自己用C#写的程序 这不,昨天竟然又找出2010年写的一款Windows系统入侵检测及防御小 ...
- c++ 写x64汇编 5参数_Vs配置汇编开发环境,智能提示、代码颜色应有尽有~来打我呀...
为什么使用Vs写汇编? 汇编开发环境,个人建议,如果已经安装了Visual Studio,推荐直接用vs作为开发调试工具,原因很简单,现在用的规则就是masm,微软的规则,没有人比微软更了解微软,而且 ...
- 写程序关键是真正自己开始动手写,不要总是想着等全部弄懂了再写
//写程序关键是真正自己开始动手写,不要总是想着等全部弄懂了再写,可以自己先定个小目标,先写个小点简单点的功能,再一步步往上加.真正自己写起来之后其实感觉也还好.你甚至就可以根据自己的理解去写. // ...
- 如何在注解上拿到方法中的参数_想自己写框架?不会写Java注解可不行
用注解一时爽,一直用一直爽 Java后端开发进入spring全家桶时代后,开发一个微服务提供简单的增删改查接口跟玩泥巴似的非常简单,一顿操作猛如虎,回头一看代码加了一堆注解:@Controller @ ...
- 自己动手写cpu 光盘_自己动手写CPU配套源码
自己动手写CPU的源代码,一共15章,可以完整实现MIPS的指令 文件:n459.com/file/25127180-476886294 以下内容无关: ----------------------- ...
- 自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)
自己动手写操作系统(开篇) 自己动手写操作系统(字符显示) 说明:Intel 8086 或者不同的处理器,开机寄存器数据可能不一样,但是大致原理差不多 了解过计算机启动的同学肯定知道,当计算机启动的时 ...
- .sql文件_自己动手写SQL查询引擎
自己动手写SQL查询引擎 起因 笔者在实际工作中经常需要解析文件,每次文件稍有变化,都得拷贝粘贴一堆代码. 于是就想着能不能做一个通用的服务,通过配置的方式解析文件. 配置通用 最通用的方法就是自己定 ...
- put url带参数_避免自己写的 url 被diss!建议看看这篇RESTful API简明教程!
RESTful API 是每个程序员都应该了解并掌握的基本知识,我们在开发过程中设计 API 的时候也应该至少要满足 RESTful API 的最基本的要求(比如接口中尽量使用名词,使用 POST 请 ...
- Java写js的Ajax代码_用JS写的一个Ajax库(实例代码)
myajax是一个用js编写的一个跨浏览器的ajax库,支持get, post, jsonp请求,精巧,简单. 一.发送GET请求: myajax.get({ data: {}, //参数 url: ...
最新文章
- 取出list中属性_你是否用过List<T>和List<?>?
- 哇,union的优先级很高嘛
- Angular添加class的正确方式
- Let's Encrypt(开源SSL证书管理工具)
- C#中配置文件保存的路径
- 【TWVRP】基于matalb蚁群算法求解带时间窗的车辆路径规划问题【含Matlab源码 1579期】
- java连接微信服务器调用微信接口
- NumPy下载与安装
- Docker进阶篇超详细版(https://www.bilibili.com/video/BV1kv411q7Qc)
- OK6410A 之 SPI 驱动 测试 步骤
- 张良(?—前189年)
- Go实战--golang中使用echo框架中JSONP(labstack/echo)
- 板材品牌排名之橱柜用生态板
- 华为2019秋招面试问答题!(附带笔试参考题)
- 安心做技术研究的技术的少,为了名气,改写文章如此泛滥!
- Johnson_Trotter 生成排列算法
- 孙鑫VC++深入详解笔记
- 鸿蒙系统可以跟ios媲美吗,华为鸿蒙三年媲美苹果iOS?技术上问题不大,生态才是真正考验...
- media-有声小说工作流详解
- 5、无线传输和卫星通信(物理层)
热门文章
- Dart基础第9篇:对象、类
- Android ListView更改item背景颜色
- 7-3 奇偶分家 (10 分)
- Linux内核中定义的延时函数
- RK3288_Android7.1写一个GPIO驱动控制LED灯亮灭
- mysql中explain使用
- Python学习教程(Python学习路线):Python3你还未get到的隐藏技能
- 移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签)...
- MYSQL 学习笔记记录整理之二:分组数据
- PageStateLayout