超级简单的引导扇区

 

写个超级简单的似引导又引导的BootSector.

 

microsoftxiao@163.com

 

   首先说些题外话,你是一个对操作系统感兴趣的程序员吗?你编程吗?你是大学生吗?如果你是软件开发人员,你利用业余时间努力发展一个开源项目吗?

 

    我先回答下,我对操作系统有浓厚的兴趣,我编程,我是过大学生,如今已不是,我不从事软件开发,但从事游戏开发,我业余有个业余项目,但是似乎发展有限。

 

    好,现在进入正题,你看过《自己动手编操作系统》吗?看过后,我下面就帖一个那本书的第一个例子。然后结合我的感受,就是这篇文章了。

 

那本书的最激动人心莫过于第一个例子,在未介绍背景和需要的前置知识之前于渊就让初学者兴奋了一下,一会的功夫就写了一个基于80x86汇编的简单引导程序,可以在IBM PC上运行,但还不能引导Loader和Kernel.

 

代码如下:

org 0100h   ; com Format

;org 07c00h

 

mov ax,cs

mov ds,ax

mov es,ax

call PrintStr

jmp $

 

PrintStr:

mov ax,HelloWorld

mov bp,ax

mov cx,24

mov ax,01301h

mov bx,000ch

mov dl,0

int 10h

ret

 

HelloWorld: db "Welcome to Lee's OS*_*";

times 510-($-$$) db 0

dw 0xaa55

代码我就不解释了,确实需要些汇编的基础才能看懂些。

但是我现在把这个BootSector更精简些,因为简单的东西更容易理解。下面是我精简后的BootSector

;Org 100h   ; com Format

Org 7c00h

jmp $

dw 0xaa55

好,这个最精简的引导程序其实只需要四行。

Org用来定址,可以把各段初始化在同一基址,同时若在IBM PC裸机上执行,则把程序加载到内存的 100h 或7c00h

但是 Org 100h是把代码编译成com格式。

jmp $ 命令表示始终在当前行循环,是个死循环。

Dw 0xAA55 或 dw 0xaa55表示这个引导扇区。

好了,至此我给你一些你可以参考的说明。

    有了这么小的引导扇区框架后,你可以利用你所知道的一切80x86中关于BIOS 和中断服务程序的知识。

如果你熟悉BIOS 调用,但不知道如何写BootSector的话,你现在就可以非常方便的扩充它了,但是不管怎么写,知道你写的代码量超过512字节,你可以利用虚拟机 Virtual PC VMWare Bochs等来测试下。

 

好为了师范扩充,我来演示下,在屏幕上输出个字符A,使用 BIOS的10中断。

Org 7c00h

Mov ax,0e41h

Int 10h

jmp $

dw 0xaa55

这样就可以在虚拟机上输出字符A并死循环了。

 

至此很神秘的BootSector居然可以这么简单。

好了,下面给出你需要深入学习的东西,第一保护模式,第二BIOS调用, 重点需要学习的BIOS中的关于写中断服务程序。

利用BIOS 13H来加载其它程序,Loader 内核等。

 

此外,写裸机上的程序可以通过这种方式来帮助消化关于保护模式的知识。 由于今天的IBM PC无论32位和64位下的用户软件都要受到和处理器配套的操作系统对虚拟地址,权限等的保护。所以我们的一般的应用程序都工作的保护模式下,且是工作在最低权限下。

但有一部分程序是工作在最高权限下,最高权限叫Ring0级。那么这类程序有哪些呢? 第一 系统程序,包括驱动程序,各种核心程序等。

第二 安全类程序,第三 杀毒类程序 第四还有各种调试程序等。

虽然也许我们不需要写操作系统,但是对于写工具软件,我们不得不了解些操作系统的细节,以让我们知道操作系统对我们的程序都做了什么操作,一但出现错误为什么会是这样,是我们的原因还是用户的原因。 此外,不光是操作系统有Bug,连Intel的处理器也都会有Bug.

只是我们不知道而已。

 

转载于:https://www.cnblogs.com/microsoftxiao/archive/2006/09/05/494972.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值