维基百科关于重置向量的页面(适用于386+处理器):CS寄存器的选择器部分值在重置时为F000h,CS寄存器的基址部分值为FFFF0000h,在实模式下,重置时IP寄存器的值为FFF0h,形成分段地址FFFFF000h:FFF0h。我阅读有关计算机启动的所有文献都说处理器以实模式启动,因此“选择器”不应涉及。那么为什么这里提到了选择器?还有,这里所指的“基址部分”是什么,并存储在哪个寄存器中?基本上,我不明白386处理器与之前的处理器如何设置重置向量。
8086/80186 (16-bit): 0xFFFF:0x0000
80286 (16-bit): 0xF000:0xFFF0
80386+ (32-bit): 0xFFFFF000:0xFFF0
(64-bit): 0xFFFFFFFFFFFFF000:0xFFF0
基本上,在80286和更高版本的处理器上,偏移量和段值是相同的,除了在32位和64位处理器上,段值被符号扩展。
是的,在上电后,所有x86 CPU都处于Real Mode下,但在找到CS赋值之前会有奇怪的行为!!!。
读完一些x86文档,这些是事实:
上电后,'CS register'、'CS cache register'和'EIP'的初始值为:
CS= F000h (16位宽度,应该始终如此!)
CS_segment_start_address= FFFF_0000h (一个32位的值,指向RAM中的某个位置?)。 CS_segment_lenght= 0_FFFFh (20位大小值,是的,这是64KB)。
CS_segment在内存中是'Present'。
CS_segment是一个'可读/可写'的块。
CS_segment已经被'访问'。
EIP= 0000_FFF0h
现在,请注意以下生命的事实。
==SOF==(事实开始)
在获取新指令时(无论处于哪种模式:实模式、保护模式等),似乎硬件寻址逻辑始终使用某些“CS缓存寄存器”值来确定要放置在地址总线引脚上的地址。具体来说: