假设我有这样的汇编指令:
cmp sp 100h
我尝试重现x86 cpu在执行期间执行的逻辑步骤。就像这个schema一样。 cpu在哪里存储立即值100h
?在此链接上使用了名为 accumulator (AC)的内容。在ALU中执行比较之前是否有通用寄存器(EAX?)或额外的寄存器来保存这些数据?
答案 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