彙編 標誌暫存器

2021-08-14 10:01:19 字數 1785 閱讀 7238

我們已經接觸過像ax bx cx si di ss

cs等暫存器了,但是在8086cpu中有乙個比較特殊的暫存器----標誌暫存器(flag)。

2.基本介紹

與其他暫存器不同的是,標誌暫存器中儲存的不是資料,而是標誌狀態字(psw),而且其他暫存器都是作為乙個整體在使用,我們常說某某暫存器中放著某個資料,但是在flag中時,情況就不一樣,psw的每乙個位都有特殊的含義。它的結構是這樣的:

可以看到暫存器中某些位是不用的,這可能是歷史遺留問題。

flag的作用:

用來儲存相關指令的執行結果

用來為cpu執行相關指令提供依據(比如某些跳轉指令就會依賴psw)

用來控制cpu的相關工作方式

mov ax,1

sub ax,1

執行結果:ax=0,所以zf=1

注意:在8086cpu指令集中,有些指令是不會影響psw的,這些指令多半是傳送指令(mov,push,pop),像運算指令,無論是邏輯運算還是算術運算(add,sub,mul,div,inc,or,and等)一般會影響psw。

mov al,1

add al,10

執行結果:al=00001011b,奇數個1,所以pf=0

符號標誌位,記錄相關指令執行後,其結果是否為負,如果為負----->sf=1,如果為正------>sf-0

說道符號位,就不得不提一提計算機中數值的表示方式了,大家都知道在計算機中有符號數通常用補碼來表示。如果不知道的請到這裡:

補碼、原碼、反碼

而且計算機中乙個資料既可以看做有符號數也可以看做無符號數,比如00000001b可以看做無符號數的1,也可以看做有符號數的+1。也就是說當我們在進行運算的時候其實在計算機內部同時進行了兩種運算,比如:

mov al,10000001b

add al,1

結果:al中的值為10000010b

如果我們把10000001b看做無符號數,那麼結果就是130,如果看做有符號數結果就是-126。最重要的使我們想要是什麼結果。所以這也是使用sf需要注意的一點,sf記錄的是結果的正負,是客觀的,它會將所有的結果都當做有符號數看待,但是只有在這次表示式有符號運算時,它才有意義。也就是說無論如何,運算都會影響sf的狀態,無論是有符號運算還是無符號運算。

例題:

sub al,al

結果:zf=1,pf=1,sf=0

進製標誌位,在進行無符號數運算時,它記錄是否有向高位進製,或是向高位借位。

我們知道,在進行加法運算時,很有可能會產生進製,這個進製就會被cf記錄下來,有進製發生cf=1,否則為0。同理,在做減法時,被減數有時候會向高位借位,也會被cf記錄。

溢位標誌位,在進行有符號數運算時,結果超出了機器能夠表示的範圍時,就發生了溢位,此時of=1,否則of=0.

什麼是機器能夠表示的範圍,比如乙個8位暫存器,它能夠表示的有符號數的範圍時-128~+127,那麼如果兩個數的運算結果是190,那麼顯然溢位了,這時候在計算機中結果就不是我們想要的那樣了,這是of=1。

方向標誌位,df一般與字串的傳送聯絡起來,他決定了串傳送時的si、di的增減,如果df為0si、di遞增,否則,相反。

我們可以用std指令來將其置為1。

cld置df為0。

8089彙編 標誌暫存器

在8086cpu的指令集中,有的指令的執行是影響標誌暫存器的,比如 add sub mul div inc or and等,它們大都是運算指令,進行邏輯或算術運算 有的指令的執行對標誌暫存器沒有影響,比如 mov push pop等,它們大都是傳送指令。使用一條指令的時候,要注意這條指令的全部功能,...

標誌暫存器df 標誌暫存器

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

暫存器,標誌暫存器

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