如何将指令放入x86上的指令寄存器?

如何将指令放入x86上的指令寄存器?,x86,cpu-architecture,X86,Cpu Architecture,我了解到x86 CPU的可变指令长度为1到15字节。另一方面,还写入x86字大小为32位,这意味着所有寄存器,包括保存实际指令的指令寄存器,都是32位宽的4字节 这意味着指令可以比指令寄存器更宽。这件合适吗?此外,我还了解到,在执行一条指令后,指令计数器将不跳跃地递增4。这意味着它的操作假设每条指令都有4字节长。这是怎么回事 我希望有人能为我澄清这一点 x86有一个相当复杂的操作码解析器,具有多个状态。首先,它查找传统前缀,如REP、LOCK、address和operand-override前缀

我了解到x86 CPU的可变指令长度为1到15字节。另一方面,还写入x86字大小为32位,这意味着所有寄存器,包括保存实际指令的指令寄存器,都是32位宽的4字节

这意味着指令可以比指令寄存器更宽。这件合适吗?此外,我还了解到,在执行一条指令后,指令计数器将不跳跃地递增4。这意味着它的操作假设每条指令都有4字节长。这是怎么回事


我希望有人能为我澄清这一点

x86有一个相当复杂的操作码解析器,具有多个状态。首先,它查找传统前缀,如REP、LOCK、address和operand-override前缀,可能只是设置内部标志。然后,它查找强制前缀和rex前缀,并可能设置其他内部标志。在此之后,解析器期望实际指令…或0x0f前缀用于更多指令。甚至这个指令字节也可能包含其他数据,例如寄存器可以在那里编码,因此取决于最高的三位0bxxx。。。。。对于指令,解析器必须决定指令是否对寄存器进行编码,例如0b000xxx110:push xxx,其中xxx是es、cs、ss还是ds。根据指令,解析器然后查找ModR/M字段并对其求值。当此ModR/M字段指示存在SIB字段时,猜猜看是什么?它会计算SIB字段。根据指令的不同,ModR/M-field或SIB-field的末尾可能有立即偏移量和/或立即值

我不知道处理器是如何存储这些东西的。可能有一个用于指令的寄存器、一个标志寄存器、一个用于存储目标寄存器号的寄存器、一个用于立即数的寄存器和一些已用地址的表示

无论如何,对于RISC处理器,你可能听不到这个指令寄存器,即使仅仅因为通用寄存器的长度是64位,其他寄存器也不必是这个大小。例如,数据流单指令多数据扩展指令集提供128位的xmm寄存器。它们可以包含完整的15字节有效x86指令


您可以找到。

您正在将MIPS或其他一些不错的RISC概念与x86混合,我想,可能有一些相关的答案。如果您能将这些答案与我联系起来,那就太好了。我试图在谷歌上搜索,但不知道搜索哪个词。x86中没有包含指令的指令寄存器。x86字长为32位。出于历史原因,x86字长为16位。请参阅《英特尔手册》中的第4.1节“基本数据类型”。感谢您提供详细的答案,尽管有些术语我有点摸不着头脑。简言之,我的问题中有两个假设是错误的:1。x86有一个32位的指令寄存器。2.x86具有不同的解析方法,而不是指令计数器中的简单增量4。我正在读道格拉斯角的《计算机体系结构基础》。我的错误是,我自动推断书中的所有内容都适用于x86CPU。