移位指令是一组经常使用的指令,包括:算数移位、逻辑移位、双精度移位、循环移位、带进位的循环移位;
移位指令都有一个指定需要移动的二进制位数的操作数,该操作数可以是立即数,也可以是CL的值;在8086中...,该操作数只能是1,但是在其后的CPU中,该立即数可以是定义域[1,31]之内的数;
一、算数移位指令:
算数移位指令分为:算数左移SAL(Shift Algebraic Left)和算数右移SAR...CL或imm指定的位数;移位后,空出的低位部分全部用0填充;移出的高位存放在CF中;如果只向左移动1位,那么,空出的最低位填0,移出的最高位存放在CF中;如果向左移动N位,那么,空出的N个低位全部用0填充...:CF,OF,PF,SF,ZF;对AF的影响无定义;
在执行双精度左移指令SHLD时,第一操作数向左移动N位,其”空出”的N个低位由第二操作数的高N位来填充,但是第二操作数本身并不移位、不改变;SHLD...效果如下图所示:
在执行双精度右移指令SHRD时,第一操作数向右移动N位,其”空出”的N个高位由第二操作数的低N位来填充,但是第二操作数本身并不移位、不改变;SHRD效果如下图所示: