《ORANGE's:一个操作系统实现》准备工作(0)

马上开始动手写最小的一个“操作系统”

1.准备的工具

  • 具有Window或者Linux的计算机
  • 汇编编译器NASM下载地址:http://www.nasm.us/
  • VM虚拟机(11.1.3)
  • MASM2015当作汇编的编辑器

    2.操作系统源码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    	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=13,AL=01h
    mov bx, 000ch ;页号为0(BH=0)黑底红字(Bl=OCh,高亮)
    mov dl, 0
    int 10h ;10h号中断
    ret
    BootMessage: db "His World dwj!"
    times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
    dw 0xaa55 ; 结束标志

3编译源码制作img文件(软盘镜像文件)

操作系统要在裸机上跑(没有操作系统的电脑),所以使用VM虚拟机来运行我们写的操作系统,同时又因为现在很多人的电脑都没有光驱了,所以没法制作光盘来做启动盘,这个时候可以用如下命令:

1
nasm boot.asm -o boot.img

来生成img文件,这个文件就等同于软盘文件,可以放在虚拟机里跑。具体的例子如图:

(1)首先在MASM上编写汇编源码(各行代码含义后面会讲到):

mark

(2)然后在cmd中,找到boot.asm的位置,如图:

mark

(3)然后输入命令:

1
nasm boot.asm -o boot.img

就可以看到,新生成了boot.img
mark

(4)打开虚拟机新建,如下列图:

mark
一路NEXT,直到下图:
mark
然后可以得到一个空白的裸机,用来跑自己写的OS用:
mark
因为我用的.img文件做虚拟软盘,所以需要编辑虚拟机设置:
mark
mark
mark
然后选择自己的boot.img文件在那即可
mark

即可显示Hello World!
是不是有点小激动呢,哈哈。但是,事实上,这个东西还算不上完整的操作系统,只是最简单的引导扇区,但是它和其他软件不同,它是直接在裸机上跑的,已经具备了操作系统的一个特性。

4代码解释

org 07c00h:以为计算机电源被打开时,它会先进行加电自检,然后寻找启动盘,这行代码就是告诉BIOS,一旦发现了引导扇区,就将这段512字节的内容装载到0000:7c00处,然后将控制权交给这段引导代码。到此,计算机不再由BIOS中固有的程序控制,而编程由自己的OS的一部分来控制。

mov ax,cs mov ds,ax
mov es,ax:这三个mov指令,是将ds和es两个段寄存器指向与cs相同的段。

mov ax, BootMessage:把BootMessage中的值的首地址传给寄存器ax(pS:Nasm中,不加[]的标签或者变量都被认为是地址)。

($-$$):开始汇编处,距离本行的相对位置。

dw 0xaa55:计算机只有找到0xaa55为结束,才会认为是软盘启动。

您的支持将鼓励我继续创作!