2017-01-12 68 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