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

本文介绍了BIOS主流程中的SuperIO_INIT函数,讲解了如何初始化Super IO芯片,并通过反汇编代码展示了初始化过程。文中详细分析了SuperIO_INIT的主要逻辑,包括进入配置模式的步骤和配置表的内容,这些内容对于理解BIOS的启动流程和Super IO的初始化至关重要。
摘要由CSDN通过智能技术生成

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

--initialize Super IO

By Lightseed

5/13/2010

一、BIOS的主流程

到目前为止,我们已经看了两个重要的函数了,也是BIOS的必经之路。如下面的代码片段,BT_CPU_InitChipset_Reg_Init_Early我们都详细探讨过,那么随着流程下去,就是讨论SuperIO_INIT这个函数了。

到目前为止,我们的BIOS主流程如图1所示,

 

1 BIOS主流程

那么今天就和大家详细来看看SuperIO_INIT这个函数都做了什么。BIOS究竟是怎么来初始化我们听的耳朵都起茧了的一个芯片——super IO

二、SuperIO_INIT

废话就不多说了,让我们来看看code吧,这样一下子就明了了。

_F000:E274       mov    ax, cs:[si]

_F000:E277       mov    dx, 2Eh ; '.'  ; Superio_Config_Port

_F000:E27A       out    dx, al

_F000:E27B       out    0EBh, al

_F000:E27D       xchg    ah, al

_F000:E27F       inc    dx

_F000:E280       out    dx, al         ; out to SIO's configuration register

_F000:E281       add    si, 2

_F000:E284       out    0EBh, al      ; delay

_F000:E286       loop    loc_FE274

这是SuperIO_INIT的主函数。不难发现其实中间的逻辑很简单,与之前初始化chipset的逻辑差不多,只是操作稍微有点点区别。对于上面这个函数,大部分看注释应该就能懂了,我只想单独说明一点。对于初学者而言,可能会问:

_F000:E268       mov    al, 87h    ; '?

_F000:E26A       out    dx, al

_F000:E26B       nop

_F000:E26C       nop

_F000:E26D       out    dx, al     ; Enter SIO configurating mode

为什么上面要有两次的把87H送到DXport上去。我的回答是,这是由super IO的芯片决定的。在super iodatasheet里面有说明,只有两次向super IO的固定端口写入entry key才能使得该super IO进入到配置模式,从而初始化它的寄存器。在datasheet的第九章有说明。在

http://blog.csdn.net/lightseed/archive/2009/09/02/4512464.aspx

这个章节里也有详细的论述。(再次提醒一下,blog里面的之前的那些文章都是基础,所以比较杂乱一点,但是在我们反汇编BIOS的阶段全部都会用上的。呵呵。。。如果您对反汇编

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值