2012-02-02 152 views
4

我正在閱讀intel微處理器第8版。指令指針是一個程序可見的寄存器嗎?

enter image description here

通過酷睿2 8086的編程模型被認爲是編程模型是程序可見,因爲它的寄存器應用程序中使用:我碰到下面的文字來編程並由指令指定。本章後面詳細介紹的其他寄存器被認爲是程序不可見,因爲它們在應用程序編程期間不能直接尋址,但可以在系統編程期間間接使用。

這引起人們認爲8086和8088中的所有指令都是程序可見寄存器,包括指令指針。是這樣嗎?

回答

6

不能直接觸摸指令指針,但如果你用一個簡單的技巧需要你可以得到它:

fetch_eip: mov eax, [esp] 
      ret 

然後:

call fetch_eip 

這會把值(因爲當你調用fetch_eip時,無論堆棧指針esp被引用的是什麼),指令指針eip

eip作爲mov操作的目標是無效的,因此您無法直接撥打eip。影響它的唯一方法是跳轉操作,調用操作(如此技巧所利用的)以及其他一些有限的情況。

+4

值得注意的是,在x86-64上,你可以直接用''rax,[rip]''讀取'rip'的值。 – 2012-02-02 15:20:25

1

指令指針是一種特殊用途寄存器,看到這篇文章對於所有的8086個寄存器列表:Inside the 8086 Central Processor Unit (CPU)

一般沒有理由爲IP爲「程序可見」。其值會受到影響控制流程的任何指令的代碼的影響,例如calljmp。 IP的實際價值不應該被要求。