【发布时间】:2017-02-18 16:36:45
【问题描述】:
举个例子:x86_64 CPU 读取 128 位指令。
据我了解,这基本上是 x86 处理器中发生的事情。 否则,例如,无法将 64 位数字添加到 64 位寄存器(操作码将占用几位 + 64 位的数字 > 64)。
我想知道的是指令中的位限制是多少,以及如果指令大于位(数据总线),如何读取指令。 此外,我也知道大多数 RISC CPU 使用固定大小的指令,所以如果你直接传递一个数字操作数,指令的大小是不是简单地翻了一番?
【问题讨论】:
-
在具有固定字指令大小的 RISC 上,通常没有指令加载“任何”立即数,只有一部分,然后由几条指令构建完整的立即数(如果不能使用这样的立即数,可以在单个负载中对其进行编码)。在 x86 上,指令大小不固定,并且指令长度根据需要:
movabs rax,0x123456789abcdef0 = 48 B8 F0 DE BC 9A 78 56 34 12= 10 字节(每个movabs rax,nn有 10B,即使在立即加载 0 时也是如此,因此每个操作码/操作数的指令大小甚至是固定的在 x86 上) -
每条指令的编码都在手册中。英特尔官方 PDF 的 HTML 摘录很方便:felixcloutier.com/x86。另请参阅 stackoverflow.com/tags/x86/info 以获取有关 x86 的其他链接。
-
很高兴知道 Ped7g。我对手册很熟悉,只是找不到直接的答案。