嵌入式系統(tǒng)2-指令系統(tǒng)_第1頁(yè)
嵌入式系統(tǒng)2-指令系統(tǒng)_第2頁(yè)
嵌入式系統(tǒng)2-指令系統(tǒng)_第3頁(yè)
嵌入式系統(tǒng)2-指令系統(tǒng)_第4頁(yè)
嵌入式系統(tǒng)2-指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩70頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式系統(tǒng)設(shè)計(jì)

-指令系統(tǒng)設(shè)計(jì)嵌入式系統(tǒng)的第一步:確定指令系統(tǒng),以指導(dǎo)選擇嵌入式微處理器核。主流嵌入式處理器核: ARM,MIPS,PowerPC,68K,x86一、計(jì)算機(jī)體系結(jié)構(gòu)1、馮.諾依曼結(jié)構(gòu)2、哈佛結(jié)構(gòu)3、RISC與CISC4、匯編語(yǔ)言種類1.馮.諾依曼結(jié)構(gòu)五大部件:ALU,Controller,Memory,Input,Output存儲(chǔ)程序(storedprogram):程序以數(shù)字形式存在,與數(shù)據(jù)一樣被讀寫。指令執(zhí)行次序:順序跳轉(zhuǎn)程序計(jì)數(shù)器ProgramCounter(PC)2、哈佛體系結(jié)構(gòu)程序與數(shù)據(jù)有單獨(dú)的存儲(chǔ)器PC只能指向程序存儲(chǔ)器目前仍然廣泛應(yīng)用指令cache與數(shù)據(jù)cache適用于實(shí)時(shí)信號(hào)處理(大部分的DSP)大量數(shù)據(jù)流入計(jì)算機(jī)數(shù)據(jù)必須在精確的時(shí)間內(nèi)處理完成兩種存儲(chǔ)器模型比較微處理器采用的馮·諾依曼結(jié)構(gòu)將指令和數(shù)據(jù)存放在同一存儲(chǔ)空間中,統(tǒng)一編址,指令和數(shù)據(jù)通過(guò)同一總線訪問(wèn)同一地址空間上的存儲(chǔ)器;DSP芯片采用的哈佛結(jié)構(gòu)則將程序和數(shù)據(jù)存儲(chǔ)在不同的存儲(chǔ)空間中,即程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器是兩個(gè)相互獨(dú)立的存儲(chǔ)器,每個(gè)存儲(chǔ)器獨(dú)立編制、獨(dú)立訪問(wèn)。與之相對(duì)應(yīng)的是系統(tǒng)中設(shè)置的兩條總線-程序總線和數(shù)據(jù)總線,從而使數(shù)據(jù)的吞吐率提高了一倍。3、RISC與CISCCISC:復(fù)雜指令系統(tǒng)計(jì)算機(jī)具有大量的指令和尋址方式8/2原則:80%的程序只使用20%的指令大多數(shù)程序只使用少量的指令就能夠運(yùn)行。RISC:精簡(jiǎn)指令系統(tǒng)計(jì)算機(jī)在通道中只包含最有用的指令確保數(shù)據(jù)通道快速執(zhí)行每一條指令使CPU硬件結(jié)構(gòu)設(shè)計(jì)變得更為簡(jiǎn)單RISC一般性能比CISC高4、匯編語(yǔ)言種類1)堆棧型匯編PushaPushbAddPopc2)累加器型匯編LoadaAddbStorec3)通用寄存器型匯編(load/store)Load$1,ALoad$2,BAdd$3,$1,$2Store$3,C二、ARM處理器屬于RISC體系A(chǔ)RM:只設(shè)計(jì)內(nèi)核的英國(guó)公司,自己不制造VLSI設(shè)備,只提供授權(quán)ARM內(nèi)核被授權(quán)給數(shù)百家廠商ARM主要應(yīng)用于無(wú)線局域網(wǎng)、3G、手機(jī)、手持設(shè)備、有線網(wǎng)絡(luò)通訊應(yīng)用形式:集成到專用芯片中作控制器ARM體系結(jié)構(gòu)ARM7采用馮.諾依曼體系A(chǔ)RM9采用哈佛體系對(duì)匯編程序員透明地址32位地址長(zhǎng)度可以配置為低序或者高序

字的最低位放最低位字節(jié)(低序)

字的最低位放最高位字節(jié)(高序)2.1匯編書寫模式屬于通用寄存器型(GPR)匯編Load-Store結(jié)構(gòu)數(shù)據(jù)必須裝載到寄存器才能運(yùn)算Load從內(nèi)存裝到寄存器Store從寄存器存儲(chǔ)到內(nèi)存ARM的寄存器16個(gè)通用寄存器r0…r15r15同時(shí)做PC1個(gè)特殊寄存器:當(dāng)前程序狀態(tài)寄存器CPSR在進(jìn)行運(yùn)算時(shí)被自動(dòng)設(shè)置CPSR高四位為NZCVN:負(fù)數(shù)Z:為0C:進(jìn)位V:溢出2.2數(shù)據(jù)運(yùn)算1)寄存器型指令:addr0,r1,r2r1寄存器的內(nèi)容加r2寄存器的內(nèi)容,存到r0算術(shù)運(yùn)算Add加Adc進(jìn)位加Sub減Sbc進(jìn)位減Rsb:逆減Rsc:進(jìn)位逆減Mul:乘Mla:乘且累加邏輯運(yùn)算And:按位與Orr:按位或EOR:按位異或BIC:位清除移位運(yùn)算LSL:邏輯左移(添0)LSR:邏輯右移(添0)ASL:算術(shù)左移ASR:算術(shù)右移ROR:循環(huán)右移RRX:帶進(jìn)位位的循環(huán)右移比較指令CMP:比較CMN:比較求反TST:按位測(cè)試TEQ:按位測(cè)試求反移動(dòng)指令MOV:移動(dòng)MVN:移動(dòng)求反內(nèi)存訪問(wèn)指令LDR:裝入STR:存儲(chǔ)LDRH:裝入半字STRH:存儲(chǔ)半字LDRSH:裝入半個(gè)帶符號(hào)字LDRB:裝入字節(jié)STRB:存儲(chǔ)字節(jié)ADR:設(shè)置寄存器為地址2)立即數(shù)尋址Addr0,r1,#23)寄存器間接尋址LDRr0,[r1,#4]4)自動(dòng)變址LDRr0,[r1,#16]!r1的內(nèi)容加16,然后用這個(gè)新值作為地址5)后變址LDRr0,[r1],#16把r1為地址的內(nèi)存數(shù)據(jù)載入到r0,然后把r1的值加入16并把新值賦值給r16)例子:x=(a+b)-c;ADRr4,aLDRr0,[r4]ADRr5,bLDRr1,[r5]ADDr3,r0,r1ADRr4,cLDRr2,[r4]SUBr3,r3,r2ADRr4,xSTRr3,[r4]2.3控制流1)B指令分支指令分支目標(biāo)計(jì)算例子B#100表示當(dāng)前程序計(jì)數(shù)器的值加上400。(100字長(zhǎng))2)條件碼EQ:等于0,Z=1NE:不等于0,Z=0CS:進(jìn)位置1,C=1CC:進(jìn)位清除:C=0MI:負(fù)數(shù),N=1PL:非負(fù)數(shù):N=0VS:溢出,V=1VC:非溢出:V=0HI:無(wú)符號(hào)大于,C=1且Z=0LS:無(wú)符號(hào)小于或等于,C=0或Z=1GE:有符號(hào)小于或等于,N=VLT:有符號(hào)小于,N≠VGT:有符號(hào)大于,Z=0且N=VLE:有符號(hào)小于或等于,Z=1或N≠V3)例子:if(a<b){x=5;y=c+d;}elsex=c-d;ADRr4,aLDRr0,[r4]ADRr4,bLDRr1,[r4]CMPr0,r1 ;a<b?BGEfblock ;ifa>=b,gotofblockMOVr0,#5ADRr4,xSTRr0,[r4]ADRr4,cLDRr0,[r4]ADRr4,dLDRr1,[r4]ADDr0,r0,r1 ;a+bADRr4,ySTRr0,[r4]Bafter ;branchtoendfblock:ADRr4,cLDRr0,[r4]ADRr4,dLDRr1.[r4]SUBr0,r0,r1 ;a-bADRr4,xSTRr0,[r4]after:同樣c程序,用匯編可以寫成不需要跳轉(zhuǎn)的。如下:ADRr4,aLDRr0,[r4]ADRr4,bLDRr1,[r4]CMPr0,r1 ;a<b?MOVLTr0,#5ADRLTr4,xSTRLTr0,[r4]ADRLTr4,cLDRLTr0,[r4]ADRLTr4,dLDRLTr1,[r4]ADDLTr0,r0,r1 ;a+bADRLTr4,ySTRLTr0,[r4]ADRGEr4,cLDRGEr0,[r4]ADRGEr4,dLDRGEr1.[r4]SUBGEr0,r0,r1 ;a-bADRGEr4,xSTRGEr0,[r4]習(xí)題1在ARM中實(shí)現(xiàn)C的switch語(yǔ)句switch(test){case0:…break;case1:…break;…}習(xí)題2在ARM中實(shí)現(xiàn)C的循環(huán)語(yǔ)句FIR求∑cixi1≤i≤N

for(i=0,f=0;i<N;i++) f=f+c[i]*x[i];習(xí)題1解答ADRr2,testLDRr0,[r2]ADRr1,switchtabLDRr15,[r1,r0,LSL#2]switchtabDCDcase0DCDcase1…case0…;codeforcase0case1…;codeforcase1…2.4函數(shù)x=a+b;foo(x);y=c-d;匯編:BLfoo ;分支鏈接分支前將當(dāng)前pc值存在r14中。返回只要MOVr15,r14調(diào)用過(guò)程必須注意不覆蓋r14嵌套調(diào)用上述方法不適用于嵌套調(diào)用嵌套調(diào)用時(shí),將返回地址存堆棧voidf1(inta){f2(a);}f1 LDRr0,[r13]STRr13!,[r14]STRr13!,[r0]BLf2SUBr13,#4LDRr13!,r15三、SHARC處理器使用哈佛結(jié)構(gòu)的DSP例子:R1=DM(M0,I0),R2=PM(M8,I8);!注釋LABEL: R3=R1+R2;每條指令用分號(hào)結(jié)束,!開始為注釋3.1存儲(chǔ)器結(jié)構(gòu)SHARC指令48位基本數(shù)據(jù)字32位地址位32位片上帶大量的存儲(chǔ)器系列中的21061有1Mbit片上存儲(chǔ)器存儲(chǔ)器包括PM:程序存儲(chǔ)器DM:數(shù)據(jù)存儲(chǔ)器芯片外還能夠加更多的存儲(chǔ)器數(shù)據(jù)類型32位IEEE單精度浮點(diǎn)40位IEEE擴(kuò)展精度浮點(diǎn)32位整數(shù)主要設(shè)計(jì)為浮點(diǎn)密集型運(yùn)算適用DSP改進(jìn)的哈佛結(jié)構(gòu)程序存儲(chǔ)器可以包含數(shù)據(jù)與指令數(shù)據(jù)可以并行取出3.2體系結(jié)構(gòu)整數(shù)操作使用R0到R15,16個(gè)整數(shù)寄存器浮點(diǎn)操作使用F0到F15,16個(gè)浮點(diǎn)寄存器所有數(shù)據(jù)都是40bit,如果32位數(shù)據(jù)存儲(chǔ)時(shí),存在高32位三個(gè)數(shù)據(jù)功能單元一個(gè)ALU一個(gè)乘法器一個(gè)移位器三個(gè)模式寄存器算術(shù)狀態(tài)(ASTAT)粘著(STKY)隨著ASTAT的位被設(shè)置,但不被清除模式1(MODE1)浮點(diǎn)運(yùn)算舍入等3.3整數(shù)運(yùn)算Rn=Rx+Ry 加Rn=Rx-Ry 減Rn=Rx+Ry+CI 進(jìn)位加Rn=Rx-Ry+CI-1 借位減Rn=(Rx+Ry)/2 平均COMP(Rx,Ry) 比較Rn=Rx+CI 進(jìn)位加Rn=Rx+CI-1 借位加Rn=Rx+1 加1Rn=Rx-1 減1Rn=-Rx 求反Rn=ABSRx 絕對(duì)值Rn=PASSRx 將Rx拷貝到RnRn=RxandRy邏輯加Rn=RxorRy 邏輯或Rn=RxxorRy 邏輯異或Rn=NotRx 邏輯非Rn=Min(Rx,Ry) 求最小值Rn=Max(Rx,Ry) 求最大值Rn=ClipRxbyRy 在[-Ry,Ry]范圍內(nèi)截取Rx溢出處理溢出導(dǎo)致最大范圍的值不是循環(huán)3.4浮點(diǎn)運(yùn)算Fn=Fx+FyFn=Fx-FyFn=ABS(Fx+Fy)Fn=ABS(Fx-Fy)Fn=(Fx+Fy)/2COMP(Fx,Fy)Fn=-FxFn=ABSFxFn=PassFxFn=RNDFx 舍入Fn=ScalbFxbyRy 用Ry換算成Fx的指數(shù)Rn=MantFx 提取Fx的尾數(shù)Rn=LOGBFx 把Fx的指數(shù)換算成整數(shù)Rn=FIXFx,Rn=TRUNCFx將浮點(diǎn)轉(zhuǎn)換成整數(shù)Rn=FLOATRxbyRy,FLOATRx將整數(shù)換成浮點(diǎn)Fn=RECIPSFx 為倒數(shù)創(chuàng)建種子Fn=RSQRTSFx 為倒數(shù)平方根創(chuàng)建種子Fn=FxCOPYSIGNFy 把Fy的符號(hào)拷貝到FxFn=Min(Fx,Fy)Fn=Max(Fx,Fy)Fn=ClipFxbyFy3.5SHARC的移位操作Rn=LSHIFTRxbyRy 邏輯移位Ry位Rn=RnORSHIFTRxbyRy 邏輯移位并邏輯或Rn=ASHIFTRxbyRy 算術(shù)移位Rn=RnORASHIFTRxbyRy 算術(shù)移位并邏輯或Rn=ROTRxbyRy 循環(huán)移位Ry位Rn=BCLRRxbyRy 清Rx中的一位Rn=BSETRxbyRY 設(shè)Rx中的一位Rn=BTGLRxbyRy 切換Rx中的1位BTSTRxbyRy 測(cè)試Rx中的1位Rn=FDEPRxbyRy 將Rx中的域累計(jì)進(jìn)Rn中Rn=RnORFDEPRxbyRy 使用OR操作累計(jì)并符號(hào)擴(kuò)展Rn=FEXTRxbyRy 提取Rx中的域Rn=EXPRx 提取指數(shù)域Rn=EXPRx(Ex) 從ALU中提取指數(shù)域Rn=LEFTZRx 提取引導(dǎo)0的個(gè)數(shù)Rn=LEFTORx 提取引導(dǎo)1的個(gè)數(shù)Rn=FPACKFx 將32位浮點(diǎn)數(shù)轉(zhuǎn)換為16位浮點(diǎn)數(shù)Rn=FUNPACKRn 將16位浮點(diǎn)數(shù)轉(zhuǎn)換為32位浮點(diǎn)數(shù)3.6數(shù)操作狀態(tài)位ASTAT中有AZ,AU,AN,AV,AC,AI,MN,MV,MU,MI,SZ,SV,SSSTKY中溢出位AOS,MOS,MVS,MUS,MIS具體含義略3.7內(nèi)存操作裝入存儲(chǔ)體系結(jié)構(gòu)提供用來(lái)控制裝入和存儲(chǔ)的特殊寄存器兩個(gè)數(shù)據(jù)地址發(fā)生器(DAG)一個(gè)是數(shù)據(jù)存儲(chǔ)器一個(gè)是程序存儲(chǔ)器DAG能夠象對(duì)數(shù)組一樣進(jìn)行訪問(wèn)數(shù)據(jù)3.8DAG尋址模式1)最簡(jiǎn)單的立即值R0=DM(0x20000000)或者R0=RM(_a)或DM(_a)=R02)絕對(duì)地址3)具有更新的后修改模式R0=DM(I3,M1)DM(I2,1)=R14)基址加偏移量尋址R0=DM(M1,I0)如I0=0x20000000,M1=4將0x20000004數(shù)據(jù)裝入R05)循環(huán)緩沖區(qū)6)反位尋址應(yīng)用于FFT3.9程序例子x=(a+b)-cR0=DM(_a);R1=DM(_b);R3=R1+R2;R2=DM(_c);R3=R3-R2;

溫馨提示

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

評(píng)論

0/150

提交評(píng)論