资料来源:网络整理
时间:2023/2/17 15:36:50 共计:3644 浏览
SHL(左移)指令使目的操作数逻辑左移一位,最低位用 0 填充。最高位移入进位标志位,而进位标志位中原来的数值被丢弃:
若将 1100 1111 左移 1 位,该数就变为 1001 1110:
SHL 的第一个操作数是目的操作数,第二个操作数是移位次数:
SHL destination,count
该指令可用的操作数类型如下所示:
SHL reg, imm8
SHL mem, imm8
SHL reg, CL
SHL mem, CL
x86 处理器允许 imm8 为 0?255 中的任何整数。另外,CL 寄存器包含的是移位计数。上述格式同样适用于 SHR、SAL、SAR、ROR、ROL、RCR 和 RCL 指令。
【示例】下列指令中,BL 左移一位。最高位复制到进位标志位,最低位填充 0:
mov b1, 8Fh ; BL = 10001111b
shl bl, 1 ; CF = 1, BL = 00011110b
当一个数多次进行左移时,进位标志位保存的是最后移岀最高有效位(MSB)的数值。下例中,位 7 没有留在进位标志位中,因为,它被位 6(0)替换了:
mov al, 10000000b
shl al, 2 ; CF = 0, AL = 00000000b
同样,当一个数多次进行右移时,进位标志位保存的是最后移出最低有效位(LSB)的数值。
位元乘法
数值进行左移(向 MSB 移动)即执行了位元乘法(Bitwise Multiplication)。例如,SHL 可以通过 2 的幕进行乘法运算。任何操作数左移 n 位,即将该数乘以 2
n。现将整数 5 左移一位则得到 5 x 2¹ = 10:
mov dl, 5 ; 移动前:00000101 = 5
shl dl, 1 ; 移动后:00001010 = 10
若二进制数 0000 1010(十进制数 10)左移两位,其结果与 10 乘以 2² 相同:
mov dl, 10 ;移动前:00001010
shl dl, 2 ;移动后:00101000

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。