《自己动手写操作系统》第2版:第一、二章(2)
上一篇写了如何安装两个基本的工具,以及工具的配置和使用方法,这一章准备讲解引导文件boot.asm的内容和bochs配置文件的内容。
一、boot.asm介绍
在上一篇文章里我们讲到了nasm的安装与使用,我们使用nasm时用到了一个命令:
nasm boot.asm -o boot.bin
boot.asm是一个文件,里面是用汇编语言写的一段引导程序,上面的命令是将这段引导程序编译成二进制文件(即可以被计算机执行的机器代码),下面我们就来看看boot.asm里到底卖的什么药~方便起见,就直接把作者的程序直接拷贝在下面了~
org 07c00h ; where the code will be running
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; let's display a string
jmp $ ; and loop forever
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = string address
mov cx, 16 ; CX = string length
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; RED/BLACK
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; fill zeros to make it exactly 512 bytes
dw 0xaa55 ; boot record signature
第1行“org 07c00h” :告诉编译器这段程序要被加载到内存偏移地址0x7c00处(自行查询0x7c00h的作用)
第2~4行是常规的寄存器赋值操作
第5行“call DispStr”调用子程序打印字符串
第6行“jmp $”让程序无限循环,“$”表示当前行的地址
第7行定义了一个函数,这个函数的大致意思是将字符串“Hello, Os world”的首地址传给ax
第14行:"int 10h"表示一个中断,这里有点复杂,我也不知道怎么解释...自行找资料吧...
第15行:“times 510-($-$$) db 0”,上面讲过“$”代表当前行地址,"$$"则表示程序被编译后的开始地址(其实是一个节的开始地址),所以($-$$)表示本行距离程序开始处的相对距离,“510-($-$$)”则表示当前行到程序第510个字节处的距离;所以这段代码的意思是将0这个字节从当前行一直填充到510字节处。
第16行:最后加上“0xaa55”表示程序的结束标志,加上这最后的2个字节,这段程序一共是512个字节。
总结:当计算机电源开启时,bios(简介)会寻找引导程序(bios会寻找软盘的第0面0磁道1扇区,发现一段程序以0xaa55结尾的话就认为这段程序是引导程序),然后启动引导程序,也就是我们的boot.bin(boot.asm编译后的文件),启动之后,经过一些列代码的运行,会将“Hello, Os world”这个字符串打印在屏幕上,并进入循环。正常来说,启动引导程序之后接着便会启动操作系统内核,但是我们还没写出操作系统,所以用打印字符串代替....
二、bochsrc.txt参数讲解
##bochs是一台虚拟机,可以理解为一台真正的计算机,真实的计算机要用bios来启动引导程序,所以bochs也需
##要模拟真实的计算机用bios来启动引导程序,所以romimage表示的是bochs的bios程序,这个romimage实际表现为一个文件。
romimage: file=$BXSHARE/BIOS-bochs-latest
##显卡的bios
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
##如果你是从floppy(软盘)启动引导程序,那么就要配置floppy的参数
##floppya会是第一个被访问的,floppyb是第二个
##所以我们就要配置floppya,1_44表示可以读写1.44MB
floppya: 1_44=a.img, status=inserted
##表示从floppy(软盘)启动
boot: floppy
##禁用鼠标
mouse: enabled=0
##键盘配置
keyboard_mapping: enabled=1, map=/usr/local/share/bochs/keymaps/x11-pc-us.map
##虚拟机会拥有多大的内存
megs: 32
此章完结,接下来将会讲解cpu保护模式的相关内容,因为cpu保护模式设计的知识点多,估计会分为好几章来讲解。
上一篇: python os
下一篇: Python - os