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

通用计算机指令,计算机移位指令[通俗易懂]移位指令移位指令对操作数按某种方式左移或右移,移位位数可以由立即数直接给出,或由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年4月29日 上午11:00
下一篇 2022年4月29日 上午11:20


相关推荐

  • GB28181协议_gb28181版本

    GB28181协议_gb28181版本国家为了规范安防行业的设备平台互联互通,在2012年出台了GB/T-28181的第一版标准:这个版本我13年在工作中开发IPC设备使用过,当时觉得协议对流媒体的规范还是比较好(H.264+G711封装成PS流,再经过RTP协议进行实时传输),但是控制方面有很多不足,相对于当前流行的ONVIF协议在控制信令上还是有很多不足。去公安…

    2025年8月25日
    6
  • MySQL默认事物隔离级别_sqlserver事务隔离级别

    MySQL默认事物隔离级别_sqlserver事务隔离级别mysql数据库事务的隔离级别有4个,而默认的事务处理级别就是【REPEATABLE-READ】,也就是可重复读。下面本篇文章就来带大家了解一下mysql的这4种事务的隔离级别,希望对大家有所帮助。SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。mysql的4种事务隔离级别,如下所示:…

    2025年10月27日
    4
  • ZOJ-1188「建议收藏」

    ZOJ-1188「建议收藏」也很水,直接统计权值然后排序即可

    2022年7月12日
    21
  • string类型如何转换成date类型(数据类型自动转换)

    String类型,转换Integer有两种方法:方法1:Integer.valueOf(Strings);@Testpublicvoiddemo01()throwsNumberFormatException{Stringstr="123";Integernum=Integer.valueOf(str);…

    2022年4月13日
    45
  • 提高 Activity 跳转速度

    提高 Activity 跳转速度从一个页面跳转到另外一个页面,这在Android中是很常见的操作;有的页面跳转是瞬间打开,有的是会微微钝一下才打开;或者在页面里弹出一个Dialog弹框,明明已经调用完了show()方法,但弹框没马上弹出来,延迟了一百多毫秒才显示出来,这样给人的体验就很不好了。为什么会出现这种情况呢?页面跳转迟钝和弹框的展示延迟的原因都一样,基本分为两大类。第一类就是看看是否在UI线程左耗时操作,这个经常是数据方面的问题,比如说要从数据库里面查询数据,或者说对数据做了一些复杂逻辑的操作,例如要对集合中的数据,

    2022年5月21日
    36
  • 质量工具因果图_质量管理因果图例题

    质量工具因果图_质量管理因果图例题前言在项目中,我们经常需要用到不同的工具对项目质量进行评审。使用不同的质量工具可能得到的结果不太一样。下面简单说下项目中常用到的质量分析工具因果图。释义:什么是因果图因果图又称为石川图、Ishikawa或鱼骨图,它把影响质量诸因素之间的关系以树状图的方式表示出来,使人一目了然,便于分析原因并采取相应的措施。它是一种在问题发生后,寻找根本原因的一种方法。它取名石川图是因为它是由日

    2022年8月14日
    11

发表回复

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

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