通用计算机指令,计算机移位指令[通俗易懂]

通用计算机指令,计算机移位指令[通俗易懂]移位指令移位指令对操作数按某种方式左移或右移,移位位数可以由立即数直接给出,或由CL间接给出。移位指令分一般移位指令和循环移位指令。1一般移位指令(1)算术/逻辑左移指令。格式:SALDEST,OPRDSHLDEST,OPRD功能:按照操作数OPRD规定的移位位数,对目的操作数进行左移操作,最高位移入CF中。每移动一位,右边补一位0。如图312(a)所示。目的操作数可以为通用寄存器或存储…

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

移位指令

移位指令对操作数按某种方式左移或右移,移位位数可以由立即数直接给出,或由CL间接给出。移位指令分一般移位指令和循环移位指令。

1 一般移位指令

(1) 算术/逻辑左移指令。

格式:SAL DEST,OPRD

SHL DEST,OPRD

功能:按照操作数OPRD规定的移位位数,对目的操作数进行左移操作,最高位移入CF中。每移动一位,右边补一位0。如图3 12(a)所示。目的操作数可以为通用寄存器或存储器操作数。

SAL,SHL指令影响标志位OF,SF,ZF,PF,CF。

当操作数为有符号数时,如果左移的结果没有溢出(符号位没变),那么有符号数左移1位后具有乘2的功能。比如:-1(11111111)左移1位后,结果为-2(11111110);+6(00000110)左移1位后,结果为+12(00001100)。

由于受字长位数(8位、16位或32位)的限制,正数左移1位的结果不一定是正数,负数左移1位的结果也不一定是负数。例如,正数01000000左移1位后,结果为10000000,是负数;而负数10000000左移1位后,结果为00000000,是正数。不难看出,如果将操作数的位数扩展到16位,上面两个数左移的结果也相当于乘2。所以,算术左移指令SAL的操作规则与逻辑左移指令SHL的一样。实际上,一个数乘2相当于这个数自身相加。有符号数和无符号数的加法运算用同一套指令。所以,它们的左移操作也应该是完全一样的。所以不能像右移指令那样,规定符号位保持不变。

如果左移1位(最低位添0,最高位移到CF)后,最高位与CF位不同,则OF=1,表示有符号数溢出;如果CF=1,表示无符号数“溢出”。

t3.12.jpg

图 3.12  移位指令示意图

例 3.48

SHL BYTE PTR [DI],2

SAL BX,CL

(2) 算术右移指令。

格式:SAR DEST,OPRD

功能:按照操作数OPRD规定的移位次数,对目的操作数进行右移操作,最低位移至CF中,最高位(即符号位)保持不变。如图3 12(b)所示。目的操作数可以为通用寄存器或存储器操作数。

SAR指令影响标志位OF,SF,ZF,PF,CF。

例 3.49

SAR AL,5

SAR WORD PTR \[ECX\],CL

(3) 逻辑右移指令。

格式:SHR DEST,SRC

功能:按照操作数OPRD规定的移位位数,对目的操作数进行右移操作,最低位移至CF中。每移动一位,左边补一位0。如图3 12(c)所示,目的操作数可以为通用寄存器或存储器操作数。

SHR指令影响标志位OF,SF,ZF,PF,CF。例 3.50

SHR BYTE PTR [SI],3

SHR EDX,CL

算术/逻辑左移,只要结果未超出目的操作数所能表达的范围,每左移一次相当于原数乘2。算术右移只要无溢出,每右移一次相当于原数除以2。

2 循环移位指令

格式:ROL DEST,OPRD

ROR DEST,OPRD

RCL DEST,OPRD

RCR DEST,OPRD

功能:循环左移指令ROL,见图3 13(a)所示,目的操作数左移,每移位一次,其最高位移入最低位,同时最高位也移入进位标志CF。循环右移指令 ROR见图3 13(b)所示,目的操作数右移,每移位一次,其最低位移入最高位,同时最低位也移入进位标志CF。

带进位循环左移指令RCL,见图3 13(c)所示,目的操作数左移,每移动一次,其最高位移入进位标志CF,CF移入最低位。带进位循环右移指令RCR,见图3 13(d)所示,目的操作数右移,每移动一次,其最低位移入进位标志CF,CF移入最高位。

t3.13.jpg

图 3.13  循环移位指令

目的操作数可以为通用寄存器或存储器操作数。循环移位指令影响标志位CF,OF。其它标志位无定义。

例 3.51

ROL AL,CL

ROR BX,5

RCL ECX,3

RCR BYTE PTR [SI],CL例 3.52  将一个2位数压缩的BCD码转换成二进制数。

·MODEL SMALL

·DATA

BCD DB 01011001B

BIN DB?

CODE

·START UP

MOV AL,BCD

MOV BL,AL

AND BL,0FH

AND AL,0F0H

MOV CL,4

ROR AL,CL

MOV BH,0AH

MUL BH

ADD AL,BL

MOV BIN,AL

·EXIT

END

3 双精度移位指令

格式:SHLD DEST,SRC,OPRD

SHRD DEST,SRC,OPRD

功能:对于由目的操作数DEST和源操作数SRC构成的双精度数,按照操作数OPRD给出的移位位数,进行移位。SHLD是对目的操作数进行左移,如 图3 14(a)所示,SHRD是对目的操作数进行右移,如图3 14(b)所示。先移出位送标志位CF,另一端空出位由SRC移入DEST中,而SRC 内容保持不变。目的操作数可以是16位或32位通用寄存器或存储器操作数。源操作数SRC允许为16位或32位通用寄存器。操作数OPRD可以为立即数或 CL。目的操作数和源操作数SRC数据类型必须一致。

t3.14.jpg

图 3.14  双精度移位指令

SHLD,SHRD指令常用于位串的快速移位、嵌入和删除等操作,影响标志位为SF,ZF,PF,CF,其它标志位无定义。

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

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

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


相关推荐

  • 京东面试官:给我说说你简历上的订单系统是如何设计的?尽量详细点~

    京东面试官:给我说说你简历上的订单系统是如何设计的?尽量详细点~

    2022年2月18日
    139
  • arcmap重采样_ipproto_raw

    arcmap重采样_ipproto_raw参考文献:AcceleratedHypothesisGenerationforMulti-structureRobustFitting假设Input:{xi}i=1N\{x_i\}_{i=1}^N{xi​}i=1N​代表输入的N组数据,由N组数据随机采样生成了M个模型θ1,θ2,…θM{\theta_1,\theta_2,…\theta_M}θ1​,θ2​,…θM​,对于每一个个输入数据xix_ixi​,我们计算模型的残差得到该模型的分数r(i)=[r1(i),r2(i)…rM

    2022年9月22日
    1
  • Activity工作流:流程创建总结

    Activity工作流:流程创建总结Activiti工作流的应用示例1、新建流程模型模型管理->模型工作区点击“创建”后会立即跳转到“流程在线设计器”页面,请参考下一节2、在线流程设计器模型管理->模型工作区->编辑3、设置流程属性l名称:流程定义名称l描述信息:流程定义描述l流程标识:流程定义KEY,对应procDefKey,用来标识一个流程4、拖拽元素介…

    2022年5月23日
    33
  • Ubuntu(Linux)虚拟机的安装教程(最为详细)「建议收藏」

    title:Linux(Ubuntu)虚拟机的安装教程(最为详细)date:2020-06-2911:33tags:LinuxUbuntucategories:LinuxLinux(Ubuntu)虚拟机的安装教程(最为详细)当年文鸯“以匹马入数千骑中,辄杀伤百馀人,乃出,如此者六七,追骑莫敢逼。”,现在我阿猿七删七下Ubuntu,哭~~,真的要崩溃,不过我终修的大成。以后我也可以说出我已经熟练的掌握了Ubuntu系统的删除和安装。这时就有小伙伴要问了,我不.

    2022年4月13日
    64
  • IFRAME属性及详解

    标签属性  属性  描述
    ALIGNalign设置或获取表格排列。
    ALLOWTRANSPARENCYallowTransparency设置或获取对象是否可为透明。
    APPLICATIONAPPLICATION表明对象的内容是否为HTML应用程序(HTA),以便免除浏览器安全模式。
    ATOMICSELECTION指定元素及其内容是否可以一不可见单位统一选择。
    ACCELERATORaccelerator设置或获

    2022年4月7日
    110
  • pycharm安装opencv-python_pycharm opencv

    pycharm安装opencv-python_pycharm opencv使用pip安装:pipinstallpython-opencv在网络距离美国较远的情况下,或PIP版本未达到要求的情况下,会install失败。解决方法1.重试2.科学方法,这里说明使用科学方法的端口问题,切记不要和本地计算机使用同一个端口,容易造成Pycharm未知错误。3.手动去官网下载文件这里有两种类型的手动安装文件setup.pyXXXX.whl以上两种文件都可以通过pycharm的命令行工具直接cd到目录进行直接安装。方法:1pyth

    2022年8月27日
    7

发表回复

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

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