为什么任何现代x86掩码将计数移位到CL中的低5位

问题描述 投票:2回答:3

我正在研究x86 ASM中的左右移位操作,例如shl eax, cl

摘自IA-32英特尔架构软件开发人员手册3

全部IA-32处理器(从Intel 286处理器开始)确实掩盖了这一转变计数到5位,导致最大计数为31。此掩码为在所有操作模式(包括虚拟8086模式)下完成减少指令的最大执行时间。

我正试图了解这种逻辑背后的原因。也许它是这样工作的,因为在硬件级别上,很难使用1个周期实现寄存器中所有32(或64)位的移位?

任何详细的说明都会有很大帮助!

assembly x86 cpu-architecture bit-shift cpu-registers
3个回答
4
投票
很高兴听到286被描述为“现代” :-)

8086在8个时钟中运行了SHL AX, CL +每移位4个时钟。因此,如果CL = 255,这是一条非常慢的指令!


0
投票
我不认为将32位寄存器移位32比移位31位更难。从数学的角度来看,

saturate


0
投票
对于电子产品;如果移位计数恒定,则可以不进行任何操作(就像将“输入位0”的导线连接到“输出位1”的导线,等等)。
© www.soinside.com 2019 - 2024. All rights reserved.