|
发表于 2011-4-22 23:02:44
|
显示全部楼层
有点疑问
从IA32中的相关章节我们可以了解到,当上电一切就绪后,CPU的状态其实是实模式,但是在寻址的时候却用了big real mode的寻址方式去做。因为reset后CPU的CS默认是段选择子,而且它的值是F000H。当我们用F000H去选择CS的时候,CPU在计算地址的时候是用了CS的base(为0FFFF0000H),且此时的EIP默认是FFF0H,所以CPU计算好后才是从FFFFFFF0H处去取指令。一般我们在BIOS中都在这里是用了FAR jump来显示地修改CS的值,这样就可以真正的进入real mode模式了。CPU寻址才会是segment:offset的寻址方式。相应章节在IA32 programming guide 3A的Processor Built-In Self-Test (BIST)。
9 q# s; u n9 M/ E* T9 R# ~0 @# d, G/ S. N
3 [1 V- o4 e. t' J9 w, u/ z. H' h# [
cpu 第一条指令是在0xFFFFFFF0 是毫无疑问的,这就要求rom 必须映射在这个地址上,这里一般就是far jump, 来显示地修改CS的值,这样就可以真正的进入real mode模式了, 而在这种模式下寻址只能到1m 多一点, 那他怎样能执行rom 里的代码, 除非是rom 被映射到两个地址上了。 是不是这样呢,那位高人指点一下。 |
|