【问题标题】:Machine cycles in x86 CPU after assembly instruction汇编指令后 x86 CPU 中的机器周期
【发布时间】:2017-05-28 05:57:41
【问题描述】:

理论上我有 Intel 8086,我想运行这条指令:

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

我也知道:

  • 2000 时的值为 2
  • 在 3000 是寄存器 CS
  • 6000 处是寄存器 DS
  • 在 1000 是注册 IP

现在我想描述这个 CPU 中的机器周期:获取和执行。

理论上我知道它的样子:

获取:

  • 从内存中获取指令
  • 解码指令以确定操作
  • 必要时从内存中获取数据

执行:

  • 对数据执行操作
  • 如果需要,将结果存储在内存中

但我不知道它在实际 CPU 寄存器和汇编代码中的外观。你能解释一下吗?

【问题讨论】:

  • 您可能需要指定您的意思是字节添加还是单词添加。我已经武断地决定你要加一个词。
  • 现实世界太复杂了,无法在 StackOverflow 上回答。您可以从Agner Fog's Web site 开始。 “英特尔、AMD 和威盛 CPU 的微架构”是一个好的开始。
  • @RaymondChen OP 特别说他有一个 8086。
  • 一个真正的 8086 需要 23 个周期来执行该指令,假设它已经在预取队列中并且没有内存等待状态。我认为它在任何地方都没有记录 8086 在这 23 个周期中到底在做什么,但是读取和写入内存各有 4 个周期,计算有效地址至少有 6 个周期。
  • @fuz 但标题是 x86,它涵盖的处理器不仅仅是 8086。

标签: assembly cpu cpu-architecture cpu-registers


【解决方案1】:

内存或寄存器中的值无关紧要。当

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

执行时,cpu 从位置 2000 读取 16 位值 2 到内部(未命名)寄存器中,将 2 加 6,并将 16 位值 8 存储并存储到位置 2000 中(小端格式)。至少有两个网站表明这需要 23 个周期(17 个用于指令 + 6 个用于有效寻址)。

【讨论】:

  • 如果cs:ip 在获取之前是3000:1000,那么在获取和解码之后(执行之前)cs:ip 将是3000:1005。 (如果我猜对了 16b 操作码)。
猜你喜欢
  • 2010-10-16
  • 2011-08-18
  • 1970-01-01
  • 2013-08-11
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2017-10-23
相关资源
最近更新 更多