移位指令与前面介绍的按位操作指令一起形成了汇编语言最显著的特点之一。位移动 (bit shifting) 意味着在操作数内向左或向右移动。x86 处理器在这方面提供了相当丰富的指令集如下表所示,这些指令都会影响溢出标志位和进位标志位。
| 英文全称 | 汇编指令 | 中文翻译 | 说明 | 意义 |
| Shift Logical Left | SHL | 逻辑左移 | 目标操作数整体向左移指定次数,最后一个被移出来的位放入CF标志位(CY),目标操作数右边相应补0。 | 位元乘法 |
| Shift Logical Right | SHR | 逻辑右移 | 目标操作数整体向右移指定次数,最后一个被移出来的位放入CF标志位(CY),目标操作数左边相应补0。 | 位元除法 |
| Shift Arithmetic Left | SAL | 算术左移 | 目标操作数整体向左移指定次数,最后一个被移出来的位放入CF标志位(CY),目标操作数右边相应补0。 | 与SHL完全相同 |
| Shift Arithmetic Right | SAR | 算术右移 | 目标操作数整体向右移指定次数,最后一个被移出来的位放入CF标志位(CY)。 目标操作数左边相应补0或1,取决于被移动前MSB是什么。意味着符号位可以保留。 | |
| Rotate Left | ROL | 循环左移 | 目标操作数循环向左移,最左边(MSB)被移出来的数字放入CF标志位,同时循环回最右边(LSB)。 | |
| Rotate Right | ROR | 循环右移 | 目标操作数循环向右移,最右边(LSB)被移出来的数字放入CF标志位,同时循环回最左边(MSB)。 | |
| Rotate With Carry Left | RCL | 带进位的循环左移 | 将CF位放到目标操作数的最左边,一起参与循环,从CF位移出去的数字循环回LSB。 | |
| Rotate With Carry Right | RCR | 带进位的循环右移 | 将CF位放到目标操作数的最右边,一起参与循环,从CF位移出去的数字循环回MSB。 | |
| Shift Left Double Precision | SHLD | 双精度左移 | ||
| Shift Right Double Precision | SHRD | 双精度右移 | ||
| Least Significant Bit | 最低比特位 | LSB,在一个或多个字节中最右边的那一位,最低位。 | ||
| Most Significant Bit | 最高比特位 | MSB,在一个或多个字节中最左边的那一位,最高位。 |



本文详细介绍了x86处理器中的位移和旋转指令,包括逻辑左移(SHL/SAL)、逻辑右移(SHR)、算术右移(SAR)、循环移位(ROL/ROR)以及带进位的循环移位(RCL/RCR)。这些指令影响着溢出和进位标志位,并在位操作中起到关键作用,如位元乘法和位元除法。此外,还提到了双精度左移(SHLD)和右移(SHRD)指令。

1万+

被折叠的 条评论
为什么被折叠?



