標誌暫存器df 標誌暫存器

2021-10-17 05:36:24 字數 2375 閱讀 3286

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!'db16 dup (0)

data ends

code segmentmovax,datamovds,axmov si, 0

moves,axmov di,16

mov cx,16

cldrep movsbcode ends

end2)程式設計,用串傳送指令,將f000段中的最後16個字元複製到data段中。

data segment

db16 dup (0)

data ends

code segmentmovax,0f000hmovds,axmovsi, 0ffffhmovax,datamoves,axmov di, 15

mov cx, 16

stdrep movsbcode ends

end

標誌暫存器df 關於標誌暫存器的各個標誌

運算結果標誌位 1 進製標誌cf carry flag 進製標誌cf主要用來反映運算是否產生進製或借位。如果運算結果的最高位產生了乙個進製或借位,那麼,其值為1,否則其值為0。使用該標誌位的情況有 多字 位元組 數的加減運算,無符號數的大小比較運算,移位操作,字 位元組 之間移位,專門改變cf值的指...

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...

標誌暫存器

標誌暫存器 標誌暫存器 flags register,fr 又稱程式狀態字 program status word,psw 這是乙個存放條件標誌 控制標誌暫存器,主要用於反映處理器的狀態和運算結果的某些特徵及控制指令的執行 各標誌在標誌暫存器中的位置 條件標誌 cf carry flag 進製標誌 ...