2017-01-12 69 views
0

理論上我有英特爾8086,我想執行這個指令:機器週期中的x86 CPU的彙編指令後

add [2000], 6 (or in AT&T syntax: addw $6, 2000) 

我也知道:在2000值

  • 是2
  • 在3000是寄存器CS
  • 在6000是寄存器DS
  • 在1000是寄存器IP

現在我想在這個CPU中描述機器週期:執行&執行。

我知道它的外觀在理論上:

取:

  • 從內存中取出指令
  • 解碼指令,以確定操作是否必要
  • 從內存中獲取數據

執行:

  • 如果需要

但我不知道它的外觀與真正的CPU寄存器和彙編代碼在內存中的數據

  • 店執行操作的結果。你能解釋一下嗎?

  • +0

    您可能想要指定是否指字節添加或單詞添加。我已經任意決定要添加一個單詞。 – fuz

    +1

    真實世界太複雜了,無法在StackOverflow上回答。你可以在[Agner Fog的網站](http://agner.org/optimize/)上獲得一個開始。 「Intel,AMD和VIA CPU的微架構」是一個好的開始。 –

    +0

    @RaymondChen OP特別說他有一個8086. – fuz

    回答

    2

    內存或寄存器中的值無關緊要。當

     add  word ptr ds:[02000h],00006h 
    

    被執行時,CPU從位置2000的16位值2到內部(未命名)寄存器,添加6到2,並且存儲和存儲16位的值8到位置2000(小端格式)。至少有兩個網站顯示這是23個週期(17爲指令+6爲有效尋址)。

    +0

    如果'cs:ip'在讀取前是'3000:1000',那麼在讀取&解碼(執行之前)之後'cs:ip'將是'3000:1005'。 (如果我正確地猜測了16b操作碼)。 – Ped7g