哪些指令集架构存在模移位/非模移位特性?
回答
是存在这类架构的,不少经典RISC指令集的原生移位规则就是你描述的逻辑:无符号数移位位数超过操作数位宽时直接返回0,不做移位计数的取模运算,典型例子如下:
- ARMv7及更早的32位ARM架构:原生逻辑左移(
LSL)、逻辑右移(LSR)指令的移位计数≥32时,无符号操作数的移位结果直接为0。该规则在ARMv8之后的AArch64架构中被修改,现在AArch64也会对移位计数按操作数位宽取模。 - 32位MIPS架构:逻辑移位指令的移位计数超过31时,无符号操作数的移位结果直接清0,无取模操作。
- 早期32位PowerPC架构:同样遵循该规则,无符号数移位位数≥32时返回0。
补充说明:
x86的移位计数取模规则本质是兼容早期8086的硬件实现,当年8086的移位电路只会读取CL寄存器的低5位/低6位对应16位/32位操作数的移位计数,硬件层面天然等价于取模运算。而早期RISC架构设计追求单周期指令执行,移位电路做全位宽判断的实现成本更低、速度更快,所以才采用了超限直接清0的规则。
要注意上述规则仅针对无符号数的逻辑移位,大部分架构的有符号数算术右移即便移位位数超限,也会保留符号位做全位宽填充,不会返回0。
内容的提问来源于stack exchange,提问作者Bonita Montero
相关产品推荐
相关产品推荐

