嵌入式系統2-指令系統_第1頁
嵌入式系統2-指令系統_第2頁
嵌入式系統2-指令系統_第3頁
嵌入式系統2-指令系統_第4頁
嵌入式系統2-指令系統_第5頁
已閱讀5頁,還剩70頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

嵌入式系統設計

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

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

字的最低位放最高位字節(高序)2.1匯編書寫模式屬于通用寄存器型(GPR)匯編Load-Store結構數據必須裝載到寄存器才能運算Load從內存裝到寄存器Store從寄存器存儲到內存ARM的寄存器16個通用寄存器r0…r15r15同時做PC1個特殊寄存器:當前程序狀態寄存器CPSR在進行運算時被自動設置CPSR高四位為NZCVN:負數Z:為0C:進位V:溢出2.2數據運算1)寄存器型指令:addr0,r1,r2r1寄存器的內容加r2寄存器的內容,存到r0算術運算Add加Adc進位加Sub減Sbc進位減Rsb:逆減Rsc:進位逆減Mul:乘Mla:乘且累加邏輯運算And:按位與Orr:按位或EOR:按位異或BIC:位清除移位運算LSL:邏輯左移(添0)LSR:邏輯右移(添0)ASL:算術左移ASR:算術右移ROR:循環右移RRX:帶進位位的循環右移比較指令CMP:比較CMN:比較求反TST:按位測試TEQ:按位測試求反移動指令MOV:移動MVN:移動求反內存訪問指令LDR:裝入STR:存儲LDRH:裝入半字STRH:存儲半字LDRSH:裝入半個帶符號字LDRB:裝入字節STRB:存儲字節ADR:設置寄存器為地址2)立即數尋址Addr0,r1,#23)寄存器間接尋址LDRr0,[r1,#4]4)自動變址LDRr0,[r1,#16]!r1的內容加16,然后用這個新值作為地址5)后變址LDRr0,[r1],#16把r1為地址的內存數據載入到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指令分支指令分支目標計算例子B#100表示當前程序計數器的值加上400。(100字長)2)條件碼EQ:等于0,Z=1NE:不等于0,Z=0CS:進位置1,C=1CC:進位清除:C=0MI:負數,N=1PL:非負數:N=0VS:溢出,V=1VC:非溢出:V=0HI:無符號大于,C=1且Z=0LS:無符號小于或等于,C=0或Z=1GE:有符號小于或等于,N=VLT:有符號小于,N≠VGT:有符號大于,Z=0且N=VLE:有符號小于或等于,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程序,用匯編可以寫成不需要跳轉的。如下: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]習題1在ARM中實現C的switch語句switch(test){case0:…break;case1:…break;…}習題2在ARM中實現C的循環語句FIR求∑cixi1≤i≤N

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

溫馨提示

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

評論

0/150

提交評論