版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
電子科技大學實驗報告修正了MOOC和舊版答案的錯誤,代碼使用KeiluVision5均已調試通過。課程名稱微處理器系統(tǒng)構造與嵌入式系統(tǒng)設計實驗名稱ARM根底編程實驗任課教師 實驗教師 學號實驗地點 分組號 時間 年月日一、 實驗目的熟悉并掌握常用ARM匯編指令熟悉并掌握“C+匯編"混合編程技術熟練使用ARM軟件開發(fā)調試工具Keil二、 實驗容學習使用Keil開發(fā)工具使用ARM匯編語言,編程實現(xiàn)1+2+……+N累加運算功能使用C調用匯編函數(shù),實現(xiàn)字符串拷貝功能使用匯編調用C函數(shù),實現(xiàn)求和運算功能使用ARM匯編語言,實現(xiàn)冒泡排序算法〔選做〕三、實驗步驟1.實驗1.1:運行Keil,建立工程文件,單步運行調試演示例如程序,深刻理解每一條指令,觀察存放器,存空間的變化。實驗1.2:用匯編語言實現(xiàn)1+2+...+N的累加:建立新工程,參加實驗1.2文件夾中的sum.s。用匯編補充算法核心局部,代碼參考流程圖如下列圖1.1所示。使用單步調試,仔細觀察過程中關鍵存放器值的變化。RO暫存累加和RO暫存累加和圖1.1實驗1.3:C調用匯編實現(xiàn)字符串拷貝功能:建立新工程,參加實驗1.3文件夾中的main.c和testfile.s(同一個工程下添加兩個文件一起編譯)。補充完成源代碼中缺失的局部,分別實現(xiàn)拷貝源字符串的一個字節(jié)到R2中;將拷貝的字節(jié)復制到目標空間。運行Debug進展調試。實驗1.4:匯編調用C實現(xiàn)求和1+2+...+10:a) 建立新工程,參加實驗1.4文件夾中的sum.c和testfile.s(同一個工程下添加兩個文件一起編譯)。b) 補充完成源代碼中缺失的局部,通過調用c函數(shù)gO實現(xiàn)1+2+3+glovb1,結果存在R8中。c) 運行Debug進展調試5.實驗1.5:ARM匯編實現(xiàn)冒泡算法:a) 建立新工程,參加實驗1.5文件夾中的maopao.s。b) 補充完成源代碼中缺失的局部,實現(xiàn)冒泡排序功能。c) 運行Debug進展調試四、實驗結果四、1.實驗1.2:用匯編語言實現(xiàn)1+2+...+N的累加核心代碼如下:ADDR0,R1BVSSUM_ENDCMPR1,R2BHSSUM_ENDADDR1,#1BSUN_L1^egister IValue日CurreRtM OxOOOOOOlCR10x00000007R20x00000064R3owaoooooooR40x00000000RS0x00000000R60x00000000R70x00000000RSOx000013BA鵡owaoooooooR100x00000000Rll0x00000000R120x00000000R13$刃Ox30003EEDR14CER〕0x00000017R15CFC〕0^00000028+ dSR OxOOOOOOF3+ 3PSR 0x00000000' 圖1.2可以看見最終結果顯示在存放器R8處,十六進制為13BA,轉換成十進制為5050,實現(xiàn)了累加功能。2.實驗1.3:C調用匯編實現(xiàn)字符串拷貝功能核心代碼如下:LDRBR2,[R1],#1 ;拷貝源字符串的一個字節(jié)STRBR2,[R0],#1將拷貝的字節(jié)復制到目標空間Nam亡Locati(?n/ValuEType□ main0 *5...0審d..0x000001B3intfflDm000001E4"aaaa"■auto-char*0x40003450"bbbt>■auto-char[5]圖1.3NameLocatio-n/ValLieType曰QrruinOxOOOOOlBSintfQ□“&...0x00000000auto-匚har*£*d..OwMJOOtMSO"aaaa"auto-char[5]圖1.4可以看出拷貝前srcstr是"aaaa",dststr是"bbbb",拷貝后srcstr是"aaaa",dststr是"aaaa",實現(xiàn)了字符串拷貝功能。3.實驗1.4:匯編調用C實現(xiàn)求和1+2+...+10核心代碼如下:MOVR0,#1MOVR1,#2MOVR2,#3MOVR3,#10BLgMOVR&R0RegisterValueJh.-CurrentRO0x00000013R1OkOOOOOOO^R20x00000003B3axoooooookR4owoooooooaE5ojtoooooooaB6OKDOoooooaRTJkOQQOOCOJI I.....oxooooooiaR9axoooooooaRIOouoooooooaRlloxoooooooaR12OkOOOOOOOIR13(SP)0x00000000R14(LEO0x00000014(FC)aj:ooooooi8+CFSEOkOOOOOOD3+SF3LOKDOoooooa'圖1.5可以看出最終結果顯示在存放器R8處,十六進制表示為0010,轉換為十進制為0x104.實驗1.5:ARM匯編實現(xiàn)冒泡算法代碼如下:AREASort,CODE,READONLYENTRYstartMOVR4,#0LDRR6,=srcADDR6,R6,#lenLDRR7,=src;初始化R4作為循環(huán)計數(shù)器inner2MOVR1,R7CMPR6,R7BLEouter;將每次循環(huán)開場,正確設置R1的值為數(shù)組開場地址;如果所有數(shù)字均已排序,即R6<=R7輸出跳轉到outer函數(shù)innerLDRR2,[R1]LDRR3,[R1,#4]CMPR2,R3BGTexchange;判斷相鄰數(shù)字是否符合規(guī)律,不符合跳轉到exchange函數(shù)inner1ADDR1,R1,#4CMPR1,R6BLTinnerADDR4,R4,#4CMPR4,#lenBLEsubtractionexchangeSTRR3,[R1]STRR2,[R1,#4]Binner1subtractionSUBR6,R6,#4Binner2outerLDRR1,=srcsrcDCD2,4,10,8,14,1,20AREAArray,DATA,READWRITE
lenEQU7*4ENDMemoryMapCurrentMappedRanges:CKK?{hdZKKKKKKK}-ftxfXKKKK]5Bexecread051:MKHXKHJ5C-MXKKKK'TBexecreadwrite002{b((KKKKK}7C-{hcCKKKKKJSSexecread003:(M磯fl(MXK)-{h4(KKWFF二r陰日冊i-eQQ4.{MAfKKMJOO-{h4A(KKMirleadwriteOT&{hc4COOOOOO-ftx4C(KKM17readwrite[KF6{}x5SMW00-0x5€(W0B-readwii:e<illSelecteeR&nqeOkOOQOOOBc,{ht(}{KKKK}767RsacFWriteExecuteHelpHelp在star函數(shù)中獲得R6地址后,首先如上圖,設置權限才能正確執(zhí)行程序。Address:|CbrfXKK}Q05Cd3CD口ODOOBC!□KOaODdOIE■OxDOODOOACl:0^00000002;口衛(wèi)口口00曲口心口心皿口口口口0000口心口口00ao口1口百00g口口口口0000口心口口00ao口百口百00gQk口心皿口口口口0000口口口幻0000口心口心皿OB口口0000口Q口口00ao口百口百00g口口口口0000OE口口00ao口百口百00g口心口心皿口口口口0000口1口幻0000口心口心皿口口口口0000口Q口Q00ao14口心0000口口口口0000口Q口口00ao口百口百00g■5匚口心皿口口口口0000口口口幻0000口心口心皿口口口口0000口Q口O00aoax0dO0OOE4;asanas□0陰ao□0陰QB0D肚QB0D□0陰ao□0陰QB0D肚QB0D□0aoao□0陰QB0D肚QB0Dan-GxOCJOOOlOfi!□a0000000000000000000000000000000000OHQOOQfJl?a:000000000000000000000000000000000000000000□KO口口口口l^k!g口心口口口口口百口口口口口百口心口口口幻口心口口口口g口口口口口百口心口口口幻口心口口口心口心口口口口口百口心口口口幻口心口口口o圖1.7排序前葉QD口口口口5匸DIDODODU口衛(wèi)口口口口口口口勻口O口口口口OB:ODOD□DOA.OD□D口口DEDODODOi-eDODO口口百匚口口口口口口口口口QDKiDOflDOlEDODOoaDOas0000000000000DODOD00QDOD00OD3aDODOoaoaDODOoaoogGO00g00aoD.XODaOOaADDOoa□aDOao□7000000陰00ODOD<JDODOD<JDOD□aDOoaoa□aDOoa□a陰aoac>QQao□7aoOxODdOOdC?000000oa牝000000000DOD000000OO0000DOoa0000000<J00000000000000DuQDClDDCEJIDUDC!D口D口口口口口口口口心口口口口口百口。ODODODODODODOD□口D口DC!D口D口DdDC!D口口心口心口口口口口心口口口o葉QD口0D1O6DUDC!DdD口口口口口口口口心口口口口口百口。ODODODODODODOD□口D口DC!D口DdDdDC!Dd口心口心口口口口口心口口口oOkODOODISE:DODOoa0000000000ao000DODOD00ODOD00OD□a00DOoaoaDODOoaooao0000aoqkooooq.uaQdQO0000000000003仃0000DO0000QO000<JQO000000圖1.8排序后地址0x0000005C-0x00000078中保存的排序后的結果正確,程序實現(xiàn)了冒泡法排序功能。五、實驗總結此次實驗用匯編和C語言實現(xiàn)了1?N的累加、字符串的拷貝、數(shù)字求和以及冒泡法排序這幾項功能,了解了匯編語言的根底指令及其意義,學會了使用了Keil編譯器編寫和調試程序。知道了C程序與匯編語言相互調用的規(guī)那么:存放器的使用規(guī)那么:“子程序間〃通過存放器R0?R3來傳遞參數(shù)。如果更多參數(shù)需要傳遞,那么需要使用堆棧?!策@也是第二題字符串復制中使用R0和R1的原因〕在“子程序中〃,使用存放器R4?R11來保存局部變量。存放器R12用于子程序間scratch存放器(用于保存SP,在函數(shù)返回時使用該存放器出桟〕,記作IP。存放器R13用于數(shù)據(jù)棧指針,記作SP。存放器SP在進入子程序時的值和退出子程序時的值必須相等。存放器R14稱為存放器,記作LR。它用于保存子程序的返回地址。存放器R15是程序計數(shù)器,記作PC。六、實驗思考題Q:ADD替換成ADDS,SUB替換成SUBS有什么影響?A:替換后,運算結果會影響標志存放器。因為ADD、SUB不帶進位與借位,ADDS、SUBS帶有進位與借位,運算完成要置符號位。Q:MOV替換成MOVNE有什么影響?A:替換后只有在上一步比擬結果為不相等的時候才會執(zhí)行該指令?!病癗E〃屬于“cond〃,意義為不相等〕Q:STMIA換成STMIB,STMIA換成STMDA有什么區(qū)另擰A:換成STMIB是將每次傳送后地址+4變成每次傳送前地址+4,換成STMDA是將每次傳送后地址+4變成每次傳送后地址-4。Q:思考用ARM匯編實現(xiàn)1+3+5+-+(2n+1)或者2+4+6+—+2n。A:實現(xiàn)1+3+5+-.+(2n+1),將ADDR1,#1改為ADDR1,#2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第七章 新生兒及患病新生兒的護理課件
- 五年級數(shù)學(小數(shù)四則混合運算)計算題專項練習及答案
- 體育運動教練崗位招聘面試題與參考回答2024年
- 2024年城市道路施工合作協(xié)議
- 產品代理權2024年度專享協(xié)議
- 2024專業(yè)紀實攝影師服務協(xié)議
- 2024年專業(yè)理療合作協(xié)議范例
- 2024款奔馳汽車融資租賃協(xié)議樣本
- 2024年創(chuàng)業(yè)團隊股東退股協(xié)議樣本
- 不銹鋼材質鋼管年度采購協(xié)議2024
- 醫(yī)療機構聘用合同標準范本
- 2024-2030年中國移動運營行業(yè)深度分析及發(fā)展戰(zhàn)略研究咨詢報告
- 服裝行業(yè)競爭對手分析
- 教室使用登記表
- 易制毒化學品培訓教育制度
- 中成藥處方審核專家講座
- 2014年4月自考00804金融法二試題及答案含解析
- 口腔護理持續(xù)改進
- 2023四年級學生勞動素養(yǎng)考試試題
- 《航空法規(guī)全》課件
- 車輛尾氣處理培訓課件模板
評論
0/150
提交評論