王爽《組合語言》第三版 第十一章 標誌暫存器

2021-09-25 19:58:11 字數 3123 閱讀 5773

引言

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段中 兩種方法我都使用...