




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗報告ARM嵌入式系統原理及應用開發目錄實驗一ARM匯編指令實驗1 1實驗二ARM匯編指令實驗2 4實驗三匯編與C語言的相互調用實驗 8實驗一ARM匯編指令實驗1一、實驗目的1.初步學會使用EmbestIDEforARM開發環境及ARM軟件模擬器;2.通過實驗掌握簡單ARM匯編指令的使用方法。二.實驗設備1.硬件:PC機;2.軟件:EmbestIDE2004集成開發環境。Windows98/2000/NT/XP。三.實驗內容1.熟悉開發環境的使用,并使用LDR/STR和MOV等指令訪問存放器或存儲單元。2.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成根本數學/邏輯運算。四.實驗原理ARM處理器共有37個存放器:31個通用存放器,包括程序計數器〔PC〕,這些存放器都是32位;6個狀態存放器,這些存放器也是32位,但只使用了其中的12位。1.ARM通用存放器通用存放器〔R0~R15〕可分為3類,即不分組存放器R0~R7.分組存放器R8~R14.程序計數器R15。存儲器格式ARM體系結構將存儲器看作是從零地址開始的字節的線性組合。字節0~3存放第一個字,字節4~7存放第2個字,以此類推。 ARM體系結構可以用兩種方法存儲字數據,分別稱為大端格式和小端格式。GNU根底知識EmbestIDE集成了GNU匯編器as、編譯器gcc和鏈接器ld。因此,編寫程序要符合CNU的語法和規那么。關于as.gcc和ld的具體使用,請參照EmbestIDE所帶的電子文檔ProgRef.chm。五.實驗操作步驟1.實驗A〔1〕新建工程:先建一個文件夾如:H:\test1。然后運行ADS1.2集成開發環境,選擇File→New菜單項,彈出一個對話框,然后出來圖1.1新建工程類型選擇對話框,選擇project,在“Projectname〞中輸入工程文件名〞test1〞,點擊確定,同時創立一個與工程名相同的工作區。〔2〕建立源程序并添加到工程.在File的菜單項中選擇“New〞,彈出一個對話框,點擊“file〞,在“filename〞中輸入文件名test1.s編輯完后,點確定。〔3〕添加源文件:選擇Project→AddToProject→File項,或單擊工程管理窗口中的相應右鍵快捷菜單命令,翻開文件選擇對話框,在工程目錄下選擇剛剛建立的源并添加到文件test1.s。在“AddFiles〞對話框中選擇“DebugRel〞〔4〕根本設置:設置中只需設置“entrypoint〞〔5〕生成目標代碼:按下列圖標生成目標代碼。〔6〕調試設置:按下列圖標。首先編譯和鏈接之后,在工程test1所在的目錄下生成一個名為“test_data的目錄,同時翻開對話框使用Debugrel目標,選擇生成的test.axf用于調試。〔7〕翻開存儲器窗口,觀察地址0x1000~0x101F的內容.〔8〕單步執行程序并觀察和記錄存放器與存儲器值的變化。〔9〕結合實驗內容和相關資料,觀察程序運行,通過實驗加深理解ARM指令。2.實驗B(1)在工作區窗口工作區名稱上右擊鼠標,在彈出的快捷菜單中選擇“AddNewProjecttoWorkspace…〞。〔2〕參照實驗A及相應的實驗參考程序,建立工程〔3〕參照實驗A的步驟完成目標代碼的生成與調試。六.實驗參考程序1.實驗A參考程序X EQU 45 /*定義變量x,并賦值為45*/Y EQU 64 /*定義變量y,并賦值為64*/STACK_TOP EQU 0x1000 /*定義棧頂0x1000*/ AREAInit,CODE,READONLY CODE32 ENTRYSTART /*程序代碼開始標志*/ MOV SP,#STACK_TOP MOV R0,#X /*x的值放入R0*/ STR R0,[SP] /*R0的值保存到堆棧*/ MOV R0,#Y /*y的值放入R0*/ LDR R1,[SP] /*取堆棧中的數到R1*/ ADD R0,R0,R1 STR R0,[SP]STOP B STOP /*程序結束,進入死循環*/END實驗B參考程序X EQU 45 /*定義變量x,并賦值為45/Y EQU 64 /*定義變量y,并賦值為64*/Z EQU 87 /*定義變量z,并賦值為87*/STACK_TOP EQU 0x1000 /*定義棧頂0x1000*/ AREAInit,CODE,READONLY CODE32 ENTRYSTART MOV R0,#X /*x的值放入R0*/ MOV R0,R0,LSL#8 /*R0的值乘以2的8次方*/ MOV R1,#Y /*y的值放入R1*/ ADD R2,R0,R1,LSR#1 /*R1的值除以2加上r0的值放入R2*/ MOV SP,#0x1000 STR R2,[SP] /*R2的值0x2D20放在0x1000的地址中*/ MOV R0,#Z /*z的值放入R0*/ AND R0,R0,#0xff /*取R0的低八位*/ MOV R1,#Y /*y的值放入R1*/ ADD R2,R0,R1,LSR#1 /*R1的值除以2加上r0的值放入R2*/ LDR R0,[SP] /*SP的值〔0X2D20〕放入R1*/ MOV R1,#0x01 /*R1賦值0x01*/ ORR R0,R0,R1 /*該指令設置R0的0位,其余位保持不變*/ MOV R1,R2 /*R2的值放入R1*/ ADD R2,R0,R1,LSR#1 /*R1的值除以2加上r0的值放入R2*/STOP B STOP /*程序結束,進入死循環*/ END七.實驗報告〔1〕畫出程序A、程序B的實現框圖,并說明實驗A、B程序實現的功能是什么?實驗A:最后的值0x6D放在0x1000的地址中,實現的是兩數的想加45+64=109(0x6D)實驗B:0x1000的地址:64/2+45*2^8=11552(0x2D20)R1:〔64/2+87〕=0x77R0:0x2D20+0x01=0x2D21R2:0x77/2+0x2D21=0x2D5C〔2〕記錄程序A和程序B單步運行時有關存放器與存儲器的值,并分析有關結果是否正確。實驗1A實驗B地址:0x2D20放在0x1000的地址中,0x77放在R1中,0x2D21放在R0中,0x2D5C放在R2中實驗二ARM匯編指令實驗2一、實驗目的通過實驗掌握使用LDM/STM、B和BL等指令完成較為復雜的存儲區訪問和程序分支,學習使用條件碼,加強對CPSR的認識。二、實驗設備1.硬件:PC機;2.軟件:EmbestIDE2004集成開發環境。Windows98/2000/NT/XP。三、實驗內容1.熟悉開發環境的使用并完成一塊存儲區的拷貝;2.完成分支程序設計,要求判斷參數,根據不同參數,調用不同的子程序。四、實驗原理1.ARM程序狀態存儲器在所有處理器模式下,都可以訪問當前程序狀態存放器CPSR。CPSR包含條件碼標志、中斷禁止位、當前處理器模式以及其他狀態和控制信息。每種異常模式都有一個程序狀態保存存放器SPSR。當異常出現時,SPSR用于保存CPSR的狀態。CPSR和SPSR的格式如下:313029282726876543210NZCVQDNM(RAZ)IFTMMMMM2.本實驗涉及到得as語法及規那么1〕標號的使用標號由一個符號后跟一個冒號組成,它表示程序中當前的指令或者數據地址。如果在程序中出現兩個相同的標號,匯編器會產生一個警告,同時,只有第一個標號有效。2)幾個偽指令〔1〕LDRLDR偽指令講一個32位常數或者一個地址值讀取到存放器中。當需要讀取到存放器中的數據超過了MOV或者MNV指令可以操作的范圍時,可以使用LDR偽指令將該數據讀取到存放器中。在匯編編譯器處理源程序時,如果該常數沒有超過MOV或者MNV可以操作的范圍,那么LDR指令被這兩條指令中的一條所替代;否那么,該常數將被放在最近的一個文字池〔LiteralPool〕內,同時,本指令被一條基于PC的LDR指令代替。語法格式LDR<register>,=<expression>其中,expression為需要讀取的32位常數。Register為目標存放器。例如LDRr1,=0xffLDRr0,=0xfff0000(2)ADRADR指令將基于PC的地址值或者給予存放器的地址值讀取到存放器中。在匯編編譯器處理源程序時,ADR偽指令被編譯器替換成一條適宜的指令。通常,編譯器用一條ADD指令或者SUB指令來實現該偽指令的功能。如果標號超出范圍或者標號在他那個一文件〔和同一段〕內沒有定義,那么會產生一個錯誤,該指令不使用文字池。語法格式ADR<register><label>其中,register為目標存放器。Label為基于PC或者存放器的地址表達式。例如Label1:MOVr0,#25ADRr2,label1(3).ltorg.ltorg偽操作用于在當前段〔一般是.Text段〕的當前地址〔字對準地址〕產生一個文字池。語法格式.ltorg五、實驗操作步驟1.實驗A前面的步驟重復實驗一。〔1〕翻開存儲器窗口,觀察地址0x104C~0x105F的內容,以及地址0x1060~0X1073的內容。〔2〕單步執行程序并觀察和記錄存放器與存儲器值的變化,注意觀察的地址中的內容變化。當執行STMFD、LDMFD、LDMIA和STMIA指令時,注意觀察其后面的參數所指的地址段或存放器段的內容變化。〔3〕結合實驗內容和相關資料,觀察程序運行,通過實驗加深理解ARM指令的使用。2.實驗B〔1〕創立新的工程,工程名為test2.mcp。〔2〕按照參考程序,重新編寫源代碼文件,并保持為test2.s,并把它們參加工程中。〔3〕按照編譯→匯編器設置→鏈接器設置→調試器設置來設置新工程,并編譯、鏈接工程。〔4〕下載調試文件,翻開Memrory/Register/Watch/Variable/CallStack窗口,單步執行程序。通過以上窗口,跟蹤程序運行,觀察分析并記錄運行結果,通過實驗學會使用ADS1.2進行應用程序的開發與調試。六、實驗參考程序1實驗A參考程序NUM EQU 20 AREAInit,CODE,READONLY CODE32 ENTRYSTART LDRR0,=SRC LDRR1,=DST MOV R2,#NUM MOVSP,#0x400BLKCOPY MOVS R3,R2,LSR#3 BEQ COPYWORDS STMFD SP!,{R4-R11}OCTCOPY LDMIA R0!,{R4-R11} STMIA R1!,{R4-R11} SUBS R3,R3,#1 BNE OCTCOPY LDMFD SP!,{R4-R11}COPYWORDS ANDS R2,R2,#7 BEQ STOPWORDCOPY LDRR3,[R0],#4 STRR3,[R1],#4 SUBSR2,R2,#1 BNEWORDCOPYSTOP B STOPSRC DCB1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,10,11,12,13DST DCB0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0END七、實驗報告〔1〕畫出程序A的實現框圖,并說明實驗A程序實現的功能是什么?功能:將0x104c~0x109b的20個子數據復制到目標地址區0x109c~0x10eb同時先將源數據區的起始地址R0和目標數據區的R1以及總的子數據個數R2,第一次次批量8個批量復制到中間的存放器R4~R11,再將中間存放器的數據批量存儲到目的數據存儲區,然后進行數據復制是否完畢的判斷,假設未復制完畢,修改有關數據的地址,并重復前面的數據復制工作,再批量一次復制8個數到中間的存放器R4~R11,再將中間存放器的數據批量存儲到目的數據存儲區。剩下4個進行一個字的復制,通過R3復制4次最終到目標地址區。〔2〕記錄程序A和程序B單步運行時有關存放器與存儲器的值,并分析有關結果是否正確。1.第一次運行R3=22,再一次運行R3=03.最后復制完畢123456781234567810111213實驗三匯編與C語言的相互調用實驗一、實驗目的1.閱讀EmbestS3CEV40啟動代碼,觀察處理器啟動過程。2.學會使用EmbestIDE輔助信息窗口來分析判斷調試過程和結果3.學會在EmbestIDE環境中編寫、編譯與調試匯編和C語言相互調用的程序。二、實驗設備1.硬件:PC機;2.軟件:EmbestIDE2004集成開發環境。Windows98/2000/NT/XP。三、實驗內容使用匯編完成一個隨機數產生函數,通過C語言調用該函數,產生一系列隨機數,存放到數組中。四、實驗原理1.ARM過程調用ATPCS(ARM)ATPCS是一系列規定應用程序之間相互調用的根本規那么,包括:支持數據棧限制檢查;支持只讀段位置無關〔ROPI〕;支持可讀/寫段位置無關〔RWPI〕;支持ARM程序和Thumb程序的混合使用;處理浮點運算。使用以上規定的ATPCS規那么是,應用程序必須遵守如下:程序編寫遵守ATPCS;變量傳遞以中間存放器和數據棧完成;匯編器使用-apcs開關選項。關于其他ATPCS規那么,用戶可以參考ARM處理器相關書籍或登錄ARM公司網站。程序只要遵守ATPCS相應規那么,就可以使用不同的源代碼來編寫程序。程序間的相互調用最主要的是解決參數傳遞問題。應用程序之間使用中間及數據棧來傳遞參數,其中,第1~4個參數使用R0~R3,多用4個參數數據棧進行傳遞。這樣,接受參數的應用程序必須知道參數的個數。但是,在應用程序被調用時,一般無從知道所傳遞參數的個數。用不同語言編寫的應用程序在調用時可以自定義傳遞的約定。使用具有一定意義的形式來傳遞,可以很好地解決參數個數的問題。常用方法是把第1個或最后1個參數作為參數個數〔包括個數本身〕傳遞給應用程序。ATPCS中存放器的相應關系如表3.1所列。表3.1ATPCS規那么中存放器列表ARM
存放器ATPCS
別名ATPCS存放器說明ARM
存放器ATPCS
別名ATPCS存放器說明R0~R3a1~a4參數/結果/scratch存放器1~4R10v7、slARM狀態局部變量存放器7,數據棧限制指針存放器R4v1局部變量存放器1R11v8ARM狀態局部變量存放器8R5v2局部變量存放器2R12ip子程序內部調用的臨時(scratch)存放器R6v3局部變量存放器3R13sp數據棧指針存放器R7v4、wr局部變量存放器4
Thumb狀態工作存放器R14lr鏈接存放器R8v5ARM狀態局部變量存放器5R15PC程序計數器R9v6、sbARM狀態局部變量存放6
RWPI的靜態基址存放器五、實驗操作步驟1.首先先創立一個新的工程randomnumber.mcp。2.再把實驗中提供的程序將源文件randtest.c、init.s、random.s和ldscript.scf參加到新的工程里面。3.按照編譯→匯編器設置→鏈接器設置→調試器設置來設置新工程,并編譯、鏈接工程。4.下載調試文件,翻開Memrory/Register/Watch/Variable/CallStack窗口,單步執行程序。通過以上窗口,跟蹤程序運行,觀察分析并記錄運行結果,通過實驗學會使用ADS1.2進行應用程序的開發與調試。六、實驗參考程序1.randtest.c參考源代碼#include<stdio.h>externunsignedintrandomnumber(void);intmain(){ inti; intnTemp; unsignedintrandom[14]; for(i=0;i<14;i++) { nTemp=randomnumber(); random[i]=nTemp; } return(0);}2.init.s參考源代碼 AREAInit,CODE,READONLY CODE32 ENTRYSTART BReset_HandlerUndefined_Handler BUndefined_HandlerSWI_Handler BSWI_HandlerPrefetch_Handler BPrefetch_HandlerAbort_Handler BAbort_Handler NOP IRQ_Handler BIRQ_HandlerFIQ_Handler BFIQ_HandlerReset_Handler LDR SP,=0x00002000 IMPORTmain _main EXPORT_main ldrr0,=main mov
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國汽車覆蓋件行業市場深度調研及發展趨勢與投資前景研究報告
- 2025-2030中國水粉顏料行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030中國水果飲料濃漿行業市場發展分析及發展趨勢與投資研究報告
- 2025-2030中國水性樹脂市場動態追蹤及投資可行性研究研究報告
- 2025-2030中國水力壓裂與服務行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國氮化鋁粉行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030中國橋梁用鋼行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030中國條碼機行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030中國機車租賃行業發展分析及發展前景與投資研究報告
- 2025-2030中國服裝服飾書籍行業市場前景分析及發展趨勢與投資戰略研究報告
- 廢舊鋰電池回收利用技術課件
- 北京市矢量地圖-可改顏色
- 中學生廉潔教育課件
- 2020年全國II卷英語高考真題試題(答案+解析)
- 八上第三單元《紅星照耀中國》紀實作品閱讀課公開課一等獎創新教學設計(表格式)
- 腦洞大開背后的創新思維學習通超星期末考試答案章節答案2024年
- 語法填空難題練習8篇(附答案)
- 華師大版七年級下冊數學期中考試試卷附答案
- 上海市2024年中考物理試卷
- 撤銷自助銀行的批復
- 少兒口才精彩課件
評論
0/150
提交評論