欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《自己动手写操作系统》第2版:第一、二章(2)

程序员文章站 2024-03-24 11:59:10
...

上一篇写了如何安装两个基本的工具,以及工具的配置和使用方法,这一章准备讲解引导文件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