我正在研究x86 ASM中的左右移位操作,例如shl eax, cl
摘自IA-32英特尔架构软件开发人员手册3
全部IA-32处理器(从Intel 286处理器开始)确实掩盖了这一转变计数到5位,导致最大计数为31。此掩码为在所有操作模式(包括虚拟8086模式)下完成减少指令的最大执行时间。
我正试图了解这种逻辑背后的原因。也许它是这样工作的,因为在硬件级别上,很难使用1个周期实现寄存器中所有32(或64)位的移位?
任何详细的说明都会有很大帮助!
8086在8个时钟中运行了SHL AX, CL
+每移位4个时钟。因此,如果CL
= 255,这是一条非常慢的指令!
saturate