(6) 位操做指令测试
1、位扫描指令(Bit Scan Instruction)blog
指令的格式:BSF/BSR Reg, Reg/Mem ;80386+ip
受影响的标志位:ZFget
位扫描指令是在第二个操做数中找第一个“1”的位置。若是找到,则该“1”的位置保存在第一操做数中,并置标志位ZF为1,不然,置标志位ZF为0。it
根据位扫描的方向不一样,指令分二种:正向扫描指令和逆向扫描指令。io
a) 正向扫描指令BSF(Bit Scan Forward)从右向左扫描,即:从低位向高位扫描;cli
b) 逆向扫描指令BSR(Bit Scan Reverse)从左向右扫描,即:从高位向低位扫描。im
例如:img
MOV AX, 1234Hdi
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;
例如:假设(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、二、4位