zoukankan      html  css  js  c++  java
  • 汇编语言--微机CPU的指令系统(五)(位操作指令)

    (6) 位操作指令

    1、位扫描指令(Bit Scan Instruction)

    指令的格式:BSF/BSR Reg, Reg/Mem ;80386+

    受影响的标志位:ZF

    位扫描指令是在第二个操作数中找第一个“1”的位置。如果找到,则该“1”的位置保存在第一操作数中,并置标志位ZF为1,否则,置标志位ZF为0。

    根据位扫描的方向不同,指令分二种:正向扫描指令和逆向扫描指令。

    a) 正向扫描指令BSF(Bit Scan Forward)从右向左扫描,即:从低位向高位扫描;

    b) 逆向扫描指令BSR(Bit Scan Reverse)从左向右扫描,即:从高位向低位扫描。

    clip_image002

    例如:

    MOV AX, 1234H

    BSF CX, AX ;指令执行后,(CX)=2

    BSR CX, AX ;指令执行后,(CX)=12

    2、位检测指令(Bit Test Instruction)

    指令的格式:BT/BTC/BTR/BTS Reg/Mem, Reg/Imm ;80386+

    受影响的标志位:CF

    位检测指令是把第一个操作数中某一位的值传送给标志位CF,具体的哪一位由指令的第二操作数来确定。(注意:第二操作数从左至右从低位向高位从0位开始)

    根据指令中对具体位的处理不同,又分以下几种指令:

    BT:把指定的位传送给CF;

    BTC:把指定的位传送给CF后,还使该位变反;

    BTR:把指定的位传送给CF后,还使该位变为0;

    BTS:把指定的位传送给CF后,还使该位变为1;

    clip_image004

    例如:假设(AX)=1234H,分别执行下面指令。

    BT AX, 2 ;指令执行后,CF=1,(AX)=1234h

    BTC AX, 6 ;指令执行后,CF=0,(AX)=1274h

    BTR AX, 10 ;指令执行后,CF=0,(AX)=1234h

    BTS AX, 14 ;指令执行后,CF=0,(AX)=5234h

    3、检测位指令TEST(Test Bits Instruction)

    检测位指令是把二个操作数进行逻辑“与”操作,并根据运算结果设置相应的标志位,但并不保存该运算结果,所以,不会改变指令中的操作数。在该指令后,通常用JE、JNE、JZ和JNZ等条件转移指令。

    指令的格式:TEST Reg/Mem, Reg/Mem/Imm

    受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)

    例如:

    TEST AX, 1 ;测试AX的第0位

    TEST CL, 10101B ;测试CL的第0、2、4位

  • 相关阅读:
    【解题报告】NOIP2018
    【解题报告】NOIP2013
    【解题报告】NOIP2014
    【解题报告】NOIP2015
    【解题报告】NOIP2016
    【解题报告】CSPS2020
    【全程NOIP计划】初级数据结构1
    如何通过一个结构体成员变量的地址找到该结构体的首地址?[备忘]
    IGT笔试题,正整数N等于M个不同的正整数之和的问题
    Mac下Perl脚本如何运行
  • 原文地址:https://www.cnblogs.com/CIreland/p/9956385.html
Copyright © 2011-2022 走看看