11 標誌暫存器

2022-01-17 04:38:52 字數 3350 閱讀 9697

1.cpu內部的暫存器中,有一種特殊的暫存器(對於不同的處理機,個數和結構都有可能不同)具有以下3種作用。

(1)用來儲存相關指令的某些執行結果;

(2)用來為cpu執行相關指令提供行為依據;

(3)用來控制cpu的相關工作方式。

這種特殊的暫存器在8086cpu中,被稱為標誌暫存器.本章中的標誌暫存器(以下簡稱flag)使我們學習的最後乙個暫存器.

2.flag暫存器是按位起作用的,也就是說,它的每乙個位都有專門的含義,記錄特定的資訊.

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

4.flat的第6位是zf零標誌位。它記錄相關指令執行後,結果是否為0.如果結果為0,那麼zf=1;如果結果不為0,那麼zf=0.

比如,指令:

mov ax,1

sub ax,1

執行後,結果為0,則zf=1

mov ax,2

sub ax,1

執行後,結果不為0,則zf=0

5.8086cpu指令集中,大多數的運算指令(進行邏輯或算術運算)會影響標誌暫存器,而大多數的傳送指令則不會影響標誌暫存器。

6.flag的第2位是pf,奇偶標誌位。他記錄指令執行後,其結果的所有bit位中1的個數是否為偶數。如果1的個數為偶數,則pf=1,反之pf=0.

比如,指令:

mov al,1

add al,10

執行後,結果為00001011b,其中有3(奇數)個1,則pf=0;

mov al,1

or al,2

執行後,結果為00000011b,其中有2(偶數)個1,則pf=1;

sub al,al

執行後,結果為00000000b,其中有0(偶數)個1,則pf=1

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

8.計算機中的乙個資料可以看作是有符號數,也可以看作是無符號數。

9.sf標誌,就是cpu對有符號數運算結果的一種記錄,他記錄資料的正負

10.cpu字執行add等指令時,是必然影響到sf標誌位的值。

11.flag的第0位是cf進製標誌位。一般情況下,在進行無符號運算時,他記錄了運算結果的最高有效位向更高位的進製值,或從更高位的借位值。

比如,指令:

mov al,98h

add al,al ;執行後:(al)=30h,cf=1 cf記錄了從最高有效位行更高位的進製值

add al,al ;執行後:(al)=60h,cf=0 cf記錄了從最高有效位行更高位的進製值

mov al,97h

sub,al,98h ;執行後:(al)=ffh,cf=1 cf記錄了從最高位向更高位的借位值

sub al,al  ;執行後:(al)=0,cf=0 cf記錄了從最高位向更高位的借位值

12.在進行有符號運算的時候,如果超過了機器所能表示的範圍稱為溢位

13.flag的第11位是of,溢位標誌位。一般情況下,of記錄了有符號數運算結果是否發生了溢位。如果發生了溢位,of=1;反之,of=0。

14.注意cf和of的區別:cf是針對無符號數運算有意義的標誌,而of是針對有符號數運算有意義的標誌。

15.adc是帶進製加法指令,它利用cf位上記錄的進製值。

指令格式:adc 操作物件1,操作物件2

功能:操作物件1=操作物件1+操作物件2+cf

比如指令 adc ax,bx 實現的功能是:(ax)=(ax)+(bx)+cf

16.adc所使用的進製值受上一條指令影響,可利用adc執行對任意大資料的加法(通過迴圈),但注意迴圈內部不要影響到cf.

17.sbb是帶借位減法指令,它利用cf位上記錄的借位值

指令格式:sbb 操作物件1,操作物件2

功能:操作物件1=操作物件1-操作物件2-cf

比如指令 adc ax,bx 實現的功能是:(ax)=(ax)-(bx)-cf

18.cmp是比較指令,功能相當於減法指令,只是不儲存結果,但影響flag各個位,其他指令通過識別這些標誌位來得知比較結果。

指令格式:cmp 操作物件1,操作物件2

功能:計算操作物件1-操作物件2,但並不儲存結果,僅僅根據結果對標誌位暫存器進行設定。

19.如果因為溢位導致實際結果為負,那麼邏輯上真正的結果必然為正。

20.flah的第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

例如,用串傳送指令進行資料傳送。

assume cs:code

data segment

db 'welcome to masn!'

db 16 dup (0)

data ends

code segment

s:mov ax,data

mov ds,ax

mov si,0        ;ds:si指向data:0

mov es,ax

mov di,16       ;es:di指向data:0010

mov cx,16       ;(cx)=16,rep迴圈16次

cld             ;設定df=0,正向傳送

rep movsb

mov ax,4c00h

int 21

code ends

end  s

21.pushf的功能是將標誌暫存器的值壓棧,而popf是從棧中彈出資料,送入標誌暫存器中。

22.pushf和popf,為直接訪問標誌暫存器提供了一種方法。

23.標誌暫存器在debug中的表示

標誌暫存器df 標誌暫存器

cpu內部的暫存器中,有一種特殊的暫存器具有以下三種作用。用來儲存相關指令的某些執行結果 用來為cpu執行相關指令提供行為依據 用來控制cpu的相關工作方式 這種特殊的暫存器在8086cpu種,被稱為標誌暫存器 flag 8086cpu的標誌暫存器有16位,其中儲存的資訊通常被稱為程式狀態字 psw...

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 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 進製標誌 ...