首页 > 代码库 > 假设写一段代码引导PC开机这段代码是 ? Here is a tiny "OS" :-D

假设写一段代码引导PC开机这段代码是 ? Here is a tiny "OS" :-D

Hello world -- OS


                            我找到了华科绍志远博士的相关代码,发现他依据MIT的JOS的boot.S 稍作改动。然后单独剥离出来,能够非常好玩~ 


资料下载地址:

http://download.csdn.net/detail/u011368821/8006465


原则上仅仅须要两个文件(boot.S mmu.h)就能够,可是我们这里还须要一些附带的虚拟器工具。以及makefile来做实验.


须要提示的就是地址0xb800是显存的开头地址 : )

MOVSB(MOVe String Byte)
即字符串传送指令。这条指令按字节传送数据。

通过SI和DI这两个寄存器控制字符串的源地址和目标地址,比方DS:SI这段地址的N个字节拷贝到ES:DI指向的地址,复制后DS:SI的内容保持不变。

IBM PC部分的使用统一的编址方式。CGA显示卡上现实内存的地址就是直接占用了储存器地址空间0xB800~BC00。若要让一个字符显示在显示器上面。能够直接诶使用内存操作指令往这个内存区域运行写操作.

以下这段代码中把%es设置为0xb800,寓意就在于di寄存器的输出指向显存!

技术分享

rep指令就是反复运行 rep 后面跟的指令,直到%cx寄存器的值为0(每次运行一次,%cx寄存器的值递减)


这是real model以下的情况

到后面protected model的时候,仅仅是地址的表示形式会发生一点变化而已

不再是segment:offset的形式

而是直接的比如 0xb800(real model) => 0xb8000(protected model)

显存就像一个非常好玩的大buffer 哈哈哈哈哈~


技术分享

这里最后多出来的EOF是我自己加上去的。我加了一小段代码:

技术分享

前半部分是原来有的。后面部分#print my name是我自己加的功能

这里我精确计算了前半部分打印helloworld会占用多少个字节(62 byte)

于是0xb8d22 + 0x3D (60) = 0xb8d60  : ) Don‘t panic !


最后那个$24事实上不怎么好,是我忘记改了....这里最好恰当的改成你想打印多少字节的内容就可以















埃塞的情人变成岩石 皮埃尔 法国 1763年 325x329cm 布油彩 巴黎卢浮宫
    
在这幅具有神话意境的画幅中,画家以极为细腻的笔触和华丽的色彩描绘画中人物形象和环境饰物。以古罗马柱式作中景建筑。使画中添加庄重感。

皮埃尔用虚幻和现实结合的手法创造了一个亦真亦幻、亦人亦神的艺术境地,在某种意义上又有浪漫情调。

能够说这是由古典主义向浪漫主义过渡的一种艺术表现 。这幅画虽取材于希腊神话。但画家似乎并不注重故事的刻画和人物的表现,而是将注意力放在女性人物的身上。尤其对衣物在光线下的反光情有独钟。人物有着罗可可式的甜美和纤秀。但人的目光却不能统一在一起,从而产生一种没有关联的分离感和无动于衷的造型效果 。画面中埃塞端坐于沙发之上,看到情人变成岩石的情景,被画家处理成理性的冷静,剧烈的戏剧性被冷静所消解。但我们却依旧能够看出新古典主义绘画那高贵的风范和冷静的气度


技术分享

假设写一段代码引导PC开机这段代码是 ? Here is a tiny "OS" :-D