(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位