1.標(biāo)志寄存器
還記得一開提到的PSW寄存器嗎筹陵,他就是一個特殊的寄存器刽锤,他的作用是存儲最后一次執(zhí)行完語句(一般是邏輯運(yùn)算語句)后程序的一些狀態(tài)。他和其他的寄存器不一樣惶翻,其他的寄存器都是整個寄存器具有一個含義姑蓝,而他是按位來起作用的,他的每一位都有專門的含義吕粗。
8086的標(biāo)志寄存器有9個標(biāo)志位纺荧,分別是OF,DF,IF,TF,SF,ZF,AF,PF,CF,剩下的位在8086中并沒有使用,接下來分別介紹這些標(biāo)志位宙暇。
ZF標(biāo)志位
ZF是標(biāo)志寄存器的第6位输枯,他是零標(biāo)志位,他記錄最后一次執(zhí)行完語句之后占贫,其結(jié)果是否為0桃熄,如果是0,那ZF的值就是1(真)型奥,反之為0(假)瞳收。比如:
mov ax,1??????????????????????
sub ax,1??????????????????????? ;ax寄存器值減一
這段指令執(zhí)行后厢汹,ZF的值就為1螟深,表示結(jié)果是0。
PF標(biāo)志位
PF是標(biāo)志寄存器的第2位烫葬,奇偶標(biāo)志位界弧,記錄最后一次執(zhí)行完語句后,結(jié)果中的1的個數(shù)(二進(jìn)制)搭综,是偶數(shù)垢箕,PF = 1,反之為0兑巾。
SF標(biāo)志位
SF是標(biāo)志寄存器的第7位条获,符號標(biāo)志位,記錄最后一次執(zhí)行完語句后闪朱,結(jié)果的正負(fù)情況月匣,結(jié)果為負(fù),則SF = 1奋姿,若為正,SF = 0素标。
介紹到這里称诗,我們介紹一下有符號數(shù)和無符號數(shù),相信有一定計算機(jī)基礎(chǔ)的人都知道在計算機(jī)中头遭,一個數(shù)據(jù)可以看成有符號數(shù)寓免,也可以看成無符號數(shù),有符號數(shù)的最高位是符號位计维,而且相信你們也一定知道負(fù)數(shù)在計算機(jī)中是以補(bǔ)碼的形式表示的袜香,那么為什么計算機(jī)需要提供補(bǔ)碼這個概念?相信大家一定會脫口而出鲫惶,是為了計算方便蜈首,那么你真的理解這種方便嗎?
這種方便不是為了計算機(jī)而設(shè)計的,這是為了我們程序員才設(shè)計的欢策,為了理解這種方便吆寨,首先你需要明確一個概念,計算機(jī)他不了解有符號數(shù)和無符號數(shù)的區(qū)別踩寇,這是人為定義的啄清,在計算機(jī)看來,這全部都是一串?dāng)?shù)據(jù)俺孙,他只會按照他的做法來處理這段數(shù)據(jù)辣卒。那么我們需要,無論什么情況下我們都能得到最正確的數(shù)據(jù)睛榄,即在我們需要的是無符號數(shù)計算的時候荣茫,計算機(jī)為我們提供的就是無符號數(shù)的結(jié)果,在我們需要有符號數(shù)計算的時候懈费,計算機(jī)為我們提供的就是有符號數(shù)计露。
有了這個需求,我們自然的希望計算機(jī)對這兩種要求所得出來的結(jié)果是一致的憎乙,而我們需要什么什么數(shù)據(jù)票罐,就把這個結(jié)果看成什么樣的數(shù)據(jù),于是補(bǔ)碼就出現(xiàn)了泞边,SF標(biāo)志位该押,CF標(biāo)志位和OF標(biāo)志位也就出現(xiàn)了,有了SF標(biāo)志位阵谚,CF標(biāo)志位和OF標(biāo)志位蚕礼,我們就能任意的將數(shù)據(jù)看成無符號數(shù)和有符號數(shù)了,例如梢什,你需要的是無符號數(shù)奠蹬,那么你可以無視SF的值,而你需要的是有符號數(shù)嗡午,你就可以通過SF的值來判斷數(shù)據(jù)的正負(fù)囤躁。
CF標(biāo)志位
CF是標(biāo)志寄存器的第0位,進(jìn)位標(biāo)志位荔睹,記錄最后一次執(zhí)行完語句后狸演,運(yùn)算結(jié)果的最高有效位向更高位的進(jìn)位值,或從更高位的借位值僻他,一般是進(jìn)行無符號數(shù)運(yùn)算時才會用CF標(biāo)志位宵距。
對于一個8位的寄存器來說,如果所存儲的值超過了他所能存儲的極限吨拗,那么他會把進(jìn)位值給丟掉满哪,而不是向更高位進(jìn)位婿斥,而這個丟棄的進(jìn)位值就來到了CF當(dāng)中。對加法而言翩瓜,CF中存儲的是無符號數(shù)向更高位的進(jìn)位值受扳,對減法而言,CF中存儲的是無符號數(shù)向更高位的借位值兔跌。
為什么說CF標(biāo)志位一般描述的是無符號數(shù)勘高?因為對于一個8位的有符號數(shù)來說,他的最高位是符號位坟桅,故然符號位是不可能從更高的位進(jìn)位或借位的华望,而只有最高位表示的還是數(shù)據(jù)的無符號數(shù)才能向更高位進(jìn)位或借位。
OF標(biāo)志位
OF是標(biāo)志寄存器的第11位仅乓,溢出標(biāo)志位赖舟,在進(jìn)行有符號數(shù)的運(yùn)算時,如果超過了機(jī)器所能表示的范圍稱作溢出夸楣,比如說宾抓,一個8位的有符號數(shù),他所能表示的極限就是-2^7到2^7-1豫喧,那么他如果表示了超過這個范圍的值石洗,就將產(chǎn)生溢出,因為要想超過這個范圍紧显,必定數(shù)據(jù)會影響到第7位的符號位讲衫,那么對于一個有符號數(shù)來說這就是一個錯誤的結(jié)果。
而OF標(biāo)志位就是為了存儲這個溢出而存在的孵班,試想涉兽,一段計算之后的值為正數(shù),但是他的OF標(biāo)志位值為1篙程,那么說明了什么枷畏?一個正數(shù)是以溢出而得到的,那他必然是一個負(fù)數(shù)超過了范圍虱饿。
好了矿辽,介紹完了與有符號數(shù)和無符號數(shù)有關(guān)的標(biāo)志位,現(xiàn)在來總結(jié)一下郭厌,計算機(jī)每一次運(yùn)算,OF雕蔽,CF折柠,SF的值都有可能變化(影響了第七位,OF就變化批狐,第七位溢出了扇售,CF就變化前塔,SF位是第七位的值),因為他不知道你需要的是什么數(shù)據(jù)承冰,所以我們只需要最后根據(jù)我們需要的數(shù)據(jù)再來觀察這3個標(biāo)志寄存位华弓,就可以得出我們需要的數(shù)據(jù)了。