8086指令系统---逻辑指令

发布者:ShimmeringMoon最新更新时间:2015-09-23 来源: eefocus关键字:指令系统  逻辑指令 手机看文章 扫描二维码
随时随地手机看文章
  逻辑指令包括逻辑运算指令和移位指令。逻辑运算指令可对操作数执行逻辑运算,移位指令执行对操作数左移或右移若干位的功能。
 
 ⑴ 逻辑运算指令          ⑵ 移位指令
   AND     逻辑与          SAL     算术左移
   OR      逻辑或          SHR     逻辑右移
   OT      逻辑非          SAR     算术右移
   XOR     异或           ROL    循环左移
   TEST     测试           ROR    循环右移
                     RCL    带进位循环左移
                     RCR    带进位循环右移
 
 1 逻辑运算指令

 AND dst,src ;逻辑与(logic and)
 执行操作: (dst)←(dst)(src)

 OR dst,src ;逻辑或(logic or)
 执行操作: (dst)←(dst)(src)

 NOT opr ;逻辑非(logic not)
 执行操作: (opr)←

 XOR dst,src ;异或 (exclusive or)
 执行操作: (dst)←(dst)(src)

 TEST opr1,opr2 ;测试(test)
 执行操作: (opr1)(opr2),根据与运算结果设置条件码,结果不回送

  逻辑运算指令是一组位操作指令,它们可以对字或字节按位执行逻辑操作,因此,源操作数经常是一个位串。以上五条指令除NOT不影响标志位外,其它四条指令执行后,CF和OF置0,AF无定义,SF、ZF和PF根据运算结果设置。
  例 (1) 可使某些位置0的AND运算

      MOV   AL,35H    ; (AL)=0011 0101B
      AND   AL,0FH    ; (AL)=35H0FH=0000 0101B
       ; flag settings will be: SF=0,ZF=0,PF=1,CF=OF=0

      (2) 可使某些位置1的OR运算

       MOV   AX,0504H   ; (AX)=0000 0101 0000 0100B
       OR   AX,80F0H   ; (AL)=0504H80F0H=1000 0101 1111 0100B,
                 ; flags will be: SF=1,ZF=0,PF=0,CF=OF=0

   注意:标志位PF按结果的低8 位来设置。

       (3) XOR运算使两个操作数不同值的位置1,相同值的位置0
  
       A.使某些位求反,其余位不变
       MOV  BL,86H    ; (BL)=1000 0110B
       XOR  BL,03H    ; (BL)=86H03H=1000 0101B,
          ; flags will be: SF=1,ZF=0,PF=0,CF=OF=0

       B.使某寄存器清0
       XOR  AX,AX  ; (AX)=0, clear AX by XORing it with itself

       (4) 测试某些位为0或为1

       A.测试某数的奇偶性
       MOV  DL,0AEH    ; (DL)=1010 1110B
       TEST DL,01H ; 0AEH01H=0000 0000, ZF=1,but DL is unchanged
       JZ EVEN ; if ZF=1,then tested number is even, if ZF=0, odd

       B.测试某数为正数或负数
       MOV  DH,9EH    ; (DL)=1001 1110B
       TEST DH,80H    ; 9EH80H=1000 0000, ZF=0
       JZ EVEN ; if ZF=0,then the value is negative, if ZF=1,it is

 

   2 移位指令

  移位指令包括逻辑移位指令、算术移位指令、循环移位指令和带进位循环移位指令。指令中的目的操作数dst可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1时,1可直接写在指令中;cnt>1时,cnt必须放入CL寄存器。
 
 SHL dst,cnt ; 逻辑左移(shift logical left)

 SHR dst,cnt ; 逻辑右移(shift logical right)

 SAL dst,cnt ; 算术左移(shift arithmetic left)

 SAR dst,cnt ; 算术右移(shift arithmetic right)

  SHL和SAL指令向左移动的操作是相同的,在每次逐位移动后,最低位用0来补充,最高位移入CF。SHR与SHL移动的方向相反,每次向右移动后,最高位用0来补充,最低位移入CF。SAR在每次右移都用符号位的值补充最高位,最低位仍然是移入CF。

  由此可以看出,算术移位适于带符号数的移位处理。我们知道,一个数左移n位相当于乘以2n,右移n位相当于除以2n, 所以,当一个带符号数需要乘(或除)2n时,可使用算术移位指令SAL(或SAR)。当一个无符号数需要乘(或除)2n时,可使用逻辑移位指令SHL(或SHR)。使用移位指令将一个数扩大或缩小2n倍,比使用乘法或除法指令的速度快。

  移位指令的条件码设置:
  CF= 移入的数值
  OF=1 当cnt=1时,移动后最高位的值发生变化
  OF=0 当cnt=1时,移动后最高位的值未发生变化
  SF、ZF、PF根据移动后的结果设置

 ROL dst,cnt ; 循环左移(rotate left)

 ROR dst,cnt ; 循环右移(rotate right)
 
 RCL dst,cnt ; 带进位循环左移(rotate left through carry) 

 RCR dst,cnt ; 带进位循环右移(rotate right through carry)

  这组指令完成位循环移位的操作,ROL和ROR是简单的位循环指令,RCL和RCR是连同CF位一起循环移位的指令。它们左右移动的方法以及移位次数的设置与移位指令类似。

  循环移位指令执行后,CF和OF的设置方法与移位指令相同;SF、ZF和PF标志位不受影响。

   例 写DATA1除以8的程序,假设:⑴DATA1为无符号数⑵DATA1为带符号数。

      DATA1  DB   9AH
      TIMES  EQU   3

      ; ⑴ DATA1 is unsigned operand
         MOV   CL,TIMES   ; set number of times to shift
         SHR    DATA1,CL   ; DATA1 will be 13H, CF=0
         
       ; ⑵ DATA1 is signed operand
         MOV    CL,TIMES   ; set number of times to shift
         SAR    DATA1, CL   ; DATA1 will be 0F3H, CF=0

   例 编写统计DATAW字数据中1的个数COUNT的程序,要求COUNT是BCD码。
  
      DATAW  DW   97F4H
      COUNT  DB   ?
      …    …
       XOR   AL,AL   ; clear AL to keep the number of 1s in BCD
       MOV   DL,16   ; rotate total of 16 times
       MOV   BX,DATAW ; move the operand to BX
    AGAIN: ROL   BX,1    ; rotate it once
       JNC   NEXT   ; check for 1, if CF=0 then jump
       ADD   AL,1   ; if CF=1 then add one to count
       DAA        ; adjust the count for BCD
    NEXT: DEC   DL     ; go through this 16 times
        JNC   AGAIN   ; if not finished go back
       MOV   COUNT,AL ; save the number of 1s in COUNT
关键字:指令系统  逻辑指令 引用地址:8086指令系统---逻辑指令

上一篇:8086指令系统---控制转移指令(一)
下一篇:8086指令系统---控制转移指令(二)

推荐阅读最新更新时间:2024-03-16 14:33

三菱PLC算术及逻辑运算应用指令
    算术及逻辑运算指令是基本运算指令,通过算术及逻辑运算可实现数据的传送、变位及其他控制功能。     一、算术运算指令     算术运算包括二进制加ADD(Addition)、减SUB(Subtraction)、乘MUL(Multiplication)和除DIV(Division)指令,     二、二进制数加1、减1指令     二进制数加1指令INC(Increment)和减1指令DEC(Decrement)的操作数均可以取KnY、KnM、KnS、T、C、D、V和Z。     三、字逻辑运算指令     字逻辑运算指令包括字逻辑与WAND(word AND)、字逻辑或WOR(word OR)、字逻辑异或
[嵌入式]
51单片机教程:单片机逻辑运算类指令
对单片机的累加器A的逻辑操作: CLR A ;将A中的值清0,单周期单字节指令,与MOV A,#00H效果相同。 CPL A ;将A中的值按位取反 RL A ;将A中的值逻辑左移 RLC A ;将A中的值加上进位位进行逻辑左移 RR A ;将A中的值进行逻辑右移 RRC A ;将A中的值加上进位位进行逻辑右移 SWAP A ;将A中的值高、低4位交换。 例:(A)=73H,则执行CPL A,这样进行: 73H化为二进制为01110011, 逐位取反即为 10001100,也就是8CH。 RL A是将(A)中的值的第7位送到第0位,第0位送1位,依次类推。 例:A中的值为68H,执行RL A。68H化为二进制
[单片机]
单片机的指令系统和寻址方式介绍
1、MOVA,#20H 这条指令表示把20H这个数送入累加器A中(一个特殊功能寄存器)。 2、ADDA,70H 这条指令表示把累加器A中的内容(在上例中送入的#20H)和存贮器中地址为70H单元中的内容(也是一个数字),通过算术逻辑单元(英文缩写为ALU)相加,并将结果保留在A中。这里MOV、ADD等称为操作码,而A、#20H、70H等均称为操作数。在汇编语言程序中,操作码通常由英文单词缩写而成,这样有助于记忆,所以又称助记符。如MOV就是英文单词MOVE的缩写,含有搬移的意思;而ADD即为英文单词,其意为相加。因此,对于略懂英语的用户,掌握单片机指令的含意是较为方便的。操作数有多种表示法,如以上的#20H称为立即数,
[单片机]
龙芯推出自主指令系统架构LoongArch
世界互联网大会上展示的龙芯芯片。谷业凯摄 记者今天从龙芯中科获悉,龙芯自主指令系统架构(以下简称龙芯架构)的基础架构通过国内第三方知名知识产权评估机构的评估。目前支持该架构的龙芯3A5000处理器芯片已经流片成功,基于新架构的完整操作系统已经在3A5000计算机上稳定运行,这标志着国产自主信息技术体系和产业生态建设取得重要进展。 CPU指令系统是计算机的软硬件界面,是CPU所执行的软件指令的二进制编码格式规范。一种指令系统承载了一个软件生态,如X86指令系统和Windows操作系统形成的Wintel生态、ARM指令系统和Android操作系统形成的AA生态。国外CPU厂商以指令系统作为控制生态的手段,需要获得“授权”才
[半导体设计/制造]
龙芯推出自主<font color='red'>指令系统</font>架构LoongArch
基于8086 CPU的单芯片计算机系统的设计
1 引言 随着超大规模集成电路工艺的发展,在一颗芯片上集成上百万甚至上亿个晶体管已成为现实。现在,芯片厂商都以面积最小化、功能最大化作为自己的发展方向,深亚微米效应理论及IP 核技术越来越受到理论界和工业界的广泛关注,系统芯片是当前技术发展的必然趋势。计算机的发展经历了电子管计算机、晶体管计算机、集成电路计算机和大规模集成电路计算机,它的发展一直是将越来越多的功能集成在越来越小的空间内。可以预见,在某些特定领域,半导体制造业朝着整合型单芯片系统的总体趋势将会日益明显。 所谓单芯片计算机即是将传统PC 机箱里的主板上的芯片组、CPU、内存、显卡、声卡和网卡等最大限度的集成在单个芯片中。单芯片计算机与传统PC 相比,重量、体积和
[单片机]
基于<font color='red'>8086</font> CPU的单芯片计算机系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved