05 05-06 arm匯編程序設(shè)計4學時5 1-5 4 arm程序設(shè)計_第1頁
05 05-06 arm匯編程序設(shè)計4學時5 1-5 4 arm程序設(shè)計_第2頁
05 05-06 arm匯編程序設(shè)計4學時5 1-5 4 arm程序設(shè)計_第3頁
05 05-06 arm匯編程序設(shè)計4學時5 1-5 4 arm程序設(shè)計_第4頁
05 05-06 arm匯編程序設(shè)計4學時5 1-5 4 arm程序設(shè)計_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第5章ARM程序設(shè)計本章主要內(nèi)容5.0 集成開發(fā)環(huán)境使用5.1 匯編語言程序設(shè)計方5.2 順序程序設(shè)計5.3 分支程序設(shè)計5.4 循環(huán)程序設(shè)計5.5 子程序設(shè)計/參數(shù)傳遞方法5.6 C語言與匯編語言混合程序設(shè)計方法5.1 ARM匯編語言程序設(shè)計1. 匯編語言程序設(shè)計步驟(1) 分析問題,明確要求明確要解決的問題、要達到的目的、技術(shù)指標等(2) 確定算法根據(jù)實際問題的要求、給出的條件及特點,找出規(guī)律性,最后確定所采用的計算公式和計算方法,這就是一般所說的算法。 算法是進行程序設(shè)計的依據(jù),它決定了程序的正確性和程序的指令。(3) 畫程序流程圖,用圖解來描述和說明解題步驟(4)分配內(nèi)存工作單元,確定

2、程序與數(shù)據(jù)區(qū)的存放地址(5)編寫源程序(6) 程序優(yōu)化(7) 程序調(diào)試、修改和最后確定源程序只有通過上機調(diào)試并得出正確結(jié)果的程序,才能認為是正確的程序。沒有調(diào)試過的程序,很難保證程 序無錯誤,程序調(diào)試是不可缺省的。2. 程序段/數(shù)據(jù)段范例AREA Init,CODE,READONLY ;只讀段Init,偽指令ENTRY;程序入口點, 偽指令StartLDR R0,=0x3ff5000;若整個程序只有一個Entry, Start=0x0LDR R1,=0xffSTRR1,R0;初始化端口0x3ff5000 LDR R0,=0x3ff5008LDR R1,=0x01STRR1,R0;初始化端口0x

3、3ff5008AREAStrings, DATA, READWRITEsrcstrDCB First string - source,0dststrDCB Second string - destination,0END;程序結(jié)束5.2 順序程序設(shè)計對于一些簡單的數(shù)據(jù)處理,只要把完成處理的各個步驟用匯編語言描述清楚,讓計算機按指令編寫的次序從頭到尾一條條執(zhí)行即可,這樣的程序 結(jié)構(gòu)稱為順序結(jié)構(gòu)。【例5-1】已知X和Y是數(shù)據(jù)段中的兩個無符號16bit字單元, 用程序完成表達式 Z =(X2Y2)/ 2 的計算。1. 分配空間XDCWU0x1000YDCWU0x2001;16b ZDCDU0x000

4、00000 ;32b2. 找到合適指令順序設(shè)計 計算程序“參考ARM-ISA指令集(中文版).chm”文件AREA Init,CODE,READONLY ;只讀段Init,偽指令ENTRY;程序入口點, 偽指令StartLDR R0,=X;若整個程序只有一個Entry, Start=0x0LDRH R1,R0;LDRSHLDR R0,=YLDRH R2,R0MUL R3,R1,R1;R3=R1*R1MLA R3,R2,R2,R3;R3=R2*R2+R3MOV R3, R3, ASR#1;R3=R3/2LDR R0,=Z; STRR3,R0AREA VAR, DATA, READWRITEXDC

5、WU0x1000YDCWU0x2001ZDCDU0x00000000END;程序結(jié)束5.3 分支程序設(shè)計分支程序是利用條件執(zhí)行指令, 使程序執(zhí)行到某一指令后,根據(jù)條 件是否滿足,來改變程序執(zhí)行的次 序。在程序設(shè)計中經(jīng)常會遇到各種 判斷和比較,例如“相等”和“不 相等”;“正”和“負”;“大于”和“小于”;“滿足條件”和“不滿足條件”等等,這些判斷和比較在程序中都可以組成各種不同的邏輯框,并產(chǎn)生相應(yīng)的分支程序。是條件1否是條件2分支程序段3否分支程序段2分支程序段1結(jié)束1. 普通分支程序設(shè)計(相當于C語言的if else 結(jié)構(gòu))YesR0(R5)NoNE?R1(R5)(R5)-10;匯編:CMP

6、R5,10 MOVEQR0,R5 MOVR1,R5?實現(xiàn)下列代碼功能if(R5!=10) R1=R5;else R0=R5;匯編如何改寫/C程序if(R5!=10) R1=R5;else R0=R5;R1=R5 例:若R5 = 10, R5僅存入R1,否則分別存入R0,R1。問:若R5!=10,存入R0,否則存入R1. 程序如何改?3分支程序流程3分支程序段代碼CMP R1,R2HI LOCMPR1,R2BEQExitBLSLab2BHILab1Lab1 B ExitLab2 Exit HI/LO/EQ?EQ執(zhí)行Lab1程序段執(zhí)行Lab2程序段exit2. 多分支程序設(shè)計(相當于C語言的swi

7、tch case 結(jié)構(gòu))例:若R1=1,執(zhí)行程序,若R1=2,執(zhí)行程序,若R1=10,執(zhí)行程序10, 否則不做任何處理。程序10R1=10 ?NoYes程序2R1=2 ?NoYesNo程序1YesR1=1 ?ExitR1=1?L3 L10 CMP R1,#10BNE ExitExit: ExitR1,#2 L3ExitR1,#1L2CMPBNE BCMP BNEB;匯編:L1L2/C程序switch(a1)case 1:;break; case 2:;break; case 10:;break; default:break;2. 帶狀態(tài)切換的分支程序設(shè)計例:若R1=1,執(zhí)行程序,若R1=1,執(zhí)

8、行程序,若R1=10,執(zhí)行程序10, 否則不做任何處理。跳轉(zhuǎn)地址標號;從Arm狀態(tài)切換到Thumb狀態(tài)CODE32地址最低位為1,表示切換到Thumb狀態(tài)Lable32LDRR0,=Lable16+1 BXR0;從Thumb狀態(tài)切換到ARM狀態(tài)CODE16地址最低位為0,表示切換到ARM狀態(tài)Lable16LDRR0,=Lable32 BXR05.4 循環(huán)程序設(shè)計循環(huán)程序分為單循環(huán)和多重循環(huán),兩重以結(jié)束否結(jié)束是外控制結(jié)束處理外循環(huán)體是否否判斷內(nèi)控制是循環(huán)控制內(nèi)循環(huán)體循環(huán)體內(nèi)循環(huán)初始化初始化外循環(huán)初始化開始開始循環(huán)程序是強制CPU重復(fù)執(zhí)行某一指令系列的一種程序結(jié)構(gòu)形式,它可以使許多重復(fù)工作的程序大

9、為簡化,而且減少內(nèi)存空間。被重復(fù)執(zhí)行的部分稱作循環(huán)體, 要想把循環(huán)體多次執(zhí)行,就必須在循環(huán)體的前后有相應(yīng)的指令實現(xiàn)循環(huán)控制。循環(huán)程序一般由4 部分組成:初始化、循環(huán)體、循環(huán)控制、循環(huán)結(jié)束處理上循環(huán)稱為多重循環(huán)循環(huán)程序有兩種結(jié)構(gòu): while() do,do while();do until() 或for(;)while() do 結(jié)構(gòu)do until() 或for(;) 結(jié)構(gòu)循環(huán)結(jié)束NoYes循環(huán)條件滿足?循環(huán)體循環(huán)狀態(tài)初始化循環(huán)條Yes件滿足?No循環(huán)結(jié)束循環(huán)體循環(huán)狀態(tài)初始化;do while(1) 結(jié)構(gòu)匯編模板COUNTER EQU 100MOV R1,#COUNTER ;小于255用MOV;LDR R1,=COUNTER ;大于用LDR LOOPSUBS R1,R1,#1 BNE LOOP例把首址為data_src的存儲區(qū)內(nèi)的80個字復(fù)制到Data_dst指向的存儲區(qū)中。;匯編:data_src EQU 0x-Data_dst EQ

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論