目录
逻辑右移SHR
算数右移SAR(重点)
算数/逻辑左移SAL/SHL(完成的操作都一样)
循环右移ROR
循环左移ROL
带进位循环右移RCR
带进位循环左移RCL
总结
例题
一
二
移位指令为双操作数指令,用于将目的的操作数中的二进制数移位。
目的操作数只能是寄存器或内存
源操作数为移位的次数,只能是CL寄存器或者立即数1
移动完,CL的值不变
逻辑右移SHR
shift right
无符号数除以2
MOV AL,10 SHR AL,1 ;0000 1010(10) ;移动后 ;0000 0101;(5) CF=0 SHR是对于无符号数,开头直接补0即可
算数右移SAR(重点)
完成了带符号数除以2
shift arithmetic right
MOV AL,80H;(-128) SAR AL,1 ;1000 0000 ;移动后 ;1100 0000 (-64) ;补的是符号位,最低位移入CF,CF=0
算数/逻辑左移SAL/SHL(完成的操作都一样)
完成的是×2的操作不论是有符号还是无符号数
MOV AL,08H SHL AL,1 ;0000 1000 ;左移后 ;0001 0000; 末尾补0,最高位移入CF,CF=0
MOV AL,0FFH(-1) SHL AL,1 ;1111 1111 ;移动后 ;1111 1110(-2)末尾补零,最高位移入CF=1
循环右移ROR
Rotate Right
循环左移ROL
Rotate left
带进位循环右移RCR
rotate carry right
这时候CF很重要,先把原来CF的值移入最高位,在把最低位的值移出给CF
带进位循环左移RCL
rotate carry left
总结
移出的位都去CF
移位次数>1,次数必须放CL
SHL AL,4;错误;正确 MOV CL,4 SHL AL,CL
例题
一
MOV CL,04
SHL DX,CL
MOV BL,AH
SHL AX,CL
SHR BL,CL
OR DL,BL
该程序段的功能是(DX和AX组合形成的32位数左移4位);若DX为1234H,AX为5678H,则程序运行后AX=(6780H)
二
执行下面程序后,AX=(60)
MOV AL,6
MOV AH,0
SAL AX,1
MOV BL,AX
SAL AL,1
SAL AL,1
ADD AX,BX