移位指令与前面介绍的按位操作指令一起形成了汇编语言最显著的特点之一。位移动 (bit shifting) 意味着在操作数内向左或向右移动。
x86 处理器在这方面提供了相当丰富的指令集如下表所示,这些指令都会影响溢出标志位和进位标志位。
SHL | 左移 | ROR | 循环右移 |
SHR | 右移 | RCL | 带进位的循环左移 |
SAL | 算术左移 | RCR | 带进位的循环右移 |
SAR | 算术右移 | SHLD | 双精度左移 |
ROL | 循环左移 | SHRD | 双精度右移 |
移动操作数的位有两种方法。第一种是逻辑移位 (logic shift),空出来的位用 0 填充。如下图所示,一个字节的数据向右移动一位。也就是说,每一位都被移动到其旁边的低位上。注意,位 7 被填充为 0: