8086移位指令共有8条,分别是SAL/SAR,SHL/SHR,ROL/ROR,RCL/RCR。它们有一个共同的特点就是当移位的次数大于1时得用cl来存放,这就限制了移位的次数最大只能是255次,而且只能做字或字节操作,下面给大家详细讲解:
SAL(算术左移)如sal ax,1;把Ax左移一位,最低位用零填充。
SAR(算术右移)如sar ax,1;把Ax右移一位,最高位由ax的符号位决定,当Ax的最高位为1(负数),用1来填充空出的位,当Ax的最高位为0(正数)就用0来填补。
以上两条常用于有符号数*2或/2运算,影响标志:cf,pf,of,zf,sf。
SHL(逻辑左移)用法同上,空出的位用零填充。
SHR(逻辑右移)用法同上,空出的位用零填充,这也是和sar的区别,因为算术右移可能用1来填充。影响标志:cf,pf,of,zf,sf
ROL(循环左移)用法同上,移出的最高位不仅要送到它自身的最低位,还要送到cf,Cf的值取决于移出的最后一位,可以想象成自行车链条类似。
ROR(循环右移)用法同上,它是ROL的逆操作,它把移出的最低位送到自身的最高位,同时还要送cf。
RCL(带进位的循环左移)用法同上,只是cf会参与进来,可以把cf看成寄存器的第9位或第17位,可以把寄存器和cf看成一个整体,这样就是在做rol运算。
RCR(带进位的循环右移)用法同上,它是RCL的逆操作,先右移,然后把Cf送到最高位,再把移出的那位送cf。
ROL/ROR,RCL/RCR影响标志:cF和of。
以上八条指令在386及以上可以进行双字操作。
有一个例子,是我今天见到的:
ROR BX,1
ROR AX,1
RCL BX,1
ROL AX,1
功能是把ax的最低位送给bx的最低位,如果不明白就考虑下cf。
80386及以上Cpu增加了一组移位指令,sald/sard,shld/shrd,rold/rord,rcld/rcrd 。d表示duble,双倍的意思,它们是8086的那组指令的扩展,它们可以把两个操作数和并一起,而且它们是三操作数指令,但是要求源操作数必须和目的操作数大小一致,可以是字或字节,且目的操作数不能为立即数,第三个操作数是移位次数,可以是8位立即数或cl,下面是一个例子:
Mov ax,1234h
mov bx,0abcdh
shld bx,ax,8
结果: Ax=1234,bx=0cd12h
参考文档:http://baike.baidu.com/view/1365206.html
- [kanwangxue] 感觉楼主很乖的。有点孩子气。呵呵。 01/27 08:58
- [kanwangxue] it界,进去干嘛啊,到时候自己牛比了,首先写一个自己的语言,自己用。进入IT界不就是随波做流吗/?他 01/27 08:57
- [kanwangxue] 哥们,不要为了赚钱而学计算机。 计算机是年轻时候干的, 30岁后可以开始想赚钱,年轻嘛,不要这么悲 01/27 08:50
- [游客] 怎么说? 01/26 16:22
- [游客] 你这不行啊,差远了! 01/10 22:29
- [chinatree] 谢谢你。相信你也会成功的。 01/09 14:22
- [landyking] 哥们儿,好久不见。相信你会成功的。 12/02 23:34
- [chinatree] 哇哇,被挖坟了。莫生气,只是感觉谦虚些好,就算你的程序真的是史上最强的,也别说出来嘛,自己偷着乐就行 11/20 00:41
- [xiaoyao2012] 你的程序和我的程序比较也不见得你的程序又节约空间,在某种意义上说你的程序用了没学的指令,所以不见得你 11/19 15:39
- [heliang6291] 一起加油啊 07/02 02:45
- [游客] 急需一个汇编程序大作业。。。。。。。。。。。。。。。。。。。??? 12/28 16:50
- [游客] 这么多人喜欢你,我嫉妒了。但你不可以喜欢那么多,允许你在我不需要你的时候帮别人。如果我需要立叫立到。 11/13 13:11
- [tily] 兄弟 我来看你啦 呵呵 最近可好呀 09/26 22:17
- [stqcw] 能加我qq吗?1270911891 我在做课程设计2的时候 遇到点问题 09/24 09:16
- [stqcw] 能加我qq吗?1270911891 我的环境还是有点问题。按下A的时候不能显示满屏的A 09/20 09:36
- [stqcw] 牛人 我在xp里面运行王爽 汇编第二版 p280的例子 按下esc键没反应 呀 怎样在虚拟机里配置一 09/17 15:18
- [landyking] 呵呵,交个朋友,共同学习. 09/08 00:03
- [luyingdzx] 能知道你的QQ吗?或者请加一下我的QQ271190440,可以吗 虽然在论坛能获得解答,但是有的问 08/07 21:32