|
发表于 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)。
5 L7 }. r' ?8 Y3 p# r! T
1 l, T3 n& }. d& R" X3 c' }8 w% W" T/ e" k5 N
cpu 第一条指令是在0xFFFFFFF0 是毫无疑问的,这就要求rom 必须映射在这个地址上,这里一般就是far jump, 来显示地修改CS的值,这样就可以真正的进入real mode模式了, 而在这种模式下寻址只能到1m 多一点, 那他怎样能执行rom 里的代码, 除非是rom 被映射到两个地址上了。 是不是这样呢,那位高人指点一下。 |
|