Linux 0.12内核学习之(1)——用MASM编写Boot Sector引导扇区

本文介绍了如何使用MASM在Windows环境下编写Linux 0.12内核的Boot Sector引导扇区。通过理解计算机启动过程,设置汇编代码,并利用WinHex裁剪PE文件头,创建软盘镜像,最终在虚拟机中成功引导。这是一个内核新手的学习记录,旨在分享并邀请交流。
摘要由CSDN通过智能技术生成

    最近在学习Linux0.12内核,正在读《Linux内核完全剖析》。一开始就被ax86写的引导扇区弄晕了。于是Google了很多资料。最终实验了一晚上终于搞定。下面来看看我们怎么用Windows下的MASM来写个Boot Sector。因为我MASM汇编用的比较熟,所以就用MASM来写,当然,汇编只有语法差异,你用什么来写都没关系。

    首先,先来说说计算机怎么启动的。经过一系列BIOS加电、系统自检后,会将硬盘0面0道1扇区的512字节(Boot Sector)加载到内存地址07c0:0000处,之后就是执行这个Boot Sector部分了。而我们要写的就是这部分。这部分之后会引导操作系统启动,我们暂时不管这些。

    ​需要注意的是,系统会检查内存地址07c0:01FE处是否等于0xaa55,不等于则报错。

    ​既然知道了系统会把前512扇区加载内存,那么我们就要在汇编里做些设置。

    源码如下:

data segment
	org 07c00h    ;将程序加载到07c0:0000处
start:
	mov ax,data
	mov es,ax        ;后面的字符串寻址输出需要es:bp
	mov bp,offset msg1
lop:mov ah,13h	        ;第10h中断向量的功能代码13h---写字符串
	mov al,0	;写模式 使用0就可以
	mov bh,0	;0页,默认为0页即可
	mov bl,07	;显示属性,黑底白字
	mov cx,32	;字符32个,更科学的方法是两个标号相减,为了简化代码,直接数出来
	mov dh,10	;输出在第10行
	mov dl,24	;输出在第24列
	int 10h		;10h 使用第10h中断向量,显示器输出
	jmp lop         ;死循环,让字符保持在屏幕上
	
	ret
	
	msg1 db "Welcome to my Operating System !"
	org 07c00h+512-2    ;地址计数器跳到512字节的倒数第二字节,即07c0:01FE
	DW 0AA55H            ;此处在512字节的最后两字节写入AA55H !!
data ends
end start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值