X86 CPU First instruction Executed

FollowerS發表於2013-04-22
     跟隨著硬體復位, X86 CPU第一條指令在實體地址FFFFFFF0H被提取和執行。這個地址即是出於CPU的最高實體地址4G減去16個位元組的地方。BIOS初始化程式碼必起始於該地址。
    在真實模式下,地址FFFFFFF0H在CPU 可定址的1M位元組範圍之外。那麼CPU是怎樣初始化到這個開始地址,請看下面描述。CS register由兩部分組成:可見的段selector和隱藏的段基地址部分。在真實模式下,段基地址一般是由16-bit的段selector值左移4bits來產生20-bit的段基地址。然而,在一次硬體復位的過程中,在CS中的段selector被裝載成F000H,而且段基地址被裝載為FFFF0000H。所以CPU開始地址就是段基地址的值加上在EIP register中的值(即FFFF0000H + FFF0H = FFFFFFF0H )。
    在一次硬體復位後,CS register 第一次被裝載為一個新的值,在真實模式下,CPU會遵循正常的規則去進行地址轉換(那就是,CS base address = CS Segsent selector * 16)。為了保證在CS resgister中的段基地址不變直到基於BIOS初始化程式碼的Eprom被完成,在其中,不允許有導致CS selector值發生改變的far jump or far call,or interrupt產生。
       

相關文章