汇编语言—移位指令

汇编语言—移位指令移位指令是一组经常使用的指令,包括:算数移位、逻辑移位、双精度移位、循环移位、带进位的循环移位;移位指令都有一个指定需要移动的二进制位数的操作数,该操作数可以是立即数,也可以是CL的值;在8086中,该操作数只能是1,但是在其后的CPU中,该立即数可以是定义域[1,31]之内的数;一、算数移位指令:算数移位指令分为:算数左移SAL(ShiftAlgebraicLeft)和算数右移S

大家好,又见面了,我是你们的朋友全栈君。

移位指令是一组经常使用的指令,包括:算数移位、逻辑移位、双精度移位、循环移位、带进位的循环移位;
移位指令都有一个指定需要移动的二进制位数的操作数,该操作数可以是立即数,也可以是CL的值;在8086中,该操作数只能是1,但是在其后的CPU中,该立即数可以是定义域[1,31]之内的数;
一、算数移位指令:
算数移位指令分为:算数左移SAL(Shift Algebraic Left)和算数右移SAR(Shift Algebraic Right);
指令格式: SAL/SAR reg/mem,CL/imm
受影响的标志位:CF,OF,PF,SF,ZF;对AF的影响无定义;
算数左移SAL:把目的操作数的低位部分向高位方向移动CL或imm指定的位数;移位后,空出的低位部分全部用0填充;移出的高位存放在CF中;如果只向左移动1位,那么,空出的最低位填0,移出的最高位存放在CF中;如果向左移动N位,那么,空出的N个低位全部用0填充,移出的N个高位中,只把最后一次移出的那一位存放在CF中,即:CF中只存放最后一次移出的内容;SAL效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
算数右移SAR:把目的操作数的高位部分向低位方向移动CL或imm指定的位数;移位后,空出的高位部分全部用目的操作数原来的最高位(符号位)填充;如果只是向右移动1位,那么,空出的最高位用目的操作数原来的最高位(符号位)来填充,移出的最低位存放到CF中;如果向右移动N位,那么空出的N个高位全部都用目的操作数原来的最高位(符号位)填充,而移出的N个低位中,只把最后一次移出的那一位放到CF中,即:CF中存放的是最后一次移出的内容;换句话说,算数右移时,空出的高位上移入的是目的操作数原来的最高位的值,即:最高位保持不变,最低位同样移入到CF中;算数右移常用于带符号数的右移;SAR效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
二、逻辑移位指令:
逻辑移位分为:逻辑左移SHL(Shift Logic Left)和逻辑右移SHR(Shift Logic Right);
指令格式: SHL/SHR reg/mem,CL/imm
受影响的标志位: CF,OF,PF,SF,ZF;对AF的影响无定义;
逻辑左移SHL:把目的操作数的低位部分向高位方向移动CL或imm指定的位数;移位后,空出的低位部分全部填充0,移出的高位存放到CF中;如果向左移动N位,则只把最后一次移出的内容存放到CF中;SHL效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
逻辑右移SHR:把目的操作数的高位部分向低位方向移动CL或imm指定的位数;移位后,空出的高位部分全部填充0,移出的低位存放到CF中;如果向右移动N位,则只把最后一次移出的内容存放到CF中;SHR效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
三、双精度移位指令:
分为:双精度左移SHLD(Shift Left Double)和双精度右移SHRD(Shift Right Double);这组指令都有三个操作数;
指令格式: SHLD/SHRD reg/mem,reg,CL/imm
其中,第一操作数reg/mem是一个16位或32位的寄存器或存储单元;第二操作数reg与第一操作数具有相同位数,但它一定是一个寄存器;第三操作数CL/imm指定了移动的位数;
受影响的标志位:CF,OF,PF,SF,ZF;对AF的影响无定义;
在执行双精度左移指令SHLD时,第一操作数向左移动N位,其”空出”的N个低位由第二操作数的高N位来填充,但是第二操作数本身并不移位、不改变;SHLD效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
在执行双精度右移指令SHRD时,第一操作数向右移动N位,其”空出”的N个高位由第二操作数的低N位来填充,但是第二操作数本身并不移位、不改变;SHRD效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
四、循环移位:
循环移位指令分为:循环左移ROL(Rotate Left)和循环右移ROR(Rotate Right);
指令格式:

ROL/ROR reg/mem,CL/imm
受影响的标志位只有:CF、OF;
这两条指令不会把进位标志CF纳入循环位中;
循环左移ROL:把操作数的低位部分向高位方向循环移动CL/imm指定的位数,空出的低位部分由移出的高位部分来填充,同时,移出的高位部分仍然会存放在CF中;如果是循环左移N位,那么,就空出N个低位,移出N个高位,然后,把移出的这N个高位按照移出的顺序依次填入空出的N个低位中,同时,CF中只保存最后一次移出的那一位的内容;ROL效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
循环右移ROR:把操作数的高位部分向低位方向循环移动CL/imm指定的位数,空出的高位部分由移出的低位部分来填充,同时,移出的低位部分仍然会存放在CF中;如果是循环右移N位,那么,就空出N个高位,移出N个低位,然后,把移出的这N个低位按照移出的顺序依次填入空出的N个高位中,同时,CF中只保存最后一次移出的那一位的内容;ROR效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
五、带进位的循环移位指令:
带进位的循环移位指令分为:带进位的循环左移RCL(Rotate Left Through Carry)和带进位的循环右移RCR(Rotate Right Through Carry)
指令格式: RCL/ROR reg/mem,CL/imm
受影响的标志位只有:CF,OF;
这两条指令把进位标志CF纳入了循环位中;
带进位的循环左移指令RCL:把操作数的低位部分向高位方向循环移动CL/imm指定的位数,每向左移动一位,RCL指令都会先把CF的原有值填充到空出的最低位上,再把移出的最高位存放到CF中;这样循环左移N位之后,CF中保存的仍然是最后一次移出的那一位的内容;RCL效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
带进位的循环右移指令RCR:把操作数的高位部分想低位方向循环移动CL/imm指定的位数,每向右移动一位,RCL指令都会先把CF的原有值填充到空出的最高位上,再把移出的最低位存放到CF中;这样循环右移N位之后,CF中保存的仍然是最后一次移出的那一位的内容;RCR效果如下图所示:

2010年07月16日 - 哥哥 - 哥哥
移位指令中,溢出标志位OF的设置规则为:如果只移动一位,则系统按照操作数的最高符号位在移位前后是否发生改变,来相应地设置溢出标志OF的值:如果移位前操作数的最高符号位与移位后操作数的最高符号位不相同(有变化),则设置OF=1,认为溢出了;否则,设置OF=0,认为没有溢出;但是,如果移位位数大于1,则OF的值不确定;也就是说,溢出标志OF的值只有在移位位数为1时才有意义;
进位标志CF的设置规则:系统按照移入的位来设置进位标志CF,根据移位后的结果影响SF,ZF,PF,而对AF的影响没有定义;

FROM: http://bdxnote.blog.163.com/blog/static/8444235201061610333135/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139679.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • GBDT算法整理_算法简单题目

    GBDT算法整理_算法简单题目最近重点学习了gbdt算法,看了较多的博客文章,整理了一下这些比较有用的内容,包括算法理论、算法分析、代码剖析、注意事项等各个方面。转载来源:http://www.cnblogs.com/rocketfan/p/4324605.htmlhttp://www.cnblogs.com/rocketfan/p/4365950.htmlhttp://www.cnblogs.com/

    2022年10月12日
    3
  • 你没见过的中文编程工具,用中文开发android安卓应用,安卓开发的初体验![通俗易懂]

    如果你对中文开发有一定的了解,那么你一定会知道易语言。易语言是仿VB制作的一款中文编程工具。它可以用来开发Windows软件。那有没有用于android安卓开发的中文编程工具呢?有!那就是猎码安卓中文开发工具        小编身为一个程序员,在使用猎码后,感觉还是不错的!  &nb…

    2022年4月14日
    103
  • 【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析

    【Unity小游戏】整整一个周末写一款《皇室战争 玩法》 的 即时战斗类 游戏Demo。两万多字游戏制作过程+解析Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万字教程加制作过程,欢迎品尝!世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。

    2022年4月29日
    86
  • 再见PowerDesigner,这款国人开源的数据库设计工具Chiner真香

    再见PowerDesigner,这款国人开源的数据库设计工具Chiner真香再见PowerDesigner,这款国人开源的数据库设计工具Chiner真香当我们在项目开发初期时,往往需要设计大量的表,此时使用数据库设计工具就会比较高效!今天给大家推荐一款国人开源的数据库设计工具chiner,界面漂亮,功能强大,希望对大家有所帮助!回顾PowerDesigner相信平时工作中,大家或多或少会使用PowerDesigner来设计数据库,感觉这款工具界面有点古老,界面看着就具年代感,有时候用起来也比较重,来看下之前使用它设计数据库的效果。最近体验了一把chiner,设计数据库

    2022年7月27日
    11
  • idle和pycharm可以同时安装吗_python自带的编辑器

    idle和pycharm可以同时安装吗_python自带的编辑器1、pythonpython自身缺少numpy、matplotlib、scipy、scikit-learn….等一系列重要和常用的包,需要我们安装pip来导入这些包才能进行相应运算(python3.5自带了get-pip.py,不需额外下载安装),在cmd终端输入:pipinstallnumpy就能安装numpy包了。python3.5自带了一个解释器IDLE用来执行.py脚本,但是却不…

    2022年8月28日
    5
  • Android Bundle类

    Android Bundle类

    2021年12月10日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号