【我所认知的BIOS】->反汇编BIOS之Bootblock(11)

本文详细介绍了BIOS解压缩的过程,包括在解压前的内存初始化,如MTRR设置,以及解压缩后的BIOS复制到E000和F000段。通过分析关键代码,揭示了BIOS如何提高运行速度和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【我所认知的BIOS->反汇编BIOSBootblock(11)

-- 初识BIOS的解压缩

By Lightseed

8/24/2010 

 

      最近一段时间心态不太好,所以blog也没有更新。现在总算是调整过来了,目前我是这么打算,反汇编的文章暂时就写到bootblock这里了。至于如果还有兴趣研究POST部分的爱好者的话,我们可以私聊。后续文章准备写些比较深入点的文章,比较细节点的分析等等。希望大家给点建议,也希望我们BIOS ren共同进步~并且我准备把这个blog搬到BIOS联盟上去。毕竟那面比较专业一点。至此这篇文章也是bootblock反汇编的最后一篇文章了,其中还有一个问题没研究就是award bios的解压缩函数。这个函数用的LHA的压缩和解压缩算法,我没深入研究过。不过据说网上研究过的人比比皆是,再加上这段code一般都不会出错,所以我暂时也不打算深入研究了。如果你已经研究过了,可否和我share一下?

1BIOS的主流程

bootblock的最后阶段,那当然就是把BIOS的压缩代码全部解压缩出来,然后进入到后续的BIOS初始化流程当中去。在这个章节中,我们就来简单探讨一下解压缩和解压缩以后BIOS的大致走向。(关于解压缩的细节,我们再议。)

 

1 BIOS主流程

2、在解压缩BIOS之前的一些初始化

BIOS执行到现在,它本身已经被copy到了RAM中来,并且也正常RAM中跑了。不过为了能够让后续的BIOS跑的更快,更稳的话,我们还需要把内存的一些属性给初始化一下。这里要第一次接触到MTRR的初始化了哦。在前面的基础章节我曾经有和大家探讨过内存的属性的初始化。

http://blog.youkuaiyun.com/lightseed/archive/2009/09/28/4603383.aspx

如果您忘记的MTRR的一些东西,那么您可以从这里再回味一下。

_F000:E482                 jmp     far ptr 2000h:0E487h ; Here BIOS copy itself to RAM

_F000:E482                                         ; Althrough BIOS will use FAR JMP to run at 2000:0, but code is continuous.

_F000:E482                                         ; So we can go on disassembling in F0000

_F000:E487 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:E487                 xor     ax, ax

_F000:E489                 mov     ss, ax

_F000:E48B                 assume ss:seg000

_F000:E48B                 mov     sp, 0E00h       ; Stack init

_F000:E48E                 call    Check_If_Intel_CPU

_F000:E491                 jz      Yes_its_IntelCPU

_F000:E493                 cmp     ebx, 'tneC'     ; yuanhu+ ;Centaur CPU's identifier

_F000:E49A                 jnz     loc_FE4DB

_F000:E49C

_F000:E49C Yes_its_IntelCPU:                       ; CODE XREF: _F000:E491j

_F000:E49C                 mov     eax, 6060606h

_F000:E4A2                 mov     edx, eax

_F000:E4A5                 mov     ecx, 250h       ; MTTR Address(250H) for 0-512K is WB

_F000:E4AB                 wrmsr                   ; Init memory type range register(MTTR)

_F000:E4

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值