一、算术移位运算
算术左移 (shift arithmetic left)
SAL reg/mem, CL/Imm
每位左移, 低位补 0, 高位进 CF
例如: 0100 0101 CF=0 算术左移3位
1 -> 1000 1010 CF = 0
2 -> 0001 0100 CF = 1
3 -> 0010 1000 CF = 0
算术右移 (shift arithmetic right)
SAR reg/mem, CL/Imm
每位右移, 高位补符号位, 低位进 CF
例如: 1100 0101 CF=0 算术右移3位
1 -> 1110 0010 CF=1
2 -> 1111 0001 CF=0
3 -> 1111 1000 CF=1
二、逻辑移位运算
逻辑左移(shift logical Left)
SHL reg/mem, CL/Imm
每位左移, 低位补 0, 高位进 CF
例如: 0100 0101 CF=0 算术左移3位
1 -> 1000 1010 CF = 0
2 -> 0001 0100 CF = 1
3 -> 0010 1000 CF = 0
逻辑右移 (shift logical right)
SHR reg/mem, CL/Imm
每位右移, 高位补0, 低位进 CF
例如: 1100 0101 CF=0 逻辑右移3位
1 -> 0110 0010 CF=1
2 -> 0011 0001 CF=0
3 -> 0001 1000 CF=1
三、循环移位运算
循环左移(rotate left)
ROL reg/mem, CL/Imm
每位左移, 高位填充到低位, 高位进 CF
例如: 0100 0101 CF=0 循环左移3位
1 -> 1000 1010 CF = 0
2 -> 0001 0101 CF = 1
3 -> 0010 1010 CF = 0
循环右移 (rotate right)
ROR reg/mem, CL/Imm
每位右移, 低位填充到高位, 低位进 CF
例如: 1100 0101 CF=0 循环右移3位
1 -> 1110 0010 CF=1
2 -> 0111 0001 CF=0
3 -> 1011 1000 CF=1
四、带进位循环移位运算
带进位循环左移(rotate through carry left)
RCL reg/mem, CL/Imm
每位左移, CF填充到低位, 高位进 CF
例如: 0100 0101 CF=0 带进位循环左移3位
1 -> 1000 1010 CF = 0
2 -> 0001 0100 CF = 1
3 -> 0010 1001 CF = 0
带进位循环右移 (rotate through carry right)
RCR reg/mem, CL/Imm
每位右移, CF填充到高位, 低位进 CF
例如: 1100 0101 CF=0 带进位循环右移3位
1 -> 0110 0010 CF=1
2 -> 1011 0001 CF=0
3 -> 0101 1000 CF=1