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

本文深入解析BIOS在内存初始化前的准备工作,包括CPU快速字符串检测、CMOS基本配置的初始化。通过CPUID检测CPU特性,并根据支持情况决定是否启用Fast string功能。同时,介绍了CMOS的初始配置步骤,以及使用表格形式初始化DMA和8259的具体算法和内容。
摘要由CSDN通过智能技术生成

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

-- Memory initial 之前的一些初始化DMA8259

By Lightseed

5/20/2010

1BIOS的主流程

为什么会有bootblock和非bootblock这么一说呢?其实就是因为有没有真正的内存可以用的区别。这个章节里我们一起来看看经过之前那些章节的讨论后,BIOS在初始化memory之前会做的一些动作。(稍微比较琐碎点,看起来比较枯燥。)

1 BIOS主流程

2、确实是Normal后的第一个JMP

从下面的这段code中我们来研究一下,_F000:E1FC这里是的SP指向E200H地址,且我们看看在E200H这里这里存储的数据是E292H,注意了,这里可不是E202H哦。执行retn后,那么CPUIP寄存器就变成了E292H了,那么CPU就会从此处取code来执行。(可不要犯了ROM_CALL的定势思维。)

_F000:E1F8 Not_Resume_From_Sx:                     ; CODE XREF: _F000:E1D3j

_F000:E1F8                                         ; _F000:E1EDj ...

_F000:E1F8                 mov     al, 0C0h ; '?

_F000:E1FA                 out     80h, al         ; manufacture's diagnostic checkpoint

_F000:E1FC                 mov     sp, 0E200h

_F000:E1FF                 retn

_F000:E1FF ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:E200                 dw 0E292h

3CPU Fast stringdetect以及CMOS的初始化

_F000:E292 Go_on_bios:

。。。。。。。。。。。。。

_F000:E29D                 jmp     Fast_string_If_open

_F000:E29D ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:E2A0                 dw 0E2A2h

_F000:E2A2 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

_F000:E2A2                 mov     al, 8Bh ; '?   ; CMOS REGISTER 0B: Default is all interrupts(AIE,PIE) turned off,

_F000:E2A2                                         ; date is in BCD format, time is in 24-hour mode, daylight savings

_F000:E2A2                                         ; time is disabled.

_F000:E2A4                 mov     ah, 2

Call     Set_CMOS      ;伪代码

_F000:E2AE                 mov     al, 8Ah ; '?   ; CMOS REGISTER 0A: Default is stage divider at 32.768 kHz, divider

_F000:E2AE                                         ; output at 1.024 Khz, interrupting every 976.562 microseconds

_F000:E2B0                 mov     ah, 26h ; '&'

Call     Set_CMOS      ;伪代码

上面这段code主要做了两件事情,一个是检测CPUfast string是否支持。另外一个是初始化CMOS的基本配置。

3.1 CPUfast string

还是来看我们反汇编出来的code吧。

_F000:E6AB ;------------------------------------------------------------------------------------

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值