《自己动手写操作系统》第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保护模式设计的知识点多,估计会分为好几章来讲解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值