第3天 进入32位模式并导入C语言

这篇博客讲述了如何从实模式进入32位模式,包括读盘操作,从启动区执行操作系统,32位模式的前期准备,以及如何在32位模式下导入和调用C语言函数。通过读盘实现程序装载,并详细解释了磁盘结构和内存映射。最后,讨论了C语言与汇编的交互。
摘要由CSDN通过智能技术生成

1、读盘

昨天写的IPL并没有装载程序,今天我们来写一个可以真正装载程序的IPL。

我们先来看软盘结构。

如图所示。一张软件有正反两面,对应读取用的磁头(0,1),而从外到内又分为80个环(0~79),称为柱面。每个柱面又分为18个扇区(1~18)。因为软盘的第一个扇区(正面的第0个柱面的第1个扇区)为启动区,所以我们读软盘的时候应该从第2个扇区开始读。

org 0x7c00

jmp init

DB	0x90
DB	"HARIBOTE"		
DW	512				
DB	1				
DW	1				
DB	2				
DW	224				
DW	2880			
DB	0xf0			
DW	9				
DW	18				
DW	2				
DD	0				
DD	2880			
DB	0,0,0x29		
DD	0xffffffff		
DB	"HARIBOTEOS "	
DB	"FAT12   "		
RESB	18				

init:
	mov bx,0
	mov ax,0x0820
	mov es,ax	;es:bx为缓冲地址,即读取的数据将存取在这里
	mov dl,0	;驱动器号0(即光驱号,现在一般只有一个光驱)
	mov dh,0	;磁头号0~1
	mov ch,0	;柱面号0~79
	mov cl,2	;扇区号1~18
	mov al,1	;要读的扇区数
	mov si,0	;读盘错误次数
	
read:
	
	mov ah,0x02	;读盘
	int 0x13	;中断,BIOS的0x13号函数
	jnc finish	;jnc指令(jump if not carry),如果上一步没错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值