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

本文详细解析了BIOS中_F000:F600处的Chipset_Reg_Init_Early函数,该函数通过ROM_CALL调用来初始化芯片组寄存器。通过对汇编代码的反汇编和注释,展示了如何获取和设置PCI总线上的寄存器值,以及初始化过程中涉及的表格结构。通过对表格中的地址和值进行操作,实现了对芯片组的初始化,包括GPIO、SMBUS控制器等寄存器的配置。
摘要由CSDN通过智能技术生成

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

--initialize some chipset register

By Lightseed

5/13/2010

在上一篇中,我和大家探讨了下面代码中的BT_CPU_Init这个函数,它主要是一些特殊CPUmicro codeupdate。那么我们继续往下走,就会发现初始化chipset寄存器的函数,如_F000:E1C3这行所示。这里是用ROM_CALL来调用的。

_F000:E1B8       mov    sp, 0E1BEh       ; First Use ROM_CALL

_F000:E1BB       jmp    BT_CPU_Init       ; Save esp (Return    Address)

_F000:E1BB ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:E1BE       dw 0E1C0h

_F000:E1C0 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

Call    Chipset_Reg_Init_Early ;伪代码

Chipset_Reg_Init_Early函数的代码要反汇编也很容易啦,双击或者是点中它回车即可。反汇编并加注如下:

; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:F600

_F000:F600 Chipset_Reg_Init_Early:        ; CODE XREF:   _F000:E1C3j

_F000:F604       mov    si, 0F6DCh        ; Get the chipset register initial table offset

_F000:F607

_F000:F607 Init_Chipset_Ren_loop:         ; CODE XREF:   _F000:F629j

_F000:F607       mov    cx, cs:[si]       ; Get the DEV#,FUNC#,REG#

Call    Get_Pci_Byte     ; ROM_CALL to get byte from chipset.伪代码,取回值存在AL

_F000:F612       and    al, cs:[si+2]

_F000:F616       or     al, cs:[si+3]

Call    Set_Pci_byte      ;伪代码

_F000:F622       add    si, 4

_F000:F625       cmp    si, 0F740h        ; Is   init table end?

_F000:F629       jnz    Init_Chipset_Ren_loop ; No, go on looping

上面这个函数其实注释已经把90%的内容都说清楚了,不过我还是要再强调一下其中的一点,在_F000:F604中,是为了找到一个table。在这个table中存放着一系列的寄存器的地址以及BIOS需要initialize的值。我详细加注如下:

Chipset_Reg_Init_table dw 0F01Ch   ; Bus 0# Dev  30#, Func 0#, Reg 1CH .PCI to PCI bridge  register 1ch

_F000:F6DE       db  0 ;          ; Clear all bit

_F000:F6DF       db  10h ;         ; Set the IO   base is    10h, it    means base address is 1000h

_F000:F6DF              

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值