例题
思路
选择移位语句,右移,将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) 循环左移
ROR(rotat right) 循环右移
带进位循环移位
注意顺序!!!先移位,再将CF(进位标志位)复制到LSB(MSB),最后将被移除的值送入CF。
所以这里作为转存的寄存器是有两个的,一个是CF,一个我不知道是啥,设为X吧。
此时,我们反过来推导一波例题:
总结
通过例题学习了常见的几种移位操作。