先吓唬一下读者朋友呵呵,直接发代码:(这是UOS操作系统的Bootsect)(有兴趣的朋友能够增加我们,联系方式在最后)

;------------------------------
;文件名称:Bootsect.asm
;文件创建者:@Imcjy
;文件參与编辑者:@Imcjy
;文件编码:UTF-8
;状态:O
;Build:3
;文件创建日期:2015年7月24日
;文件最后改动日期:2015年8月12日
;备注:本文件为Nasm
;凝视等级:LV2
;------------------------------
ORG 0x7c00 ;装载此程序至0x7c00处。由于BIOS默认会从内存0x7c00处開始运行
JMP OS_Entry ;參照《Orange's一个操作系统的实现》,感谢其作者于渊
;參照<a target=_blank href="http://wenku.baidu.com/view/1ee907d528ea81c758f5786b.html">http://wenku.baidu.com/view/1ee907d528ea81c758f5786b.html</a> ,感谢其作者
%macro DiskAddressPacket 3
DB 16 ;数据包尺寸(默认16字节)
DB 0 ;保留
DB %2 ;要传输的数据块个数(以扇区为单位),最大读128扇区
DB 0 ;保留
DD %3 ;传输缓冲地址(segment:offset)
DQ %1 ;磁盘起始绝对块地址。注意此处的地址是从零開始
%endmacro
OS_Kernel_S1: DiskAddressPacket 3, 128, 0x10000000
OS_Kernel_S2: DiskAddressPacket 131, 128, 0x20000000
OS_Kernel_S3: DiskAddressPacket 259, 128, 0x30000000
[bits 16]
OS_Entry:
;初始化寄存器
MOV AX,CS
MOV DS,AX
MOV ES,AX
MOV SS,AX Read_Kernel:
;读内核
KS1: ;状态1
MOV AX,OS_Kernel_S1
MOV SI,AX
MOV DL,0x80 ;一号硬盘
MOV AH,0x42 ;读盘操作
INT 0x13 JC KS1 ;失败则重试 KS2: ;状态2
MOV AX,OS_Kernel_S2
MOV SI,AX
MOV AH,0x42 ;读盘操作
MOV DL,0x80 ;一号硬盘
INT 0x13 JC KS2 ;失败则重试 KS3: ;状态3
MOV AX,OS_Kernel_S3
MOV SI,AX
MOV DL,0x80 ;一号硬盘
MOV AH,0x42 ;读盘操作
INT 0x13 JC KS3 ;失败则重试 JMP 0x8000:0 ;跳转到段0x8000处并更新CS TIMES 510 - ($ - $$) DB 0 ;填充剩下的空间。使生成的二进制代码恰好为512字节
DB 0x55,0xAA ;BIOS认可的结束标志

这里读盘操作用的是扩展0x13号BIOS中断,假设看不懂,能够点开asm代码里的百度链接。假设打开不了能够联系我哦。

如今開始解释一下第一句,“ORG 0x7c00”,这里为什么要装载到0x7c00处呢。如今也解释不清楚。这是IBM的大叔设置的,假设有质疑能够去问问他们哦。

第二句:“JMP OS_Entry” 这里为什么要跳转呢?那我再问你一句,这一句后面的那些代码难道要运行吗?(那可不能运行)所以要跳转到Bootsect真正的入口点。

第三句:宏定义,为了降低挨个挨个设置參数的麻烦,參数能够參照intel手冊来写。

第四句:依赖宏定义定义參数,这里不用解释了把,相信学过Nasm的朋友都能看懂。

第五句:“[bits 16]”,为了使Nasm生成出来的是16位代码。(话说为什么一定要生成16位代码呢?由于BIOS仅仅认16位的中断处理),话说Nasm好笨哦。(嘻嘻)

第六句:“OS_Entry:”标签,相应第二句。

第七句——第十句:初始化寄存器。有兴趣的读者能够去掉这句看看。

第十一句——第十五句:将各个參数放到相应的寄存器里。否则虚拟器(或者真机)会出问题(或许就是重新启动吧)。

第十六句:调用0x13号BIOS中断。

后面的以此类推。

到了“JMP 0x8000:0”这一句,看一下凝视把,这里是一个长跳转。跳转到0x8000内存地址处。

最后两句:为了使BIOS认可我们的Bootsect,我们须要这段代码的大小控制到512字节以内,且最后两个字节为0x55 0xAA。

注意事项:

1:我们须要将这段代码放到硬盘的第一个扇区,(话说这也是IBM那群大叔设置的)。

2:我们须要将硬盘的第二个扇区至第三个扇区放置兴许的操作代码(比方打开A20啊,进入保护模式啊)。

3:版权归UOS项目组全部。

假设还有问题能够联系我:Email:2608184397@qq.com

假设读者朋友也有开发操作系统的想法,能够联系我。

操作系统开发之——一个简单的Bootsect的更多相关文章

  1. Web开发之tomcat配置及使用(环境变量设置及测试,一个简单的web应用实例)

    Tomcat的配置及测试: 第一步:下载tomcat,然后解压到任意盘符 第二步:配置系统环境变量 tomcat解压到的D盘 (路径为: D:\tomcat), 配置环境变量: 启动tomcat需要两 ...

  2. 鸿蒙系统应用开发之JS实现一个简单的List

    在之前的文章鸿蒙应用开发之怎么更好的远程连接手表模拟器做调试里我运行了一个穿戴设备的应用,利用JS UI实现了一个最简单的HelloWorld. 今天我打算在智慧屏设备上利用豆瓣音乐的接口数据实现一个 ...

  3. iOS-iPad开发之SplitViewController简单介绍

    iOS-iPad开发之SplitViewController简单介绍 SplitViewController图形化创建 SplitViewController可以并列显示两个view,适用于基于nav ...

  4. iOS开发之WKWebView简单使用

    iOS开发之WKWebView简单使用   iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...

  5. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  6. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  7. ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面

    前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...

  8. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  9. 如何开发一个简单的HTML5 Canvas 小游戏

    原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wiz ...

随机推荐

  1. 洛谷P1280 尼克的任务 [DP补完计划]

    题目传送门 题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成. 尼克的一个工作日为N分钟,从 ...

  2. 用jquery实现文章自动生成二级目录(续)

    前文:用jquery实现文章自动生成二级目录. 使用方法的补充 我们可以把我们的js和css上传到博客园,然后在页面HTML代码中使用他们. 发现的一些问题 在我把我的js放到自己的博客园上运行之后发 ...

  3. Queries for Number of Palindromes (区间DP)

    Queries for Number of Palindromes time limit per test 5 seconds memory limit per test 256 megabytes ...

  4. ASP.NET总结——更改后

    这篇重新整理的总结,我做了很久,也在草稿箱中放了很久,一直感觉没有达到和老师谈话后的水平,感觉还是需要增加一些修改,希望读者能提出宝贵意见.既这篇博客之前,我发表了一篇ASP.net的总结,在结构上, ...

  5. [BZOJ 1058] 报表统计

    Link: BZOJ 1058 传送门 Solution: 为了这道题今天下午一直都在和常数大战…… 1.对于询问1,我们记录每个数末位置的数$T[i]$和初始位置$S[i]$ 用平衡树维护所有差值, ...

  6. [TCO2013]TrickyInequality

    $\newcommand{stirf}[2]{{{#1}\brack{#2}}}$$\newcommand{stirs}[2]{{{#1}\brace{#2}}}$题意:$\sum\limits_{i ...

  7. 【优先队列】POJ3614-Sunscreen

    参考:❀ #include<iostream> #include<cstdio> #include<queue> #include<algorithm> ...

  8. Spring注解@Primary的意思

    @Primary:在众多相同的Bean中,优先使用@Primary注解的Bean. 这个和@Qualifier有点区别,@Qualifier指的是使用哪个Bean进行注入. 参考: http://bl ...

  9. C#反射读取和设置类的属性

    C#反射技术的简单操作(读取和设置类的属性) http://www.cnblogs.com/william-lin/archive/2013/06/05/3118233.html 泛型方法通过反射创建 ...

  10. 【JSP JSTL】<c:if>多个判断条件 + <c:foreach>满足条件跳出循环

    有一个需求,将所拥有的权限存放于session中,现在JSP页面判断这些如果在所有权限中有某一个或者某几个,就显示相对应的页面内容 举一个例子,实现以上的逻辑,<c:if>多个判断条件 + ...