標(biāo)志位簡介:
標(biāo)志寄存器,又稱程序狀態(tài)寄存器(它的內(nèi)容是Program StatusWord,PSW).這是一個(gè)存放條件碼標(biāo)志,控制標(biāo)志和系統(tǒng)標(biāo)志的寄存器.
6個(gè)狀態(tài)標(biāo)志位
CF—進(jìn)位標(biāo)志,加法時(shí)的最高位(D7或D15)產(chǎn)生進(jìn)位或減法時(shí)最高位出現(xiàn)借位,則CF=1,否則CF=0;
AF—輔助進(jìn)位標(biāo)志,供BCD碼使用。當(dāng)D3位出現(xiàn)進(jìn)位或借位時(shí)AF=1,否則AF=0;
OF—溢出標(biāo)志,帶符號(hào)數(shù)進(jìn)行算術(shù)運(yùn)算時(shí),其結(jié)果超出了8位或16位的表示范圍,產(chǎn)生溢出,則OF=1,否則OF=0;
ZF—零標(biāo)志,運(yùn)算結(jié)果各位都為零,則ZF=1,否則ZF=0;
SF—符號(hào)標(biāo)志,運(yùn)算結(jié)果為負(fù)數(shù)時(shí),即運(yùn)算結(jié)果的最高位為1,則SF=1,否則SF=0;
PF—奇偶標(biāo)志,反映操作結(jié)果中“1”的個(gè)數(shù)的情況,若有偶數(shù)個(gè)“1”,則PF=1,否則PF=0。
3個(gè)控制標(biāo)志位
DF—方向標(biāo)志,用來控制數(shù)據(jù)串操作指令的步進(jìn)方向;
當(dāng)設(shè)置DF=1時(shí),將以遞減順序?qū)?shù)據(jù)串中的數(shù)據(jù)進(jìn)行處理。當(dāng)設(shè)置DF=0時(shí),遞增。
IF—中斷允許標(biāo)志,當(dāng)設(shè)置IF=1,開中斷,CPU可響應(yīng)可屏蔽中斷請(qǐng)求;當(dāng)設(shè)置IF=0時(shí),關(guān)中斷,CPU不響應(yīng)可屏蔽中斷請(qǐng)求。
TF—陷阱標(biāo)志,為程序調(diào)試而設(shè)的。當(dāng)設(shè)置TF=1,CPU處于單步執(zhí)行指令的方式;當(dāng)設(shè)置TF=0時(shí),CPU正常執(zhí)行程序。
詳解:
1、進(jìn)位標(biāo)志CF (CarryFlag)
當(dāng)運(yùn)算結(jié)果的最高有效位有進(jìn)位(加法)或借位(減法)時(shí),進(jìn)位標(biāo)志置1,
即CF = 1;否則CF =0。49H + 6DH=B6H,
沒有進(jìn)位:CF = 0BBH +6AH=(1)25H,有進(jìn)位:CF = 1
2、零標(biāo)志ZF (ZeroFlag)
若運(yùn)算結(jié)果為0,則Z F =1;
否則ZF = 049H +6DH=B6H,結(jié)果不是零:
ZF = 075H +8BH=(1)00H,結(jié)果是零:ZF = 1
3、符號(hào)標(biāo)志SF (SignFlag)
運(yùn)算結(jié)果最高位為1,則SF =1;
否則SF = 049H +6DH=B6H,
4、奇偶標(biāo)志PF(ParityFlag)
當(dāng)運(yùn)算結(jié)果最低字節(jié)中“1”的個(gè)數(shù)為零或偶數(shù)時(shí),PF = 1;
否則PF = 03AH +7CH=B6H=10110110B結(jié)果中有5個(gè)1,是奇數(shù):PF = 0
5、溢出標(biāo)志OF (OverflowFlag)
若算術(shù)運(yùn)算的結(jié)果有溢出,則OF=1;
否則 OF=049H + 6DH=B6H,產(chǎn)生溢出:OF = 175H + 8BH =(1)26H,
沒有溢出:OF =0
什么是溢出?
處理器內(nèi)部以補(bǔ)碼表示有符號(hào)數(shù)8位表達(dá)的整數(shù)范圍是:+127~-12816位
表達(dá)的范圍是:+32767~-32768
如果運(yùn)算結(jié)果超出這個(gè)范圍,就產(chǎn)生了溢出有溢出,說明有符號(hào)數(shù)的運(yùn)算結(jié)果不正確49H+6DH=B6H,就是73+109=182,已經(jīng)超出-128~+127范圍,產(chǎn)生溢出,故OF=1;
另一方面,補(bǔ)碼B6H表達(dá)真值是-74,顯然運(yùn)算結(jié)果也不正確
溢出標(biāo)志OF和進(jìn)位標(biāo)志CF是兩個(gè)意義不同的標(biāo)志
進(jìn)位標(biāo)志表示無符號(hào)數(shù)運(yùn)算結(jié)果是否超出范圍,運(yùn)算結(jié)果仍然正確;
溢出標(biāo)志表示有符號(hào)數(shù)運(yùn)算結(jié)果是否超出范圍,運(yùn)算結(jié)果已經(jīng)不正確。
例1:49H +6DH=B6H無符號(hào)數(shù)運(yùn)算:
73+109=182范圍內(nèi),
無進(jìn)位有符號(hào)數(shù)運(yùn)算:73+109=182范圍外,有溢出
例2:BBH +6AH=(1)25H無符號(hào)數(shù)運(yùn)算:
187+106=293范圍外,
有進(jìn)位有符號(hào)數(shù)運(yùn)算:-69+106=37范圍內(nèi),無溢出
溢出的判斷判斷運(yùn)算結(jié)果是否溢出有一個(gè)簡單的規(guī)則:只有當(dāng)兩個(gè)相同符號(hào)數(shù)相加(包括不同符號(hào)數(shù)相減),而運(yùn)算結(jié)果的符號(hào)與原數(shù)據(jù)符號(hào)相反時(shí),產(chǎn)生溢出;因?yàn)?,此時(shí)的運(yùn)算結(jié)果顯然不正確其他情況下,則不會(huì)產(chǎn)生溢出
6、輔助進(jìn)位標(biāo)志AF(AuxiliaryFlag)
運(yùn)算時(shí)D3位(低半字節(jié))有進(jìn)位或借位時(shí),AF = 1;
否則AF = 0。49H +6DH=B6H,D3有進(jìn)位:AF = 1
7、方向標(biāo)志DF(DirectionFlag)
用于串操作指令中,控制地址的變化方向:設(shè)置DF=0,存儲(chǔ)器地址自動(dòng)增加;
設(shè)置DF=1,存儲(chǔ)器地址自動(dòng)減少。
CLD指令復(fù)位方向標(biāo)志:DF=0STD指令置位方向標(biāo)志:DF=1
8、中斷允許標(biāo)志IF(InterruptFlag)
用于控制外部可屏蔽中斷是否可以被處理器響應(yīng):
設(shè)置IF=1,則允許中斷;
設(shè)置IF=0,則禁止中斷。
CLI指令復(fù)位中斷標(biāo)志:IF=0
STI指令置位中斷標(biāo)志:IF=1
9、陷阱標(biāo)志TF(TrapFlag)
用于控制處理器進(jìn)入單步操作方式:
設(shè)置TF=0,處理器正常工作;
設(shè)置TF=1,處理器單步執(zhí)行指令。
單步執(zhí)行指令——處理器在每條指令執(zhí)行結(jié)束時(shí),便產(chǎn)生一個(gè)編號(hào)為1的內(nèi)部中斷這種內(nèi)部中斷稱為單步中斷所以TF也稱為單步標(biāo)志利用單步中斷可對(duì)程序進(jìn)行逐條指令的調(diào)試這種逐條指令調(diào)試程序的方法就是單步調(diào)試
EU控制器是執(zhí)行指令的控制電路,實(shí)現(xiàn)從隊(duì)列中取指令、譯碼、產(chǎn)生控制信號(hào)等。,
在(cmddebug)調(diào)試程序中為了使標(biāo)志位的值顯爾易見,他提供用符號(hào)表示標(biāo)志位的值。
標(biāo)志值為1的標(biāo)記值為0的標(biāo)記
ofOVNV
dfDNUP
ifEIDI
sfNGPL
zfZRNZ
afACNA
pfPEPO
cfCYNC
cmp指令
cmpax,bx
如果(ax)=(bx),則 zf=1
如果(ax)!=(bx), 則 zf=0
如果(ax)<(bx), 則 cf=1
如果(ax)>=(bx), 則 cf=0
如果(ax)>(bx), 則 cf=0且zf=0
如果(ax)<=(bx), 則 cf=1或zf=1
cmp指令配合和條件轉(zhuǎn)移指令配合使用
條件轉(zhuǎn)移指令
指令含義檢測(cè)的相關(guān)標(biāo)志位
je等于則轉(zhuǎn)移zf=1
jne不等于則轉(zhuǎn)移zf=0
jb低于則轉(zhuǎn)移cf=1
jnb不低于則轉(zhuǎn)移cf=0
ja高于則轉(zhuǎn)移cf=0且zf=0
jna不高于則轉(zhuǎn)移cf=1或zf=1
DF標(biāo)志和串傳送指令
DF方向標(biāo)志位,在串處理指令中,控制每次操作后si、di的增減
df=0 每次操作后si、di遞增
df=1 每次操作后si、di遞減
movsb:
相當(dāng)于
moves:[di],byte ptr ds:[si]
如果df=0
inc di
inc si
如果df=1
dec di
dec si
movsw:
相當(dāng)于
moves:[di],word ptr ds:[si]
如果df=0
addsi,2
adddi,2
如果df=1
subsi,2
subdi,2
一般來說,movsb和movsw都和rep配合使用,格式如下:
repmovsb
或者
rep movsw
相當(dāng)于
s:movsb
loop s
rep的作用是根據(jù)cx的值,重復(fù)執(zhí)行rep后面的串傳送指令
pushf將標(biāo)志寄存器的值入棧
popf 將標(biāo)志寄存器的值出棧
愛華網(wǎng)


