好久没看OS实现了- -。感觉最近过的乱七八糟的。最为一名学渣,苟活于学霸之间实在是很辛苦啊。不过还是感觉要坚持下去比较好,决定每天学一点,写点感想。也算是通过这个平台逼迫一下自己。= =#。

今天回顾一下第一章的最小的操作系统。

首先比不可少的自然是代码。

 org     07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx,
mov ax, 01301h
mov bx, 000ch
mov dl,
int 10h
ret
BootMessage: db "Hello, OS world!"
times -($-$$) db
dw 0xaa55

使用nasm编译

  nasm  boot.asm -o boot.bin

使用dd命令写入

 dd if = boot.bin of = boot1.img bs= count=

效果如图所示:

首先分析一下操作系统的启动过程,在打开电源后,BIOS开始进行开机自检。系统开始检查软盘(因为我是从软盘启动的,硬盘就是0磁道0柱面1扇区 )上的0面0磁道1扇区。如果是以0xAA55(如果该区域是一个数组,就可以看做array[510]=0x55,array[511]=0xAA)结束,就认为是一个引导扇区。对于本例子,由于运行在虚拟机环境,写到扇区操作是通过那个dd命令完成的。

BIOS发现了引导扇区后,执行org  07C00,将程序调入0000:7c00处执行。

               关于
mov    ax, cs
mov ds, ax
mov es, ax
call    DispStr    
jmp $

cs 是代码段寄存器,用ax作为一个单独的中转,把代码段寄存器的值赋予ds(数据段)以及es(附加数据段)。这是一个初始化动作。目的是为了让后面的数据操作能定位到正确的位置(这是由寄存器本身的特性决定的)。call Dispstr并循环。jmp $;停止在这一步,不断循环。

 mov    ax, BootMessage
mov bp, ax
mov cx,
mov ax, 01301h
mov bx, 000ch
mov dl,
int 10h
ret

这里主要就是一个中断调用的过程。即调用bios的int 10;中断显示字符。

到这里我有几个问题其实不太懂。①这段命令生成的代码只能在Bochs里面运行,无法在实体裸机上运行。②关于汇编,我不懂内部运行的具体过程。只懂语法以及使用。为什么这段程序可以作为引导区程序在所有的机器上运行?不同的硬件的机器指令难道不是不通用的吗?

但愿以后会搞懂。。。。。。。

重拾OS的实现的更多相关文章

  1. 【Java】 重拾Java入门

    [概论与基本语法] 取这个标题,还是感觉有些大言不惭.之前大三的时候自学过一些基本的java知识,大概到了能独立写一个GUI出来的水平把,不过后来随着有了其他目标,就把这块放下了.之后常年没有用,早就 ...

  2. CSS魔法堂:重拾Border之——更广阔的遐想

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  3. CSS魔法堂:重拾Border之——不仅仅是圆角

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  4. CSS魔法堂:重拾Border之——图片作边框

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  5. CSS魔法堂:重拾Border之——解构Border

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  6. 重拾Blog

    上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...

  7. [linux]重拾linux

    起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...

  8. 重拾qt

    最近公司又接了一个煤矿的项目,要写个小程序摘取数据,我是公司唯一c++程序员,本来搞ios搞好好的,现在又得重拾半年没摸得qt了.呵呵...呵呵呵. 这里只记录这次小程序的一些小的总结吧.. 1.中文 ...

  9. 重拾linux

    重拾linux 起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做 ...

随机推荐

  1. 手持机(Android)开发应用总结

    对于首次接触android的我,刚接到android开发的命令时,自己完全不懂任何android技术,可是由于项目的开发时间周期很短,必须强迫自己即学即用,到了最后才发现,技术其实只是工具,重要的是一 ...

  2. nodejs(1)

    node.js 是一个让javascript运行在服务端的开发平台 node.js的环境部署 1.下载安装包 https://nodejs.org/en/ 安装后 打开cmd的dos窗口 运行node ...

  3. Linux常用目录及文件

    1./etc/sysconfig/network 操作相关:hostname设置 2./etc/sysconfig/network-scripts/ifcfg-ethX(X为0.1等编号,一般为0) ...

  4. ASP.NET泛型List的各种用法Skip、Take等

    List在.NET里面使用得非常频繁,但有好多人不了解它各种小用法.我就一直记不大住... asp.net中List的简单用法,例如: 1 2 3 4 5 6 7 List<int> li ...

  5. BulkSqlCopy 批量导入数据(Ef支持)

    Ado.net对批量数据的支持相信大家都已经非常熟悉.再此就不在多说,就当是给自己备个份,没办法,这个方法太好用了. public static void BulkCreate( string tab ...

  6. 9.1 js基础总结2

    3.布尔类型(Boolean) 布尔型数据只有true和false两个值,与字符串不同,不要把布尔值用引号括起来,布尔值false与字符串“false”是两回事. var married = true ...

  7. Office 365系列六 ------ 创建sharepoint online网站

    这节跟大家介绍简单的创建sharep online私有网站集,sharepoint online 可以给我们提供开箱即用的功能,比如文档库:可以给我们取代File Server,提供了版本管理,版本变 ...

  8. asp.net LINQ防止SQL注入式攻击

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  9. jQuery HTML 操作

    jQuery 包含很多供改变和操作 HTML 的强大函数. 改变 HTML 内容 语法 $(selector).html(content) html() 函数改变所匹配的 HTML 元素的内容(inn ...

  10. POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目

    http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...