WEB开发网
开发学院软件开发VC 简易软盘镜像工具的实现及操作系统编写初步 阅读

简易软盘镜像工具的实现及操作系统编写初步

 2007-03-15 21:54:13 来源:WEB开发网   
核心提示: 4.1 PC机启动基本原理(1) 开启电源后, 机器就会开始执行ROM BIOS的一系列系统测试动作,包括检查RAM,简易软盘镜像工具的实现及操作系统编写初步(3),keyboard,显示器,系统调动及实模式及虚模式还是有很大的意义的,另外,软硬磁盘等等,(2)执行完BIOS的系统测试之后

4.1 PC机启动基本原理

(1) 开启电源后, 机器就会开始执行ROM BIOS的一系列系统测试动作,包括检查RAM,keyboard,显示器,软硬磁盘等等。

(2)执行完BIOS的系统测试之后,紧接着控制权会转移给ROM中的启动程序(ROM bootstrap routine);这个程序会将磁盘上的第0轨第0扇区(叫boot sector或MBR ,系统的引导程序就放在此处)读入内存中,并放到自0x07C0:0x0000开始的512个字节处;然后处理机将跳到此处开始执行这一引导程序;也即装入MBR中的引导程序后, CS:IP = 0x07C0:0x0000 。

注意: 如果这个扇区的最后两个字节是"55 AA",那么这就是一个引导扇区。如果最后两个字节不是"55 AA",那么BIOS 就检查下一个磁盘驱动器。

4.2 基本编译工具选择

NASM:编写系统级汇编代码的绝好的工具,而且分别支持Windows和Linux系统。本来原来用TASM编译的,可发现在编写的读取硬盘扇区的汇编代码裁剪去512字节的DOS头后居然不能还运行,郁闷了好多天,都没有解决,而用NASM编译出来可以的,所以决定改用NASM。

4.3 引导代码编写

文件boot.asm,具体代码及注释org 07c00h  ; 程序会被加载到7c00处,所以需要这一句
mov ax, cs
mov ds, ax
mov es, ax
Call DispStr  ; 调用显示字符串例程
jmp $  ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax  ; ES:BP = 串地址
mov cx, 16  ; CX = 串长度
mov ax, 01301h ; AH = 13h, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h  ; int 10h
ret
BootMessage:  db  " Hello, OS world!"
times 510-($-$$) db  0 ;填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0aa55h  ; 引导扇区需要以55AA结束
4.4 用NASM编译nasm boot.asm -o boot.bin

4.5 写入镜像文件及运行

按照2.1节所示的步骤把boot.Bin生成镜像文件,然后再写入软盘。下图是我再VMWare下的运行结果:

图4 系统运行显示

4.6 系统的其它功能实现

读取硬盘扇区,BIOS中断向量替换,实现文件系统,实虚模式转换及磁盘文件加载由于自己水平有限,不能详细介绍,网上有许多高手已经实现得很好了。如果感兴趣,可以参考相应的网址。详细请见:http://www.oldlinux.org

结语

本文中的部分代码来自网上及林永君老师的课件,在此表示感谢。当然,单纯做一个操作系统来说,其现实的意义已不是太大。但对于更好的了解PC机的运行机制及操作系统的中断向量,系统调动及实模式及虚模式还是有很大的意义的。另外,也可以为Linux或者Windows下的驱动及系统开发打下一个良好的基础。

上一页  1 2 3 

Tags:简易 软盘 镜像

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接