1、BIOS的主流程在bootblock的最后阶段,那当然就是把BIOS的压缩代码全部解压缩出来,然后进入到后续的BIOS初始化流程当中去。在这个章节中,我们就来简单探讨一下解压缩和解压缩以后BIOS的大致走向。(关于解压缩的细节,我们再议。) 图1 BIOS主流程 2、在解压缩BIOS之前的一些初始化 BIOS执行到现在,它本身已经被copy到了RAM中来,并且也正常RAM中跑了。不过为了能够让后续的BIOS跑的更快,更稳的话,我们还需要把内存的一些属性给初始化一下。这里要第一次接触到MTRR的初始化了哦。在前面的基础章节我曾经有和大家探讨过内存的属性的初始化。 http://blog.csdn.net/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 _F