ARM處理器CPSR標(biāo)志位和條件符之間的關(guān)系_第1頁
ARM處理器CPSR標(biāo)志位和條件符之間的關(guān)系_第2頁
ARM處理器CPSR標(biāo)志位和條件符之間的關(guān)系_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、ARM處理器CPSR標(biāo)志位和條件符之間的關(guān)系華清遠(yuǎn)見劉洪濤本文目的是要理清 ARM處理器的CPSR狀態(tài)標(biāo)志和ARM指令的條件符之間的關(guān)系。一、CPSR寄存器ARM V4的CPSR寄存器(和保存它的 SPSR寄存器)中的位分配如下圖 1所示。零標(biāo)志圖1程序狀態(tài)寄存器格式IRQ怔能位313029 2R76543210NZCV- -IFTM4M3M2MlM0模式倫1#狀態(tài)標(biāo)志位含義:(其它位的含義和本文主題無關(guān),此處不多介紹)NN=1表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0表示運(yùn)算的結(jié)果為正數(shù)或零;Z=1表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的結(jié)果為非零;可以有加法運(yùn)算則 C=0。減法運(yùn)算4種方法設(shè)置(包括比較指令

2、(包括比較指令C的值:CMN):當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí)(無符號數(shù)溢出),C=1,CMP):當(dāng)運(yùn)算時(shí)產(chǎn)生了借位,C=0,否則C=1。/減運(yùn)算指令,C為移出值的最后一位。對于包含移位操作的非加對于其他的非加/減運(yùn)算指令,C的值通常不改變。V可以有2種方法設(shè)置V的值:對于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制的補(bǔ)碼表示的帶符號數(shù)時(shí),V=1示符號位溢出。對于其他的非加/減運(yùn)算指令,V的值通常不改變、條件符及對應(yīng)的標(biāo)志位表1條件符描述表SuHix描述測試的標(biāo)志位EQ等于(Equal)Z=1HE不等于(Notequal)z=oCS/HS無符號的大于或等于C=1CC/LO無符號的小于c=oM工負(fù)數(shù)(M

3、inus)N=1PL正數(shù)或零N=0VS溢出(Overflow)V=1VC沒溢出v=oHI無符號的丈于C=1 & z=oLS無符號的小于或丸于C=0 or Z=1GE犬于等于N=VLT小于(Less Than)NI=VGT大于(Greater Than5Z=0 & N=VLE小于等于Z=1 or N=!VAL總是執(zhí)行(Always)三、關(guān)于C V值更多的解釋處理器內(nèi)部以補(bǔ)碼表示有符號數(shù), 8個(gè)二制位能夠表達(dá)的整數(shù)范圍是: +127 -128 ,16 位表達(dá)的范圍是:+32767 -32768。如果運(yùn)算結(jié)果超出了這個(gè)范圍,就是產(chǎn)生了溢出,有溢出,說明有符號數(shù)的運(yùn)算結(jié)果需要考慮溢出情

4、況。溢出標(biāo)志V和進(jìn)位標(biāo)志C是兩個(gè)意義不同的標(biāo)志。進(jìn)位標(biāo)志表示無符號數(shù)運(yùn)算結(jié)果是 否超出范圍;溢出標(biāo)志表示有符號數(shù)運(yùn)算結(jié)果是否超出范圍。處理器對兩個(gè)操作數(shù)進(jìn)行運(yùn)算時(shí),按照無符號數(shù)求得結(jié)果,并相應(yīng)設(shè)置進(jìn)位標(biāo)志 C;同時(shí),根據(jù)是否超出有符號數(shù)的范圍設(shè)置溢出標(biāo)志V。應(yīng)該利用哪個(gè)標(biāo)志, 則由程序員來決定。 也就是說,如果將參加運(yùn)算的操作數(shù)認(rèn)為是無 符號數(shù),就應(yīng)該關(guān)心進(jìn)位;認(rèn)為是有符號數(shù),則要注意是否溢出。判斷運(yùn)算結(jié)果是否溢出有一個(gè)簡單的規(guī)則:只有當(dāng)兩個(gè)相同符號數(shù)相加,而運(yùn)算結(jié)果的符號與原數(shù)據(jù)符號相反時(shí),產(chǎn)生溢出;其他情況下,則不會產(chǎn)生溢出。LDRLDRr0, =0x7fffffffr1, =0x7000

5、0000 ;ADDSr0, r0, r1; / 結(jié)果=0xeflfffff代碼舉例1:對于無符號數(shù)運(yùn)算來說,沒有進(jìn)位。 對于有符號數(shù)運(yùn)算來說,溢出。此時(shí) C=0 V=1 ;代碼舉例2:LDRLDRr0, =0xffffffffr1, =0x70000000 ;ADDSr0, r0, r1 ; / 結(jié)果=0x6fffffff對于無符號數(shù)運(yùn)算來說,有進(jìn)位。 對于有符號數(shù)運(yùn)算來說,無溢出。此時(shí) C=1 V=0 ;代碼舉例3:LDRLDRADDSr0, =0x8fffffffr1, =0xf0000000 ;r0, r0, r1; / 結(jié)果=0x7fffffff此時(shí)C= ?V= ?;(思考一下,然后在

6、 ARM模擬器中驗(yàn)證下)代碼舉例4: /思考減法時(shí),C值的影響LDRr0, =0x3LDRr1, =0x2SUBSr0, r0, r1對比:LDRr0, =0x3LDRr1, =-2 ;( -2 的補(bǔ)碼 0xfffffffe 會送到 r1)ADDSr0, r0, r1四、CPSR犬態(tài)標(biāo)志和ARM指令的條件符之間的關(guān)系有了上面的背景知識以后,接下來思考表1中CPSR狀態(tài)標(biāo)志和ARM指令的條件符之間的關(guān)系,下面選取其中的一項(xiàng)來分析。如:GE:(有符號數(shù)大于等于)N=0 V=0 :結(jié)果是大于等于 0的數(shù),且無符合溢出,所以大于等于關(guān)系成立N=1 V=1 :結(jié)果小于0,但有符號溢出考慮以下情況:c=a-b1、a<0, b<0減法操作時(shí)不可能符號溢出2、a>0, b<0可能出現(xiàn) N=V=1女口( 8 位數(shù)):100-( -100)=200顯然a>b3、a<0, b>0參照上面提到過的判斷溢出標(biāo)志的簡單規(guī)則,可以得出:在此情況下,減法操作時(shí)如果結(jié)果小于 0 (N=1),則不會出現(xiàn)符號溢出所以(在N=1 V=1前提下a<0,b>0)這種情況不可能出現(xiàn)4、a>0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論