引言
8086cpu的標誌暫存器有16位,其中儲存的資訊通常被稱為程式狀態字(psw)。
我們己經使用過8086cpu的ax、bx、cx、dx、si、di、bp、sp、ip、cs、ss、ds、es等13個暫存器了。
本章中的標誌暫存器(以下簡稱為flag)是我們要學習的最後乙個暫存器。
flag暫存器是按位起作用的,也就是說,它的每一位都有專門的含義,記錄特定的資訊。
8086cpu的flag暫存器的結構:
flag的1、3、5、12、13、14、15位在8086cpu中沒有使用,不具有任何含義。而0、2、4、6、7、8、9、10、11位都具有特殊的含義。
11.1 zf標誌
flag的第6位是zf,零標誌位。它記錄相關指令執行後,結果為0 ,zf = 1;結果不為0,zf = 0。
在8086cpu的指令集中,有的指令的執行是影響標誌暫存器的,比如:add、sub、mul、div、inc、or、and等,它們大都是運算指令(進行邏輯或算術運算);
有的指令的執行對標誌暫存器沒有影響,比如:mov、push、pop等,它們大都是傳送指令。
11.2 pf標誌
flag的第2位是pf,奇偶標誌位。它記錄指令執行後,結果的所有二進位制位(最低有效字)中1的個數:為偶數,pf = 1;為奇數,pf = 0。
11.3 sf標誌
flag的第7位是sf,符號標誌位。它記錄指令執行後,結果為負,sf = 1;結果為正,sf = 0。
對於同乙個二進位制資料,計算機可以將它當作無符號資料來運算,也可以當作有符號資料來運算,實際上無關緊要,重要的是使用者如何看待。
我們可以將add指令進行的運算當作無符號數的運算,那麼add指令相當於計算129+1,結果為130(10000010b);
也可以將add指令進行的運算當作有符號數的運算,那麼add指令相當於計算-127+1,結果為-126(10000010b)。
如果我們將資料當作無符號數來運算,sf的值則沒有意義,雖然相關的指令影響了它的值。
11.4 cf標誌
flag的第0位是cf,進製標誌位。
一種情況是兩個資料做加法產生了最高位的進製,另外一種情況,當兩個資料做減法的時候,有可能向更高位借位。
11.5 of標誌
在進行有符號數運算的時候,如結果超過了機器所能表示的範圍稱為溢位。
cf是對無符號數運算有意義的標誌位;而of是對有符號數運算有意義的標誌位。
11.6 adc指令
adc是帶進製加法指令 ,它利用了cf位上記錄的進製值。
格式: adc 操作物件1,操作物件2
功能:操作物件1=操作物件1+操作物件2+cf
比如:adc ax,bx 實現的功能是:(ax)=(ax)+(bx)+cf
使用adc可以對任意大的資料進行加法運算。
11.7 sbb指令
sbb是帶錯位減法指令,它利用了cf位上記錄的借位值。
格式:sbb 操作物件1,操作物件2
功能:操作物件1=操作物件1–操作物件2–cf
比如:sbb ax,bx實現功能: (ax) = (ax) – (bx) – cf
使用sbb指令我們可以對任意大的資料進行減法運算。
11.8 cmp指令
cmp 是比較指令,功能相當於減法指令,只是不儲存結果。
cmp 指令執行後,將對標誌暫存器產生影響。
格式:cmp 操作物件1,操作物件2
功能:計算操作物件1–操作物件2 但並不儲存結果,僅僅根據計算結果對標誌暫存器進行設定。
11.9 檢測比較結果的條件轉移指令
e:表示equal;
ne:表示not equal;
b:表示below;
nb:表示not below;
a:表示above;
na:表示not above。
11.10 df標誌和串傳送指令
flag的第10位是df,方向標誌位。在串處理指令中,控制每次操作後si,di的增減。
df = 0:每次操作後si,di遞增;
df = 1:每次操作後si,di遞減。
格式: movsb(w)
功能:(以位元組為單位傳送)
1.((es)×16 + (di)) = ((ds) ×16 + (si))2.
如果df = 0則:
(si) = (si) + 1
(di) = (di) + 1
如果df = 1則:
(si) = (si) - 1
(di) = (di) - 1
8086cpu提供下而兩條指令對df位進行設定:
cld指令:將標誌暫存器的df位置0
std指令:將標誌暫存器的df位置1
movsb和movsw進行的是串傳送操作中的乙個步驟,一般來說,movsb 和 movsw 都和rep配合使用,格式如下: rep movsb。
rep的作用是根據cx的值,重複執行後面的串傳送指令。
11.11 pushf和popf
pushf :將標誌暫存器的值壓棧;
popf :從棧中彈出資料,送入標誌暫存器中。
11.12 標誌暫存器在debug中的表示
在debug中,我們可以看到類似下面的資訊:
組合語言第三版(王爽)第十一章檢測點答案及解析
11.1寫出下面每條指令執行後,zf pf sf等標誌位的值 sub al al zf pf sf mov al 1 zf pf sf push ax zf pf sf pop bx zf pf sf add al,bl zf pf sf add al,10 zf pf sf mul al zf p...
《組合語言》王爽第三版 實驗9
datas segment 此處輸入資料段 db w 00000010b,e 00000010b,l 00000010b,c 00000010b,o 00000010b db m 00000010b,e 00000010b,0,t 00100100b,o 00100100b,0 db m 01110...
王爽 組合語言第三版實驗7
這個題目做了很久,使用了2中方法做出了結果,不過目前在單步除錯時還有點疑問。題目 power idea公司從1975成立一直到1995年的基本情況被定義到了datasg中,程式設計將datasg段中的資料寫入到table段中,並計算21年中的人均收入 取整 結果儲存到table段中 兩種方法我都使用...