電子科技大學微嵌實驗版_第1頁
電子科技大學微嵌實驗版_第2頁
電子科技大學微嵌實驗版_第3頁
電子科技大學微嵌實驗版_第4頁
電子科技大學微嵌實驗版_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、電子科技大學微嵌實驗最新版作者:日期:電子科技大學實驗報告修正了M00和舊版答案的錯誤,代碼使用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:運行Keil,建立

2、工程文件,單步運行調試演示示例程序,深刻理解每一條指令,觀察寄存器,內存空間的變化。實驗1.2:用匯編語言實現(xiàn)1+2+.+N的累加:a)建立新工程,加入實驗1.2文件夾中的sum.s。b)用匯編補充算法核心部分,代碼參考流程圖如下圖1.1所示。c)使用單步調試,仔細觀察過程中關鍵寄存器值的變化。R0暫存累加和圖1.1D實驗1.3:C調用匯編實現(xiàn)字符串拷貝功能:a)建立新工程,加入實驗1.3文件夾中的main.c和testfile.s(同一個工程下添加兩個文件一起編譯)。b)補充完成源代碼中缺失的部分,分別實現(xiàn)拷貝源字符串的一個字節(jié)到R2中;將拷貝的字節(jié)復制到目標空間。c)運行Debug進行調試

3、。實驗1.4:匯編調用C實現(xiàn)求和1+2+.+10:a)建立新工程,加入實驗1.4文件夾中的sum.c和testfile.s(同一個工程下添加兩個文件一起編譯)。b)補充完成源代碼中缺失的部分,通過調用c函數(shù)g()實現(xiàn)1+2+3+glovb1,結果存在R8中。c)運行Debug進行調試實驗1.5:ARM匚編實現(xiàn)冒泡算法:a)建立新工程,加入實驗1.5文件夾中的maopao.s。b)補充完成源代碼中缺失的部分,實現(xiàn)冒泡排序功能。c)運行Debug進行調試四、實驗結果實驗1.2:用匯編語言實現(xiàn)1+2+.+N的累加核心代碼如下:ADDR0,R1BVSSUM_ENDCMPR1,R2BHSSUM_ENDA

4、DDR1,#1BSUN_L1RegisterValue&一Current0 x0000001:K1QzOOOOOOOTR20 x00000064K30 x00000000K40 x00000000站0 x00000000R60 x00000000RT0 x00000000虻0k000013UL0 x00000000R100 x00000000K110 x00000000K12OiOOOOOOOOH13(SV0130003EEDK14OjeOOOOOOITLR150 x00000028+CFSROxOOOOOOF3+SFSR0 x00000000圖1.2可以看見最終結果顯示在寄存器R8處,十六進

5、制為13BA轉換成十進制為5050,實現(xiàn)了累加功能。實驗1.3:C調用匯編實現(xiàn)字符串拷貝功能核心代碼如下:LDRBR2,R1,#1;拷貝源字符串的一個字節(jié)STRBR2,R0,#1;將拷貝的字節(jié)復制到目標空間Location/ValueType0 x00000138intfQ0 x000001E4lraaaa11auto-char*0 x40000453Hbbbbauto-charf5圖1.3圖1.4NameLocaticn/ValueTypeB3mdinOnOOOQOlESintf0+*s.0 x00000000auto-char*j*山0 x40000450aaaaauto-chdr5可以看

6、出拷貝前srcstr是”aaaa”,dststr是”bbbb”,拷貝后srcstr是”aaaa”,dststr是”aaaa”,實現(xiàn)了字符串拷貝功能。實驗1.4:匯編調用C實現(xiàn)求和1+2+.+10核心代碼如下:MOVR0,#1MOVR1,#2MOVR2,#3MOVR3,#10BLgMOVR8,R0ValueJ-CurrenteoaKOoaoooioriojioooooooeKOxflioaooctnE30 x0000OCOk-R4OkODOOOCOOB5OkOOOCOOOOBfiOKOODOOCOaBTOkQQOQQOWftCF5HOkOOOCQCD3R8OkOQOOOOIOEE0 x00000

7、000E10jioooooooaEllOxOOOOOCOOEl2OkOOOOOOOIB13(SP)oxooaoooaoEM(U)OxOoaoociAE15(PC)0000(X)181f+15F5II0泊0000000圖1.5可以看出最終結果顯示在寄存器R8處,十六進制表示為0010,轉換為十進制為0 x10實驗1.5:ARM匚編實現(xiàn)冒泡算法代碼如下:AREASort,CODE,READONLYENTRYstartMOVR4,#0LDRR6,=srcADDR6,R6,#lenLDRR7,=src;初始化R4作為循環(huán)計數(shù)器inner2MOVR1,R7CMPR6,R7BLEouter;將每次循環(huán)開始

8、,正確設置R1的值為數(shù)組開始地址;如果所有數(shù)字均已排序,即R6uoooaoaoaoqoododq-dq00dqdododododododoodqdaoaoaoaoqdodqdm00aom00$00000加co000000如如co0000000000oc0000g00000000go0000gaoasodooao000000aa000000dqdo-do00dodododododo0000ooaoaoaoaoaoononon000000000000Z00g0000Z0000gMQQ0000000000000000DO00000000M0000gaoaoododonoooaQaoaoo-ooooo

9、qoo-dododododododooodoooaoaoaoaoaoaoqdonooon0000000000M00a0OOQ0oo-ggOOOOM常OO00gg00000000M00000000Z00000Daoanaoooonoooaoaoaoaogqooooooodododododododoooooaoaoaoanododanooooon圖1.7排序前OkODOODOC01nooa002noOQ0004QQ00石OOS000000QJk0000noOE00aono1弓DOQC00sc00noon00DOOK0000oa000000D0 xaoooaoE400Q0oa0000Doa00DOO

10、D00DOUDoa0000ao00DO00QOOQ00ao000OD00OQ00aooa00ODokooogoioe0000000G0000000000000000加gg00000000GOg000000000000g000000ggOKQDOOaiZSDO0D0000DOaoa00ODQO00DODoa)DOaoQQDOaooaDOQDoaDOaoQQOQDOaoaOQDOCKOOC0O14Jk00002oe00ooCO00CbO00g00ODg0000oct1300000zoe00g0-00000000000Addrtas|OkOOOOM6C圖1.8排序后地址0 x0000005C-0 x

11、00000078中保存的排序后的結果正確,程序實現(xiàn)了冒泡法排序功能。五、實驗總結1此次實驗用匯編和C語言實現(xiàn)了1N的累加、字符串的拷貝、數(shù)字求和以及冒泡法排序這幾項功能,了解了匯編語言的基礎指令及其意義,學會了使用了Keil編譯器編寫和調試程序。2.知道了C程序與匯編語言相互調用的規(guī)則:寄存器的使用規(guī)則:“子程序間”通過寄存器R0-R3來傳遞參數(shù)。如果更多參數(shù)需要傳遞,則需要使用堆棧。(這也是第二題字符串復制中使用R0和R1的原因)在“子程序中”,使用寄存器R4R11來保存局部變量。寄存器R12用于子程序間scratch寄存器(用于保存SP,在函數(shù)返回時使用該寄存器出桟),記作IP。寄存器R1

12、3用于數(shù)據(jù)棧指針,記作SP寄存器SP在進入子程序時的值和退出子程序時的值必須相等。寄存器R14稱為鏈接寄存器,記作LR它用于保存子程序的返回地址。寄存器R15是程序計數(shù)器,記作PC六、實驗思考題Q:ADD替換成ADDSSUB替換成SUBS有什么影響?A:替換后,運算結果會影響標志寄存器。因為ADDSUB不帶進位與借位,ADDSSUBS帶有進位與借位,運算完成要置符號位。Q:MOV替換成MOVN有什么影響?A:替換后只有在上一步比較結果為不相等的時候才會執(zhí)行該指令。(“NE屬于“cond”,意義為不相等)Q:STMIA換成STMIBSTMIA換成STMD有什么區(qū)別?A:換成STMIB是將每次傳送后地址+4變成每次傳送前地址+4,換成STMDA是將每次傳送后地址+4變成每次傳送后地址-4。Q:思考用ARML編實現(xiàn)1+3+5+(2n+1)或者2+4+6+2n。A:實現(xiàn)1+3+5+.+(2n+1)將ADDR1,#1改為ADDR1,#2設置R1初始值為1。實現(xiàn)2+4+6+.+2口將ADDR1,#1改為ADDR1,#2設置R1初始

溫馨提示

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

評論

0/150

提交評論