8086標誌位作用及其相關指令

2021-05-25 05:08:21 字數 3265 閱讀 6321

先插入386的32位標誌暫存器一張:(8086只看低16位即可)

1、進製標誌cf(carry flag)

進製標誌cf主要用來反映運算是否產生進製或借位。如果運算結果的最高位產生了乙個進製或借位,那麼,其值為1,否則其值為0。

使用該標誌位的情況有:多字(位元組)數的加減運算,無符號數的大小比較運算,移位操作,字(位元組)之間移位,專門改變cf值的指令等。

2、奇偶標誌 pf(parity flag)

奇偶標誌pf用於反映運算結果中「1」的個數的奇偶性。如果「1」的個數為偶數,則pf的值為1,否則其值為0。

利用pf可進行奇偶校驗檢查,或產生奇偶校驗位。在資料傳送過程中,為了提供傳送的可靠性,如果採用奇偶校驗的方法,就可使用該標誌位。

3、輔助進製標誌 af(auxiliary carry flag)

在發生下列情況時,輔助進製標誌af的值被置為1,否則其值為0:

(1)、在字操作時,發生低位元組向高位元組進製或借位時;

(2)、在位元組操作時,發生低4位向高4位進製或借位時。

4、零標誌 zf(zero flag)

零標誌zf用來反映運算結果是否為0。如果運算結果為0,則其值為1,否則其值為0。在判斷運算結果是否為0時,可使用此標誌位。

5、符號標誌 sf(sign flag)

符號標誌sf用來反映運算結果的符號位,它與運算結果的最高位相同。在微機系統中,有符號數採用補碼表示法,所以,sf也就反映運算結果的正負號。運算結果為正數時,sf的值為0,否則其值為1。

6、溢位標誌 of(overflow flag)

溢位標誌of用於反映有符號數加減運算所得結果是否溢位。如果運算結果超過當前運算位數所能表示的範圍,則稱為溢位,of的值被置為1,否則,of的值被清為0。

「溢位」和「進製」是兩個不同含義的概念,不要混淆。如果不太清楚的話,請查閱《計算機組成原理》課程中的有關章節。

對以上6個運算結果標誌位,在一般程式設計情況下,標誌位cf、zf、sf和of的使用頻率較高,而標誌位pf和af的使用頻率較低。

狀態控制標誌位是用來控制cpu操作的,它們要通過專門的指令才能使之發生改變。

1、追蹤標誌tf(trap flag)

當追蹤標誌tf被置為1時,cpu進入單步執行方式,即每執行一條指令,產生乙個單步中斷請求。這種方式主要用於程式的除錯。

指令系統中沒有專門的指令來改變標誌位tf的值,但程式設計師可用其它辦法來改變其值。

2、中斷允許標誌 if(interrupt-enable flag)

中斷允許標誌if是用來決定cpu是否響應cpu外部的可遮蔽中斷發出的中斷請求。但不管該標誌為何值,cpu都必須響應cpu外部的不可遮蔽中斷所發出的中斷請求,以及cpu內部產生的中斷請求。具體規定如下:

(1)、當if=1時,cpu可以響應cpu外部的可遮蔽中斷發出的中斷請求;

(2)、當if=0時,cpu不響應cpu外部的可遮蔽中斷發出的中斷請求。

cpu的指令系統中也有專門的指令來改變標誌位if的值。

3、方向標誌 df(direction flag)

方向標誌df用來決定在串操作指令執行時有關指標暫存器發生調整的方向。具體規定在第5.2.11節——字串操作指令——中給出。在微機的指令系統中,還提供了專門的指令來改變標誌位df的值。

1、i/o特權標誌iopl(i/o privilege level)

i/o特權標誌用兩位二進位制位來表示,也稱為i/o特權級字段。該欄位指定了要求執行i/o指令的特權級。如果當前的特權級別在數值上小於等於iopl的值,那麼,該i/o指令可執行,否則將發生乙個保護異常。

2、巢狀任務標誌 nt(nested task)

巢狀任務標誌nt用來控制中斷返回指令iret的執行。具體規定如下:

(1)、當nt=0,用堆疊中儲存的值恢復eflags、cs和eip,執行常規的中斷返回操作;

(2)、當nt=1,通過任務轉換實現中斷返回。

3、重啟動標誌 rf(restart flag)

重啟動標誌rf用來控制是否接受除錯故障。規定:rf=0時,表示「接受」除錯故障,否則拒絕之。在成功執行完一條指令後,處理機把rf置為0,當接受到乙個非除錯故障時,處理機就把它置為1。

4 、虛擬8086方式標誌vm(virtual 8086 mode)

如果該標誌的值為1,則表示處理機處於虛擬的8086方式下的工作狀態,否則,處理機處於一般保護方式下的工作狀態。

標誌位操作指令是一組對標誌位置位、復位、儲存和恢復等操作的指令。

1、進製cf操作指令

清進製指令clc(clear carry flag):cf←0

置進製指令stc(set carry flag):cf←1

進製取反指令cmc(complement carry flag):cf←not cf

2、方向位df操作指令

清方向位指令cld(clear direction flag):df←0

置方向位指令std(set direction flag):df←1

3、中斷允許位if操作指令

清中斷允許位指令cli(clear interrupt flag):if←0

其功能是不允許可遮蔽的外部中斷來中斷其後程式段的執行。

置中斷允許位指令sti(set interrupt flag):if←1

其功能是恢復可遮蔽的外部中斷的中斷響應功能,通常是與cli成對使用的。

4、取送標誌位操作指令

lahf(load ah from flags):ah←flags的低8位

sahf(store ah in flags):flags的低8位←ah

5、標誌位堆疊操作指令

pushf/pushfd(push flags onto stack):把16位/32位標誌暫存器進棧;

popf/popfd(pop flags off stack):把16位/32位標誌暫存器出棧;

以上5條,前3條對控制標記操作,第四條對運算結果標誌操作,第5條對全標記操作

cf:    進製標誌符號比         排在第0位

pf:     奇偶標誌                 排在第2位

af:    輔助進製標誌            排在第4位

zf:    零標誌                    排在第6位

sf:    符號標誌                 排在第7位

tf:    追蹤標誌                 排在第8位

if:     中斷允許標誌            排在第9位

df:    方向標誌                 排在第10位

of:    溢位標誌                 排在第11位

8086標誌操作指令

標號傳送指令 lahf 把flag低八位送入ah。不影響flag的任何位 lahf 把cf,pf,af,zf,sf送入ah的相應位即0,2,4,6,7位 sahf 把ah送入flag低八位。根據ah中的內容flag的低八位受到影響,高位不受影響 mov ah,11111111b sahf 執行後cf...

測試標誌位指令

測試某些示志位的情況來設定位元組的指令 這是一大類指令,格式為 setxx reg8 mem8 它的功能是 若條件xx成立,則位元組暫存器reg8或節儲存器單元被設定為1,否則被設定為0.條件xx 見下表 setz sete zf 1 等於零 相等 setnz setne zf 0 不等於零 不相等...

CMP指令和標誌位

彙編中的cmp指令是一條比較指令,對比兩個運算元的大小,但是計算機並不理解大小,它只是對兩個運算元進行了一次減法操作,然後對一些標誌位進行了一些邏輯運算來判斷哪個數大,涉及的標誌位有如下一些 cf 是否有進製或者借位 zf 0標誌位,就是結果是否為0 of 溢位標誌位,是否計算機結果溢位了 sf 符...