逻辑运算指令和移位指令

逻辑运算指令和移位指令ANDXORTESTSHLSALROLRCLOR

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

AND XOR TEST SHL SAL ROL RCL
OR NOT SHR SAR ROR RCR

 

AND, OR , XORTEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同.

NOT是单字节操作指令,不允许使用立即数.

逻辑运算均是按位进行操作,真值表如下:

AND (位与&) OR ( 位或| ) XOR  ( 位异或^ )  

1 & 1 = 1

1 & 0 = 0

0 & 1 = 0

0 & 0 = 0

1 | 1 = 1

1 | 0 = 1

0 | 1 = 1

0 | 0 = 0

1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0

 

 

 

A:逻辑运算指令

AND (and) 逻辑与指令

AND    DST , SRC           //Byte/Word

执行操作dst = dst & src

1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZFPF标志位.

2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0.

屏蔽AL的高4位:即将高4位和0000B相与,4位和1111B相与

MOV AL , 39H     //AL= 0011 1001B[39H]

ADD AL , 0FH    // AL= 0000 1001B[09H]  0011 1001B[39H]  &  0000 1111B[0FH] = 0000 1001B[09H]

3.AND指令典型用法B:取出某一位的值(见TEST)

 

  

OR (or) 逻辑或指令

OR    DST ,  SRC         //Byte/Word

执行操作:dst = dst | src

1.OR指令执行后,将使CF=0, OF=0, AF位无定义,指令执行结果影响SF, ZFPF标志位.

2.常用于将某些位置1.

AL的第5位置1:

MOV AL , 4AH    // AL=0100 1010B[4AH]

OR    AL , 10H      // AL=0101 1010B[5AH]   0100 1010B[4AH]  |  0001 0000B[10H] =0101 1010B [5AH]

 

  

XOR (eXclusive OR) 逻辑异或指令

XOR    DST , SRC        //Byte/Word

执行操作:dst = dst ^ src

1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志.

2.XOR指令使某些位维持不变则与 ‘0’ 相异或,若要使某些位取反则与 ‘1’相异或.

AL的高4位维持不变,低4位取反:

MOV AL, B8H    //AL=1011 1000B[B8H]

XOR  AL, 0FH    //AL=1011 0111B[B7H]1011 1000B[B8H] ^ 0000 1111[0FH]=1011 0111B[B7H]

测试某一个操作数是否与另一确定操作数相等:

XOR    AX , 042EH

JZ       ….   //如果AX==042EH,ZF=TRUE(1), 执行JZ…

 

NOT (not) 逻辑非指令

NOT    OPR                        //Byte/Word

执行操作:opr = ~opr   // ~ 01100101 [65H] =10011010 [9AH]

1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.

2.NOT指令不影响任何标志位。

将AL各位取反:

MOV AL,65H    //AL=0110 0101B[65H]

NOT AL             //AL=1001 1010B[9AH] ~ 0110 0101B[65H]=1001 1010B[9AH]

 

 

TEST (test) 指令

TEST    OPR1 , OPR2        //Byte/Word

执行操作:opr1 & opr2

1.两个操作数相与的结果不保存,结果影响标志位PF,SFZF,使CF=0, OF=0,AF位无定义.

2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足.只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假.

检测某位是否为1:

令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则 JNZ

TEST AL , 0000 00001B   //测试AL最低位是否为1:: 令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令 

JNZ   THER     //最低位若为1,ZF=FALSE(0), 执行JNZ THER, 否则执行下一条指令.

或者:先对操作数求反,令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JZ…

MOV    DL , AL    //AL 传送到DL,主要是不要影响AL的值.   以下测试ALb2位是否为1

NOT    DL     //先对操作数求反

TEST    0000 0100B //令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令

JZ    THER        //ALb2位为1,ZF=TRUE(1), 执行JZ    THER

  

  

 

B移位指令[所有的移位指令都影响标志位CFOFPFSFZF.AF无定义.]

非循环逻辑移位把操作数看成无符数来进行移位.

SHL ( SHift logical Left )逻辑左移指令

SHL    OPR , CNT     //Byte/Word

执行操作:使OPR左移CNT位,并使最低CNT位为全0.

1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.

2.移位次数由CNT决定.每次将OPR的最高位移出并移到CF,最低位补0.

MOV  CL , 7            //若移位多次, 先预置移位次数CL

SHL    DX ,  CL       //CNT可取1CL寄存器操作数

 

SHR (SHift logical Right) 逻辑右移指令

SHR    OPR , CNT        //Byte/Word

同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.

 

 

非循环算术移位将操作数看成有符号数来进行移位.

SAL (Shift Arithmetic Left) 算术左移指令

SAL    OPR , CNT         //Byte/Word

SAL指令与SHL指令完全相同

 

SAR(Shift Arithmetic Right) 算术右移指令

SAR    OPR , CNT        //Byte/Word

SAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.

 

 

循环移位指令

ROL ( ROtate Left) 循环左移指令

ROL    OPR , CNT        //Byte/Word

每次移位时,最高位移出并同时移到CF和最低位D0.

 

ROR (ROtate Right)循环右移指令

ROR    OPR,CNT    //Byte/Word

每次移位时,最低位D0移出并同时移到CF和最高位.

 

 

带进位循环移位指令

RCL (Rotate Left through Carry)带进位循环左移指令

RCL    OPR,CNT     //Byte/Word

 

RCR (Rotate Right through Carry)带进位循环左移指令

RCR    OPR ,CNT       //Byte/Word

 

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

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

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


相关推荐

  • 安卓转移到苹果手机_苹果手机更换安卓手机怎么备份

    安卓转移到苹果手机_苹果手机更换安卓手机怎么备份通常我们使用手机时间长了之后,手机开始变得卡顿,常常出现内存不足的情况。这种时候不外乎两种情况:一是将手机格式化或还原出厂设置;二是买个新手机。这样做的结果就是手机的数据被删除或是数据留在旧手机内却不能完整的转移到新手机中。那我们该怎么做才能两全其美呢?下面小编就来介绍关于安卓手机和苹果手机如何备份和恢复手机数据的使用方法。一、安卓手机的备份和恢复小米手机里有一个特别的功能

    2025年11月20日
    5
  • innerHTML和outerHTML有什么区别

    innerHTML和outerHTML有什么区别一、区别:1)innerHTML:  从对象的起始位置到终止位置的全部内容,不包括Html标签。2)outerHTML:  除了包含innerHTML的全部内容外,还包含对象标签本身。二、例子:<divid=”test”><spanstyle=”color:red”>test1</span>…

    2022年4月4日
    41
  • java用位运算实现加减乘除的过程_java四则运算

    java用位运算实现加减乘除的过程_java四则运算我们经常使用的加减乘除,我们所看到的只是表面的效果,那么加减乘除在底层究竟是怎么实现的?今天就让我们一探究竟.今天用位运算实现的加减乘除不使用任何的加减乘除符号.

    2025年6月24日
    4
  • html中table样式_table样式设置

    html中table样式_table样式设置如果想在网页中建一个如下table表格应该怎么做呢?首先建一个表<table><table>/*table标签就是建一个表格*/ <tr>/*tr标签就是tablerow,即为表格中的一行*/ <th>学号</th>/*th标签即tablehead,就是表头*/ <th>姓名</th> <th>手机号</th> <th>家庭地址</th&

    2026年1月31日
    3
  • 2021年材料员-岗位技能(材料员)新版试题及材料员-岗位技能(材料员)考试试卷

    2021年材料员-岗位技能(材料员)新版试题及材料员-岗位技能(材料员)考试试卷题库来源:安全生产模拟考试一点通公众号小程序安全生产模拟考试一点通:硝化工艺题库来源:安全生产模拟考试一点通公众号小程序安全生产模拟考试一点通:硝化工艺考试内容是安全生产模拟考试一点通生成的,硝化工艺证模拟考试题库是根据硝化工艺最新版教材汇编出硝化工艺仿真模拟考试。2021年硝化工艺考试内容及硝化工艺考试报名1、【单选题】三不动火是指:没有经批准的动火作业票不动火;监护人不在现场不动火;()。(A)A、安全措施不落实不动火B、分析不合格不动火C、领导不在现场不动火2、【单选题】苯硝化

    2022年5月30日
    43
  • PostgreSQL的postgres_fdw跨库使用

    PostgreSQL的postgres_fdw跨库使用

    2021年8月28日
    145

发表回复

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

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