1、test指令
測試指令
格式:TEST DEST,SRC
功能:目的操作數和源操作數按位進行邏輯與操作,結果不回送目的操作數。源操作數可以爲通用寄存器、存儲器或立即數。目的操作數可以爲通用寄存器或存儲器操作數。
例1:
TEST DWORD PTR [BX],80000000H
TEST AL,CL
TEST指令常用於測試操作數中某位是否爲1,而且不會影響目的操作數。如果測試某位的狀態,對某位進行邏輯與1的運算,其它位邏輯與0,然後判斷標誌位。運算結果爲0,ZF=1,表示被測試位爲0;否則ZF=0,表示被測試位爲1。
例2: TEST AL,80H;測試AL中最高位
JNZ NEXT;如果最高位爲1,轉到標誌NEXT處。
TEST指令影響標誌位爲SF,ZF,PF,並且使OF=CF=0。
2、cmp指令
比較指令
格式:CMP DEST,SRC
功能:目的操作數減源操作數,結果不回送。源操作數爲通用寄存器、存儲器和立即數。目的操作數爲通用寄存器、存儲器操作數。
CMP指令影響標誌位爲OF,SF,ZF,AF,PF,CF。
例 3.29
CMP CX,3
CMP WORD PTR [SI],3
CMP AX,BLOCK
執行比較指令後,對狀態標誌位影響見表3.2。對於兩個數的比較(AX-BX)有以下3種情況。
表CMP指令對標誌位的影響
· 兩個正數比較,使用SF標誌位判斷。
SF=0,則AX≥BX,若ZF=1,則AX=BX
SF=1,則AX<BX
· 兩個無符號數比較,使用CF標誌位判斷。
CF=0,則AX≥BX,若ZF=1,則AX=BX
CF=1,則AX<BX
· 兩個負數比較,使用SF標誌位判斷。
SF=0,則AX≥BX,若ZF=1,則AX=BX
SF=1,則AX<BX
· 兩個異符號數比較。
如果OF=0,仍可用SF標誌判斷大小。
如果OF=1,說明結果的符號位發生錯誤,所以
SF=0,則AX<BX
SF=1,則AX>BX
綜上所述:兩個異號數比較
當OF=0,SF=0,則AX>BX
SF=1,則AX<BX
當OF=1,SF=0,則AX<BX
SF=1,則AX>BX
用邏輯表達式表示爲:
若OF∨-SF=0,則AX>BX
若OF∨-SF=1,則AX<BX