x86 cmp寄存器和内存 - 保存中间数据的位置?

时间:2014-07-20 16:46:48

标签: assembly x86 emulation

假设我有这样的汇编指令:

cmp sp 100h

我尝试重现x86 cpu在执行期间执行的逻辑步骤。就像这个schema一样。 cpu在哪里存储立即值100h?在此链接上使用了名为 accumulator (AC)的内容。在ALU中执行比较之前是否有通用寄存器(EAX?)或额外的寄存器来保存这些数据?

1 个答案:

答案 0 :(得分:2)

你的问题有些令人困惑,但我会尝试回答。

编码汇编指令时,立即数据通常在指令本身中编码。例如

cmp     esp,100h
81 fc00010000    

如果我们检查cmp编码,我们会看到81是操作码的第一个字节,其中包含对32位寄存器的引用,以及一个4字节的立即数。

跳过你的比较来获取/解码/执行/存储以及你对CPU获取的评论,现代CPU的复杂程度要高得多。

可以说(在此范围内)x86指令获取很复杂,因为x86操作码是可变长度的。这意味着CPU知道需要获取N个字节,在这种情况下为6个字节(操作码为1,第一个操作数为1,立即值为4)。

现在"持有"立即值是特定于实现的,但在这种情况下,我希望它将被编码到实际的"指令" CPU执行。在某些情况下,数据会保存到临时寄存器中。


关于所有这些内容的好书,更多的是Inside the Machine by Jon Stokes