在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM微處理器的編程模型之:ARM寄存器組織

            ARM微處理器的編程模型之:ARM寄存器組織

            作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/257086.htm

            1.讀操作

            由于的流水線機(jī)制,指令讀出的r15的值是指令地址加上8個字節(jié)。由于指令始終是字對齊的,所以讀出的結(jié)果位[1∶0]始終是0(但在Thumb狀態(tài)下,指令為2字節(jié)對齊,bit[0]=0)。

            讀PC主要用于快速地對臨近的指令或數(shù)據(jù)進(jìn)行位置無關(guān)尋址,包括程序中的位置無關(guān)分支。

            需要注意的是,當(dāng)使用指令STR或STM對r15進(jìn)行保存時,保存的可能是當(dāng)前指令地址加8或當(dāng)前指令地址加12。到底是哪種方式,取決于芯片的具體設(shè)計方式。當(dāng)然,在同一個芯片中,要么采用當(dāng)前指令地址加8,要么采用當(dāng)前指令地址加12,不可能有些指令采用當(dāng)前地址加8,有些采用當(dāng)前地址加12。程序開發(fā)人員應(yīng)盡量避免使用STR或STM指令來對r15進(jìn)行操作。當(dāng)不可避免要使用這種方式時,可以先通過一小段程序來確定所使用的芯片是使用哪種方式實(shí)現(xiàn)的。例如:

            SUB R1,PC,#4 ;r1中存放STR指令地址

            STR PC,[R0] ;將PC=STR地址+offset保存到r0中

            LDR R0,[R0]

            SUB R0,R0,R1 ;offset=PC-STR地址

            2.寫操作

            當(dāng)指令向r15寫入地址數(shù)據(jù)時,如果指令成功返回,它將使程序跳轉(zhuǎn)到該地址執(zhí)行。由于指令是字對齊的,寫入r15的地址值應(yīng)滿足bit[1:0]=0b00,具體的規(guī)則根據(jù)ARM版本的不同也有所不同:

            · 對于ARM版本3以及更低的版本,寫入r15的地址值bit[1:0]被忽略,即寫入r15的地址值將與0xFFFFFFFC做與操作。

            · 對于ARM版本4以及更高的版本,程序必須保證寫入r15寄存器的地址值的bit[1:0]為0b00,否則將會產(chǎn)生不可預(yù)知的結(jié)果。

            對于Thumb指令集來說,指令是半字對齊的。處理器將忽略bit[0],即寫入r15寄存器的值在寫入前要先和0XFFFFFFFE做與操作。

            有些指令對r15的操作有特殊的要求。比如,指令BX利用bit[0]來確定需要跳轉(zhuǎn)到的子程序是ARM狀態(tài)還是Thumb狀態(tài)。

            注意

            這種讀取PC值和寫入PC值的不對稱操作需要特別注意。

            3.3.3 程序狀態(tài)寄存器

            當(dāng)前程序狀態(tài)寄存器CPSR(Current Program Status Register)可以在任何處理器模式下被訪問,它包含下列內(nèi)容。

            · ALU(Arithmetic Logic Unit)狀態(tài)標(biāo)志的備份。

            · 當(dāng)前的處理器模式。

            · 中斷使能標(biāo)志。

            · 設(shè)置處理器的狀態(tài)(只在4T架構(gòu))。

            每一種處理器模式下都有一個專用的物理寄存器作備份程序狀態(tài)寄存器SPSR(Saved Program Status Register)。當(dāng)特定的異常中斷發(fā)生時,這個物理寄存器負(fù)責(zé)存放當(dāng)前程序狀態(tài)寄存器的內(nèi)容。當(dāng)異常處理程序返回時,再將其內(nèi)容恢復(fù)到當(dāng)前程序狀態(tài)寄存器。

            注意

            由于用戶模式和系統(tǒng)模式不屬于異常中斷模式,所以它們沒有SPSR。當(dāng)在用戶模式或系統(tǒng)模式中訪問SPSR,將會產(chǎn)生不可預(yù)知的結(jié)果。

            CPSR寄存器(和保存它的SPSR寄存器)中的位分配如圖3.4所示。

            注意

            對于CMP指令,Z=1表示進(jìn)行比較的兩個數(shù)相等。

            · C

            下面分4種情況討論C的設(shè)置方法。

            ① 在加法指令中(包括比較指令CMN),當(dāng)結(jié)果產(chǎn)生了進(jìn)位,則C=1,表示無符號數(shù)運(yùn)算發(fā)生上溢出;其他情況下C=0。

            ② 在減法指令中(包括比較指令CMP),當(dāng)運(yùn)算中發(fā)生錯位(即無符號數(shù)運(yùn)算發(fā)生下溢出),則C=0,;其他情況下C=1。

            ③ 對于在操作數(shù)中包含移位操作的運(yùn)算指令(非加/減法指令),C被設(shè)置成被移位寄存器最后移出去的位。

            ④ 對于其他非加/減法運(yùn)算指令,C的值通常不受影響。

            · V

            下面分兩種情況討論V的設(shè)置方法。

            ① 對于加/減運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果都是以二進(jìn)制的補(bǔ)碼表示的帶符號的數(shù)時,V=1表示符號位溢出。

            ② 對于非加/減法指令,通常不改變標(biāo)志位V的值(具體可參照ARM指令手冊)。

            盡管以上C和V的定義看起來頗為復(fù)雜,但使用時在大多數(shù)情況下用一個簡單的條件測試指令即可,不需要程序員計算出條件碼的精確值即可得到需要的結(jié)果。

            注意

            下面兩種情況會對CPSR的條件標(biāo)志位產(chǎn)生影響。

            1.比較指令(CMN、CMP、TEQ、TST)。

            2.目的寄存器不是r15的算術(shù)邏輯運(yùn)算和數(shù)據(jù)傳輸指令。這些指令可以通過在指令末尾加標(biāo)志“S”來通知處理器指令的執(zhí)行結(jié)果影響標(biāo)志位。

            塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理


            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉