ReactOS操作系统启动代码分析(I386架构)(2)

博客详细分析了ReactOS操作系统在I386架构下从0x7C00开始的启动代码,首先禁用中断以确保堆栈设置好后才能处理中断。接着,清零段寄存器并切换到保护模式,但未初始化CS,因为其始终在使用中。代码中有一段用于恢复可能被中断改变的段寄存器值,确保与调用保护模式切换函数前一致。最终,控制权转交给C函数BootMain,该函数接收一个命令行参数,但无返回值,标志着系统启动的关键步骤。
摘要由CSDN通过智能技术生成

这里紧跟上一篇谈到的0x7C00开始执行,当然此时是在实模式下面,执行最初先禁止中断,因为现在堆栈都没有就算有中断也不能执行,所以第一步禁止中断,一直到设置好堆栈才打开中断。这一部分代码很简单,利用ax将段寄存器全部清零,然后调用切换到保护模式下面去,但是由于CS一直都在使用当中,所以就不需要初始化CS。不过要注意的是实际上进入switch_to_prot的时候,并没有进入保护模式,而是在 返回的时候才是执行保护模式下面的32位代码。

1.	    .code16  
2.	EXTERN(_RealEntryPoint)  
3.	    cli  
4.	    xor ax, ax  
5.	    mov ds, ax  
6.	    mov es, ax  
7.	    mov fs, ax  
8.	    mov gs, ax  
9.	    mov ss, ax  
10.	    mov sp, word ptr ds:stack16  
11.	    sti  
12.	    call    switch_to_prot  
13.	.code32  
14.	        xor eax, eax  
15.	        mov dword ptr [_FrldrBootPartition], eax  
16.	        mov byte ptr [_FrldrBootDrive], dl  
17.	        mov byte ptr [_FrldrBootPartition], dh  
18.	        call _EnableA20  
19.	        xor eax, eax  
20.	        mov edi, offset __bss_start__  
21.	        mov ecx, offset __bss_end__ + 3  
22.	        sub ecx, edi  
23.	      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值