指令詳解

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

發佈了36 篇原創文章 · 獲贊 6 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章