匯編語言-標志寄存器


標志寄存器

8086CPU的標志寄存器有16位,其中存儲的信息通常被稱為程序狀態字(PSW)。flag寄存器是按位起作用的,也就是說,它的每一位都有專門的含義,記錄特定的信息。
8086CPU的flag寄存器中的結構如圖:
在這里插入圖片描述

ZF 標志

  • flag的第6位是ZF,零標志位。它記錄相關指令執行后,其結果是否為0.如果結果為0,那么zf=1;如果結果不為0,那么zf=0。
  • 在8086CPU的指令集中,有的指令的執行是影響標志寄存器的,比如:add、sub、mul、div、inc、or、and等,它們大都是運算指令(進行邏輯或算術運算);
  • 有的指令的執行對標志寄存器沒有影響,比如:mov、push、pop等,它們大都是傳送指令。

PF 標志

  • flag的第2位是PF,奇偶標志位。它記錄指令執行后,結果的所有二進制位(最低有效字)中1的個數:為偶數,PF = 1;為奇數,PF = 0。

SF 標志

  • flag的第7位是SF,符號標志位。它記錄指令執行后,結果為負,SF = 1;結果為正,SF = 0。
  • 對於同一個二進制數據,計算機可以將它當作無符號數據來運算,也可以當作有符號數據來運算,實際上無關緊要,重要的是使用者如何看待。
  • 我們可以將add指令進行的運算當作無符號數的運算,那么add指令相當於計算129+1,結果為130(10000010B);
  • 也可以將add指令進行的運算當作有符號數的運算,那么add指令相當於計算-127+1,結果為-126(10000010B)。
  • 如果我們將數據當作無符號數來運算,SF的值則沒有意義,雖然相關的指令影響了它的值。

CF 標志

  • Flag的第0位是CF,進位標志位。一般情況下,在進行無符號數運算的時候,它記錄了運算結果的最高有效位向更高位的進位值,或從更高位的借位值。
  • 一種情況是兩個數據做加法產生了最高位的進位,另外一種情況,當兩個數據做減法的時候,有可能向更高位借位。

OF 標志

  • 在進行有符號數運算的時候,如結果超過了機器所能表示的范圍稱為溢出。
  • CF是對無符號數運算有意義的標志位;而OF是對有符號數運算有意義的標志位。

adc 指令

adc是帶進位加法指令 ,它利用了CF位上記錄的進位值。

  • 格式: adc 操作對象1,操作對象2
  • 功能:操作對象1=操作對象1+操作對象2+CF
  • 比如指令adc ax,bx 實現的功能是:(ax)=(ax)+(bx)+CF

使用adc可以對任意大的數據進行加法運算。

sbb 指令

sbb是帶錯位減法指令,它利用了CF位上記錄的借位值。

  • 格式:sbb 操作對象1,操作對象2
  • 功能:操作對象1=操作對象1–操作對象2–CF
  • 比如指令sbb ax,bx實現功能: (ax) = (ax) – (bx) – CF

使用sbb指令我們可以對任意大的數據進行減法運算。

cmp

cmp 是比較指令,功能相當於減法指令,只是不保存結果。cmp 指令執行后,將對標志寄存器產生影響。

  • 格式:cmp 操作對象1,操作對象2
  • 功能:計算操作對象1–操作對象2 但並不保存結果,僅僅根據計算結果對標志寄存器進行設置。

檢測比較結果的條件轉移指令

在這里插入圖片描述

  • e:表示equal;
  • ne:表示not equal;
  • b:表示below;
  • nb:表示not below;
  • a:表示above;
  • na:表示not above。

DF 標志和串傳送指令

flag的第10位是DF,方向標志位。在串處理指令中,控制每次操作后si,di的增減。

  • DF = 0:每次操作后si,di遞增;
  • DF = 1:每次操作后si,di遞減。
  • 格式: movsb(w) ;
  • 功能:(以字節為單位傳送)。
((es)×16 + (di)) = ((ds) ×16 + (si))
如果DF = 0則:
	(si) = (si) + 1
	(di) = (di) + 1
如果DF = 1則:
	(si) = (si) - 1
	(di) = (di) - 1

movsb和movsw進行的是串傳送操作中的一個步驟,一般來說,movsb 和 movsw 都和rep配合使用,格式如下:

rep movsb。 ;rep的作用是根據cx的值,重復執行后面的串傳送指令。

8086CPU提供下而兩條指令對DF位進行設置:

  • cld指令:將標志寄存器的DF位置0
  • std指令:將標志寄存器的DF位置1

pushf 和 popf

  • pushf :將標志寄存器的值壓棧;
  • popf :從棧中彈出數據,送入標志寄存器中


免責聲明!

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



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