首页 文章

指令如何适合x86上的指令寄存器?

提问于
浏览
0

我读到x86 CPU的可变指令长度为1到15个字节 . 另一方面,还写出x86字长为32位,这意味着所有寄存器,包括保存实际指令的指令寄存器,都是32位宽(4字节) .

这意味着指令可以比指令寄存器更宽 . 这怎么样?此外,我了解到在执行指令后,不跳转,指令计数器增加4.这意味着它假设每条指令长4个字节 . 这怎么样?

我希望有人可以为我澄清这一点 .

1 回答

  • 1

    x86有一个非常复杂的操作码解析器,具有多个状态 . 首先,它查找遗留前缀,如 REPLOCK ,地址和操作数覆盖前缀,可能只是设置内部标志 . 然后它查找强制和rex前缀,并可能设置其他内部标志 . 在此之后,解析器需要实际指令...或0x0f前缀以获得更多指令 . 即使这个指令字节可能包含其他数据,例如寄存器也可以在那里编码,因此根据指令的最高三位(0bxxx .....),解析器必须决定指令是否编码寄存器(例如, 0b000xxx110: push xxx ,其中xxx是 escsssds ) . 根据指令,解析器然后查找ModR / M字段并对其进行评估 . 当这个ModR / M字段指示时,有一个SIB字段,然后,猜测是什么?,它评估SIB字段 . 取决于指令,ModR / M-field或SIB-field,最后可以是立即偏移和/或立即值 .

    我不知道,处理器如何实际存储这些东西 . 也许存在指令寄存器,标志寄存器,寄存器,存储目标寄存器号,寄存器用于立即值和某种使用地址的表示 .

    无论如何,没有这个指令寄存器,你可能听说过RISC处理器,即使因为通用寄存器的长度是64位,其他寄存器也不一定是这个大小 . 例如 . Streaming SIMD Extensions提供xmm寄存器,大小为128位 . 它们可以包含完整的15字节有效x86指令 .

    你可以找到the structure of this parser on page 5 here .

相关问题