標志寄存器


CPU內部的寄存器中,有一種特殊的寄存器具有以下三種作用。

  • 用來存儲相關指令的某些執行結果
  • 用來為CPU執行相關指令提供行為依據
  • 用來控制CPU的相關工作方式

這種特殊的寄存器在8086CPU種,被稱為標志寄存器(flag)。8086CPU的標志寄存器有16位,其中存儲的信息通常被稱為程序狀態字(PSW)。

8086CPU的flag寄存器的結構如下圖。

flag的1、3、5、12、13、14、15位在8086CPU中沒有使用,不具有任何含義。而0、2、4、6、7、8、9、10、11位都具有特殊含義。

 

一、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,奇偶標志位。它記錄相關指令執行后,其結果的所有bit位中1的個數是否為偶數。如果的個數為偶數,pf=1,如果為奇數,那么pf=0。

 

三、SF標志

flag的第7位是SF,符號標志位。它記錄相關指令執行后,其結果是否為負。如果結果為負,sf=1;如果非負,sf=0.

SF標志,就是CPU對有符號運算結果的一種記錄,它記錄數據的正負。在我們將數據當作有符號數來運算的時候,可以通過它來得到結果的正負。如果我們將數據當作無符號來運算,SF的值則沒有意義,雖然相關的指令影響了它的值。

 

四、CF標志

flag的第0位是CF,進位標志位。一般情況下,在進行無符號數運算的時候,記錄了運算結果的最高有效位向更高位的進位值,或從更高位的借位值。

 

五、OF標志

flag的第11位是OF,溢出標志位。一般情況下,OF記錄了有符號數運算的結果是否發生了溢出。如果發生溢出,OF=1;如果沒有,OF=0.

一定要注意CF和OF的區別:CF是對無符號運算有意義的標志位,而OF是對有符號運算有意義的標志位。

 

六、DF標志位和串傳送指令

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

df=0  每次操作后si、di遞增

df=1   每次操作后si、di遞減

 

下面有幾個串傳送指令

格式:movsb

功能:執行movsb指令相當於進行下面幾步操作。

1) ((es)*16+(di)) = ((ds)*16+(si))

2) 如果df=0 則 (si)=(si)+1     (di)=(di)+1

 如果df=1則:   (si)=(si)-1     (di)=(di)-1

 

當然也可以傳送一個字

格式:movsw

功能:將ds:si指向的內存單元中的字送入es:di中,然后根據標志寄存器df位的值,將si和di遞增2或遞減2.

 

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

rep  movsb

rep功能:根據cx的值,重復執行后面的串傳送指令。由於每執行一次movsb指令si和di都會遞增或遞減指向后一個單元或前一個單元,則rep movsb就可以循環實現(cx)個字符的傳送。

 

8086CPU提供下面兩條指令對df位進行設置。

cld指令: 將標志寄存器的df位置0

std指令: 將標志寄存器的df位置1

 

1)編程,用串傳送指令,將data段中的第一個字符串復制到它后面的空間中。

data segment
     db  'welcome to masm!'
     db 16 dup (0)
data ends

code segment

       mov ax,data
       mov ds,ax
       mov si, 0
       mov es,ax
       mov di,16
       mov cx,16
       cld
       rep  movsb

code ends

end

2)編程,用串傳送指令,將F000段中的最后16個字符復制到data段中。

data segment
         db  16  dup  (0)
data ends

code segment 
           mov ax,0f000h
           mov ds,ax
           mov si, 0ffffh
           mov ax,data
           mov es,ax
           mov di, 15
           mov cx, 16
           std
           rep  movsb
    
code ends
end

 


免責聲明!

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



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