匯編語言 第十一章 標志寄存器


標志寄存器   flag

標志寄存器只有一個,16位,有9個標志位,剩余7個位置默認為0,未被使用。

  • 0-CF  (carry flag進位標志) (CY:   CF = 1;    NC:CF = 0)(carry、no carry)判斷過程是否有進位或者借位,cf = 1表示有進位或借位,cf = 0表示沒有。cf的標志只對無符號數有意義。inc指令和dec指令不影響CF位
  • 2-PF(parity flag奇偶標志)(PE:PF = 1;    PO:PF = 1)(even、odd)判斷結果的所有位中1的個數是否為偶數,pf = 1表示1的個數為偶數;pf = 0表示1的個數為奇數,注意不是判斷數本身的奇偶,而是1的個數的奇偶。  
  • 4-AF(auxiliary flag輔助標志)(AC:AF = 1;    NA :AF = 0)(AC、NO AC)  
  • 6-ZF(zero flag零標志)(ZR:ZF = 1;    NZ:ZF = 0)(zero、not zero)   判斷結果是否為0,zf = 1表示結果為0;zf = 0表示結果為1。
  • 7-SF(sign flag符號標志)(NG:SF = 1;    PL:SF = 0)(negative、positive)判斷結果是否為負,sf = 1表示結果為負;sf = 0表示結果非負(判斷依據是最高位是否為1)如果把數據當作無符號數,SF的值沒有意義,雖然相關指令影響了SF的值。
  • 8-TF(trap flag陷阱標志)
  • 9-IF(iinterrupt flag中斷標志)(EI:IF = 1;DI:IF = 0)(enabled、disabled
  • 10-DF(direction flag方向標志)(DN:DF = 1;    UP:DF = 0)(decrement、increment)控制每次操作后si、di的增減(為1時減,decrease),df = 0 每次操作后si、di遞增;df = 1 每次操作后si、di遞減。cld指令將df復位0,std指令將df置1
  • 11-OF(overflow flag溢出標志)(OV:OF = 1;    NV:OF = 0)(overflow、not overflow)兩個有符號數的運算:將運算全部轉換成加,正+負不會產生溢出;負+負變成正,正加正變成負產生溢出    of的溢出只對有符號數有意義

起標志作用,用來存儲某些指令的執行結果 或者 為執行某些指令提供依據

只有運算指令對標志寄存器有影響(add、sub、mul、div、inc、dec、or、and、xor)(加減乘除、自增自減、與、或、異或)。

mov、push、pop等傳送指令對標志寄存器沒有影響

adc指令

帶進位加法指令,指令格式:adc 操作對象1,操作對象2    功能:操作對象1 = 操作對象1 + 操作對象2 + CF

加法可以分兩步來進行:①低位相加;②高位相加再加上低位相加產生的進位值; 利用adc指令,可以實現任意位數的加法。

sbb指令

帶借位減法指令,指令格式:sbb 操作對象1,操作對象2    功能:操作對象1 = 操作對象1 - 操作對象2 - CF

cmp比較指令:

指令格式:cmp 操作對象1,操作對象2   功能:計算操作對象1 - 操作對象2 ,但並不保留結果,不改變操作對象的值,只對標志位有影響。

cmp ax,bx可能產生的6種情況以及對應的轉移指令:

  • (ax) = (bx),則zf = 1;    對應指令為 je 等於則轉移(equal)
  • (ax) ≠ (bx),則zf = 0;    對應指令為jne 不等於則轉移(not equal)
  • (ax) < (bx),則cf = 1;    對應指令為jb 小於則轉移(below)
  • (ax)  ≥ (bx),則cf = 0;    對應指令為jnb 不小於則轉移(not below)
  • (ax)  > (bx),則cf = 0且zf = 0;    對應指令為ja 大於則轉移(above)
  • (ax)  ≤ (bx),則cf = 1或zf = 1;    對應指令為jna 不大於則轉移(not above)(是否轉移完全由對應標志位決定,即使兩數關系不一定如此)

根據sf、of判斷大小:

  • sf = 1, of = 0,則ax < bx
  • sf = 1, of = 1,則ax > bx
  • sf = 0, of = 0,則ax ≥ bx
  • sf = 0, of = 1,則ax < bx (無溢出時,關系正常;有溢出時,關系相反且不能取等)

串傳送指令movsb:

b表示Byte,一次傳送一個字節。格式:movsb    功能:將ds:[si]的內容復制到es:[di],同時根據df的值增減si和di    movsw是傳送一個字節

一般來說傳送的都是較長單位,所以常與rep(repeat)配合使用。 rep movsb == s:movsb    loops,循環的次數由cx控制,一次傳送cx個字節。

使用串傳送指令的四個要素:

  1. 傳送的原始位置:ds:si
  2. 傳送的目的位置:es:di
  3. 傳送長度:cx
  4. 傳送方向:df

pushf和popf:

  • pushf:將標志寄存器的值壓棧(push flag)
  • popf:從棧中彈出數據,送入標志寄存器中(pop flag)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM