码迷,mamicode.com
首页 > 其他好文 > 详细

重拾OS的实现

时间:2014-11-28 00:56:09      阅读:326      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

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

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

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

               

 1 org     07c00h
 2 mov     ax, cs
 3 mov     ds, ax
 4 mov     es, ax
 5 call    DispStr    
 6 jmp     $    
 7 DispStr:
 8 mov     ax, BootMessage
 9 mov     bp, ax    
10 mov     cx, 16    
11 mov     ax, 01301h    
12 mov     bx, 000ch    
13 mov     dl, 0
14 int     10h    
15 ret
16 BootMessage:    db    "Hello, OS world!"
17 times 510-($-$$)    db    0 
18 dw 0xaa55

                     使用nasm编译

              

1  nasm  boot.asm -o boot.bin

 

 

   使用dd命令写入

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

 

                   效果如图所示:

bubuko.com,布布扣

 

首先分析一下操作系统的启动过程,在打开电源后,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 $;停止在这一步,不断循环。

                        

1 mov    ax, BootMessage
2 mov    bp, ax        
3 mov    cx, 16        
4 mov    ax, 01301h    
5 mov    bx, 000ch    
6 mov    dl, 0
7 int    10h        
8 ret

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

 

 

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

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

 

 

 

 

重拾OS的实现

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/matrixdogLOL/p/4127372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!