CS、IP和PC暫存器

韓運暢發表於2020-11-25
CS、IP和PC暫存器
  CS暫存器和IP暫存器:

  首先強調一下,這兩個暫存器非常非常重要,CS的全拼為“Code segment”,即程式碼段暫存器,對應於記憶體中的存放程式碼的記憶體區域,用來存放記憶體程式碼段區域的入口地址(段基址)。

  CPU在執行指令時,通過程式碼暫存器CS和指令指標暫存器IP(instruction Pointer)來確定要執行的下一條指令的記憶體地址。

  CS:IP 兩個暫存器指示了CPU當前要賭氣的指令地址,計算方式一般為CS左移4位然後加上IP暫存器,作為地址去取內容。

  CPU的製造商會為這兩個暫存器設定出廠初始值,這2個初始值,其實就決定了第一條執行指令的地址,這是所有程式的源頭,沒有這個初始值,多麼複雜精妙的程式都沒用,因為CPU壓根就不會鳥你。隨著X86的發展,第一條指令並不是一成不變的,

  (1)8086:CPU reset後CS暫存器的值為0xFFFF,IP暫存器的值為0,所以將CS左移4位+IP,換算出的實體地址為0xFFFF0,這個地址就是

        1MB往下16位元組的位置。

  (2)80286:CPU reset之後CS的只為0xF000,IP的只為0xFFF0,演算法同樣是CS左移4位+IP,計算出的實體地址也是0xFFFF0

  (3)80386:到了386年代,一切都變了,此時CPU reset後CS的只為0xF000,但是CS除了段選擇之外還有一個隱藏的基址暫存器,這個寄存

     器的值為0xFFFF0000,IP的值仍然為0xFFF0,此時的計算演算法也不是上面的左移4位了,而是0xFFFF0000 + 0xFFF0 = 0xFFFFFFF0

     ,這個地址已經是很高的地址了,是4G往下16位元組的位置。

  PC是非intel廠家對IP的稱呼,也就是說PC起始跟CS:IP是一回事兒。

相關文章