例题

题目要求

思路

选择移位语句,右移,将AL移出的送入DX左端,将BL移出的送入DX左端。循环八次

MOV AL,01100101B;
MOV BL,11011010B;
XOR DX,DX;两个值相同,异或结果为0。等效:MOV DX,0 
MOV CX,8;count
L1: 
 SHR AL,1;逻辑右移,左边补0, 
 RCR DX,1;带进位循环右移,右端被舍弃掉的补回左端
 SHR BL,1;右移 
 RCR DX,1;右移; 
 LOOP L1 
 
 ;AL的1被移出,送入CF中
 ;DX的左端被CF填入,然后右端0送入CF中;
 ;BL的0被移出,送入CF中    
 ;DX的左端被CF填入,然后右端0送入CF中;
 ;至此,一个循环结束,进行八次循环完成数据转移

指令讲解

移位操作分为三类:算术移位,逻辑移位,循环移位

逻辑移位是指逻辑左移和逻辑右移,移出的空位都用0来补。
SHL(shift logical left):逻辑左移
SHR(shift logical right):逻辑右移

算术移位
对于无符号型值,算术移位等同于逻辑移位。
对于有符号型值 ,算术左移等同于逻辑左移。
算术右移补的是符号位,正数补0,负数补1。
SAL(shift arithmetic left) :算术左移
SAR(shift arithmetic right) :算术右移

循环移位
ROL(rotat left) 循环左移
1
ROR(rotat right) 循环右移
2

带进位循环移位
1

2
注意顺序!!!先移位,再将CF(进位标志位)复制到LSB(MSB),最后将被移除的值送入CF。
1
所以这里作为转存的寄存器是有两个的,一个是CF,一个我不知道是啥,设为X吧。
此时,我们反过来推导一波例题:
过程

总结

通过例题学习了常见的几种移位操作。