2008/7/14 shell909090 <[EMAIL PROTECTED]>: >> http://download.intel.com/design/processor/manuals/253668.pdf >> chapter 9.1.4 >> >> 9.1.4 First Instruction Executed >> The first instruction that is fetched and executed following a hardware >> reset is >> located at physical address FFFFFFF0H. This address is 16 bytes below the >> processor's uppermost physical address. The EPROM containing the software- >> initialization code must be located at this address. >> The address FFFFFFF0H is beyond the 1-MByte addressable range of the >> processor >> while in real-address mode. The processor is initialized to this >> starting address as >> follows. The CS register has two parts: the visible segment selector >> part and the >> hidden base address part. In real-address mode, the base address is >> normally >> formed by shifting the 16-bit segment selector value 4 bits to the >> left to produce a >> 20-bit base address. However, during a hardware reset, the segment >> selector in the >> CS register is loaded with F000H and the base address is loaded with >> FFFF0000H. The >> starting address is thus formed by adding the base address to the >> value in the EIP >> register (that is, FFFF0000 + FFF0H = FFFFFFF0H). >> The first time the CS register is loaded with a new value after a >> hardware reset, the >> processor will follow the normal rule for address translation in >> real-address mode >> (that is, [CS base address = CS segment selector * 16]). To insure that >> the base >> address in the CS register remains unchanged until the EPROM based >> software- >> initialization code is completed, the code must not contain a far jump >> or far call or >> allow an interrupt to occur (which would cause the CS selector value >> to be changed). >> >> >> > > 首先纠正我刚刚话的一个错误,the base address is normally formed by shifting the 16-bit > segment selector value 4 bits to the left to produce a 20-bit base > address。左位移是4位,不是8位。[CS base address = CS segment selector * 16] > 很明显,写着话的家伙是昏头了。请看这句,However, during a hardware reset, the segment selector > in the CS register is loaded with F000H and the base address is loaded with > FFFF0000H. The starting address is thus formed by adding the base address to > the value in the EIP register (that is, FFFF0000 + FFF0H = > FFFFFFF0H)。OK,大家算算,CS是F000H,左移4位,加 上FFFF0000H,算式应当是F0000H+FFFF0000H= > 1000E0000H。后面那个算式怎么出 来的? >
最开始的时候base的值不是按照这个rule来计算的,而是预设好的FFFF0000H,要等CS被第一次load以后才会按照这个rule计算base -- Regards! Star Shanghai, China

