《Orange's 一个操作系统的实现》学习笔记--一个简单的引导扇区


                      《Orange's 一个操作系统的实现》

                                                                                                                ----于渊《Orange's 一个操作系统的实现》

很早以前就晓得这本书了,当时还真没有打算仔细看的,随着后来了解的东西逐渐多起来后,我感觉上层的应用程序也好,还是更高级的的高级语言也好,都是按照格式来编程,根本不知道为什么,各种各样的调用(鄙人愚钝),当然也没有说高级语言不好,只是自己不喜欢在不明白为什么的情况下进行‘瞎’编程,当时在刚上大学前,我就了解到了c语言和汇编(只是了解),知道汇编是多么神奇的语言(不是夸大汇编的重要性),但是很难学,当时我就觉得就算以后课程不开,我也要自己学,于是头脑一热买了汇编和c的书,在入大学后,基本就是一个劲的学c,再到后面学c++的时候,我就开始自学汇编了,买的是王爽的书(网上推荐的),学了接近一半左右吧,然后就暂时没有看了,偶然的机会就去搞了搞算法,其实鄙人觉得算法真的是很重要(其实是数学重要),也搞了一段时间,但是由于自己的不才,基本学的很差,再加上自学真的很痛苦,也大二上快要结束的时候,我也仔细思考了一下到底以后该如何走,在学算法的过程的中,真的学到了很多,虽然现在能力有限,但是我觉得那种思维方式也好,还是那份坚持也好都是值得肯定的,在那学期快结束的时候,自己又拿起了汇编那本书,慢慢啃起来,网上也找了一些视频看,在刚放寒假的时候基本也就看完了,其中的程序自己也实践过,通过对汇编的学习,我发觉我对底层其实更感兴趣一些,对于一些问题我总是喜欢知道为什么,我也看了默写高级语言写的东西,身边也有很多东西学其它东西,也听他们说刚开始的照着视频里面的东西做,但是很多自己都不知道为什么,最好东西做出来的,但是自己却都不是很清楚,知其然不知其所以然(当然也不是说学高级的东西不好,这只是自己感觉而已),时间过得太快了,由于自身原因,一直搞算法也是不太可行的,所以在寒假想了想到底该怎么办,最后决定还是搞算法吧,当然现在的重心不是搞算法了,我先把这学期很多重要的课程学好,比如操作系统,计算机组成原理之类的,我也知道这种课程很重要,所以对自己定的目标不是应付考试就行了,而是真正的学到东西,深入的研究,寒假也把操作系统的课程简单的过了一遍,加上有汇编基础(再深入研究汇编)所以才有今天这篇文章的标题,其实我开始打算学完后在记录的,但是我想学习这个不是简单的几天,有可能会花费很多时间,所以最后打算边学边记录,同时也激励自己嘛,尽管有可能最后不能完成任务,但是我还是会去做,重在学习的过程。目前先把基础打好再说,如果上面言辞有冒犯各位的还请原谅。

今天开始第一课:

说明:我试验环境linux+bochs(搭建环境也费了点神,哎

Linux汇编和windows有点不一样,书上用的是nasm编译器,和masm相识但是也有差别,最好参考一下nasm手册,这样避免走弯路,可以到我上传的博客资源进行下载

十分钟完成的操作系统----实质是一个引导扇区

在最开始看的时候还是慢困难的,在完成汇编课程设计后其实就简单了很多,有兴趣的可以看看我课程设计中的相关资料,或者了解一下操作系统的启动过程,这样头脑要清晰很多

下面的代码中的ClearScreen函数是我自己加的,方便观察结果

	org	07c00h			; 告诉编译器程序加载到7c00处
	mov	ax, cs
	mov	ds, ax
	mov	es, ax
	call ClearScreen
	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 = 0Ch,高亮)
	mov	dl, 0
	int	10h			; 10h 号中断
	ret
ClearScreen:				;清屏函数
	push ax
	push es
	push di
	push cx
	mov ax,0b800h	                ;显存地址
	mov es,ax
	mov di,0			;显存偏移地址
	mov cx,2000
  cls:  mov  byte [es:di],' '		;往显示器输入空字符
	add di,2
	loop cls
	pop cx
	pop di
	pop es
	pop ax
	ret
BootMessage		db	"Hello, OS world!"
times 	510-($-$$)	db	0	; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 	0xaa55				; 结束标志

把这段代码用NASM编译一下:


准备一个软盘(可以用网上工具制作),连接到虚拟机linux种然后在linux下可以这样把程序写入软盘:


进入bochs:


按6开始,然后按c如果一切顺利就会出现下面这个画面:


关于配置环境书上讲得其实很详细了,慢慢调试,坚持!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值