




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上實驗一 ARM匯編指令使用實驗基本數學/邏輯運算一、實驗目的1. 初步學會使用ARM ADS / Embest IDE for ARM 開發環境及ARM軟件模擬器。2. 通過實驗掌握數據傳送和基本數學/邏輯運算的ARM匯編指令的使用方法。二、實驗設備1. 硬件:PC機。2. 軟件:ADS 1.2 / Embest IDE 200X集成開發環境。三、實驗內容1熟悉ADS 1.2 / Embest IDE 200X開發環境的使用,使用LDR/STR和MOV等指令訪問寄存器或存儲單元,實現數據的加法運算。具體實驗程序如下:/* armasm1a.s */.EQU X, 45
2、 /*定義變量X,并賦值為45*/.EQU Y, 64 /*定義變量Y,并賦值為64*/.EQU STACK_TOP, 0X1000 /*定義棧頂0X1000*/.GLOBAL _START.TEXT_START: /*程序代碼開始標志*/ MOVSP, #STACK_TOP MOV R0, #X /*X的值放入R0*/ STR R0, SP/*R0的值保存到堆棧*/ MOV R0, #Y /*Y的值放入R0*/ LDR R1, SP/*取堆棧中的數到R1*/ ADDR0, R0, R1 STR R0, SPSTOP: B STOP /*程序結束,進入死循環*/.END2使用ADD/SUB/L
3、SL/LSR/AND/ORR等指令,完成基本數學/邏輯運算。具體實驗程序如下: /* armasm1b.s */.EQUX, 45/*定義變量X,并賦值為45*/.EQUY, 64/*定義變量Y,并賦值為64*/.EQU Z, 87/*定義變量Z,并賦值為87*/.EQUSTACK_TOP, 0X1000/*定義棧頂0X1000*/.GLOBAL _START.TEXT_START: /*程序代碼開始標志*/ MOV R0, #X /*X的值放入R0*/ MOVR0, R0, LSL #8/*R0的值乘以2的8次方 */ MOV R1, #Y /*Y的值放入R1*/ ADDR2, R0, R1
4、, LSR #1 /*R1的值除以2再加上R0后的值放入R2*/ MOVSP, #0X1000 STRR2, SP MOV R0, #Z /*Z的值放入R0*/ ANDR0, R0, #0XFF/*取R0的低八位*/ MOV R1, #Y /*Y的值放入R1*/ ADDR2, R0, R1, LSR #1/*R1的值除以2再加上R0后的值放入R2*/ LDRR0, SP/*Y的值放入R1*/ MOVR1, #0X01 ORRR0, R0, R1 MOV R1, R2 /*Y的值放入R1*/ ADD R2, R0, R1, LSR #1/*R1的值除以2加上R0的值放入R2*/STOP: B S
5、TOP /*程序結束,進入死循環*/.END四、實驗操作步驟1新建工程。先建立一個實驗文件夾,如EARMSYarmasm1;然后運行Embest IDE集成開發環境,選擇FileNew Workspace菜單項,彈出一個對話框,輸入工程名armasm1a/armasmlb等相關內容;最后單擊OK按鈕,將創建一個新工程,并同時創建一個與工程名相同的工作區。此時在工作區窗口將能打開該工作區和工程。2建立源文件。選擇FileNew菜單項,彈出一個新的、沒有標題的文本編輯窗口,輸入光標位于窗口中第一行,按照實驗參考程序編輯輸入源文件代碼。編輯完后,保存文件armasmla. s。3添加源文件。選擇Pr
6、ojectAdd To ProjectFile項或單擊工程管理窗口中的相應右鍵快捷菜單命令,打開文件選擇對話框,在工程目錄下選擇剛才建立的源文件armasmla.s/armasmlb.s。4基本設置。選擇ProjectSettings菜單項或按下快捷鍵Alt+F7,彈出工程設置對話框;在工程設置對話框中選擇Processor屬性頁,按照使用要求對目標板所用處理器進行設置。5生成目標代碼。選擇BuildBuild armasmla菜單項或按下快捷鍵F7,生成目標代碼。此步驟也可以通過單擊工具欄上相應按鈕來完成。6調試設置。選擇選擇ProjectSettings菜單項或按下快捷鍵Alt+F7,彈出
7、工程設置對話框;在工程設置對話框中,若選擇Remote頁面則對調試設備模塊進行設置;若選擇Debug頁面則對調試模塊進行設置。7選擇DebugRemote Connect連接軟件仿真器,執行Download命令下載程序,并打開寄存器窗口。8打開存儲器窗口,觀察地址0x80000x801F的內容以及地址0xFF00xFFF的內容。9單步執行程序,并觀察和記錄寄存器與存儲器值的變化。10結合實驗內容和相關資料觀察程序運行,通過實驗加深理解ARM指令的使用。五、實驗結果分析1. 程序1用用來實現加法運算;程序2使用ADD/SUB/LSL/AND/ORR等指令,完成基本的數學/邏輯運算。2. 通過記錄
8、程序1和程序2單步運行時有關寄存器與存儲器的值,可以看出運行結果正確。實驗二 ARM匯編指令使用實驗存儲區數據塊的傳送一、 實驗目的1熟悉ARM ADS 1.2 / Embest IDE for ARM 開發環境及ARM軟件模擬器的使用。2通過實驗掌握使用LDM/STM、B、BL等指令完成較為復雜的存儲區訪問和分支程序的方法,學習使用條件碼,加強對CPSR的認識。二、實驗設備1. 硬件:PC機。2. 軟件:ADS 1.2 / Embest IDE 200X集成開發環境。三、實驗內容設計并調試一個存儲區數據塊的傳送程序,具體數據塊的傳送要求為:將數據從源數據區snum復制到目標數據區dnum,數
9、據的個數num假定為20,復制時以8個字為單位進行,對于最后不足8個字的數據,以字為單位進行復制。用ARM匯編語言設計該數據塊復制程序的設計思想如下:先將源數據區的起始地址、目標數據區的起始地址以及數據個數賦給選定的寄存器R0、R1、R2,再根據每次批量/單個復制數據的個數R3確定用于數據復制的中間寄存器R4R11,之后先將源數據區的若干個數據批量裝載到中間寄存器中,再將中間寄存器的數據批量存儲到目的數據存儲區,隨后進行數據是否復制完畢的判斷,若未復制完畢,則修改有關操作數據地址,并重復前面的數據復制操作,否則,終止操作,程序結束。程序如下:.GLOBAL _START.TEXT.EQU NU
10、M, 20 /*定義需要復制的字數據個數NUM為20*/_START: LDR R0, =SRC /*將R0指向源數據區的起始地址*/ LDR R1, =DST /*將R1指向源數據區的起始地址*/ MOV R2, #NUM /*將需要復制的字數據個數存放在R2中*/ MOV SP, #0X400 /*將堆棧指針SP指向#0X400*/ BLKCOPY: MOVS R3, R2, LSR #3 /*R2的值除以8的結果存入R3*/ BEQ COPYWORDS /*若Z=1,則轉COPYWORDS*/ STMFD SP!, R4-R11 /*將R4R11的內容存入堆棧進行保護*/OCTCOPY:
11、 LDMIA R0!, R4-R11 /*從源數據區裝載8個字數據到R4R11*/ STMIA R1!, R4-R11 /*將R4R11中的8個字數據存入目的數據區*/ SUBS R3, R3, #1 /*每復制一次R3減1*/ BNE OCTCOPY /*若R3不等于0,則轉移到OCTCOPY*/ LDMFD SP!, R4-R11 /*將堆棧內容恢復到R4R11*/ COPYWORDS: ANDS R2, R2, #7 /*計算需復制的奇數個字的個數*/ BEQ STOP /*若R2=0則停止*/WORDCOPY: LDR R3, R0, #4 /*將源數據區的一個字裝載至R3*/ STR
12、 R3, R1, #4 /*將R3中的數據存到目的數據區*/ SUBS R2, R2, #1 /*數據傳輸控制計數器減1*/ BNE WORDCOPY /*若R2不等于0,則轉移到WORDCOPY*/STOP: B STOP.LTORGSRC: /*源數據區起始地址標號*/ .LONG 1, 2,3 ,4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4DST: /*目的數據區起始地址標號*/ .LONG 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.END四、實驗操作步驟1新
13、建工程。先建立一個實驗文件夾,如EARMSYarmasm2;然后運行Embest IDE集成開發環境,選擇FileNew Workspace菜單項,彈出一個對話框,輸入工程名ARMcode等相關內容;最后單擊OK按鈕,將創建一個新工程,同時創建一個與工程名相同的工作區。此時在工作區窗口將打開該工作區和工程。2建立源文件。選擇FileNew菜單項,彈出一個新的、沒有標題的文本編輯窗口,輸入光標位于窗口中第一行,按照實驗參考程序編輯輸入源文件代碼。編輯完后,保存文件armasm2.s。3添加源文件。選擇ProjectAdd To ProjectFile項,或單擊工程管理窗口中的相應右鍵快捷菜單命令
14、,打開文件選擇對話框,在工程目錄下選擇剛才建立的源文件armasm2.s。4基本設置。選擇ProjectSettings菜單項或按下快捷鍵Alt+F7,彈出工程設置對話框;然后在工程設置對話框中,選擇Processor屬性頁,對目標板所用處理器進行設置。5生成目標代碼。選擇BuildBuild armasm2菜單項或按下快捷鍵F7,生成目標代碼。也可以單擊工具欄上的相應按鈕來完成。6調試設置。選擇ProjectSettings菜單項或按下快捷鍵Alt+F7,彈出工程設置對話框;在工程設置對話框中,若選擇Remote頁面則對調試設備模塊進行設置;若選擇Debug頁面,則對調試模塊進行設置。7選擇
15、DebugRemote Connect連接軟件仿真器,執行Download命令下載程序,并打開寄存器窗口。8打開存儲器窗口,觀察地址0x80540x80A0的內容以及地址0x80A40X80F0的內容。9單步執行程序并觀察和記錄寄存器與存儲器值的變化,注意觀察步驟8的地址中的內容變化。當執行STMFD、LDMFD、LDMIA和STMIA指令時,注意觀察其后面的參數所指的地址段或寄存器段的內容變化。10結合實驗內容和相關資料觀察程序運行,通過實驗加深理解ARM指令的使用。五、實驗結果分析執行-START之后:R0:0X R1:0Xa4 R2:0X SP:0X執行STMIA R1!,R4R11后:
16、R0:0X R1:0Xa4 R4R11:0X0X執行LDMFD之后:SP:0X R4R11:0X0X實驗最終完成了將數據從源數據區snum復制到目標數據區dnum。實驗三 匯編語言與C語言的相互調用實驗隨機數發生器一、 實驗目的1閱讀實驗程序,觀察處理器啟動過程,學會使用ADS1.2/Embest IDE輔助信息窗口來分析判斷調試過程和結果。2學會在ADS1.2/Embest IDE中編寫、編譯與調試匯編語言和C語言相互調用的程序。二、實驗設備1. 硬件:PC機。2. 軟件:ADS 1.2 / Embest IDE 200X集成開發環境。三、實驗內容使用匯編語言設計一個產生隨機數的函數,然后通
17、過C語言來調用該函數產生一系列隨機數,并存放到數組中。程序如下。1randtest.c源代碼/*隨機數產生測試例子,程序通過調用random.s中的函數randomnumber來生成隨機數*/#include <stdio.h>extern unsigned int randomnumber( void );int main( ) int i; int nTemp; unsigned int random10; for( i = 0; i < 10; i+ ) nTemp = randomnumber( ); randomi = nTemp; return( 0 );2ini
18、t.s源代碼/*系統初始化程序,用于硬件初始化設置,并轉入外部的隨機數產生主函數main( )*/#程序入口,ARM匯編#.ARM.GLOBAL _START.TEXT_START: B RESET_HANDLERUNDEFINED_HANDLER: B UNDEFINED_HANDLERSWI_HANDLER: B SWI_HANDLERPREFETCH_HANDLER: B PREFETCH_HANDLERABORT_HANDLER: B ABORT_HANDLER NOP/* RESERVED VECTOR */IRQ_HANDLER: B IRQ_HANDLERFIQ_HANDLER:
19、 B FIQ_HANDLERRESET_HANDLER: LDRSP, =0X .EXTERN MAIN LDR R0, = MAIN MOV LR, PC BX R0#- LOOP FOR EVEREND: B END.GLOBAL _GCCMAIN_GCCMAIN:MOV PC, LR .END 3random.s源代碼# 這是一個使用33位反饋移位寄存器產生偽隨機數的函數產生器RANDOMNUMBER# AREA |Random$code|, CODE, READONLY .GLOBAL RANDOMNUMBERRANDOMNUMBER:# ON EXIT:# A1 = 32偽隨機數的低
20、位數據# A2 = 32偽隨機數的高位數據 LDR IP, SEEDPOINTER LDMIA IP, A1, A2 TST A2, A2, LSR#1 MOVS A3, A1, RRX ADC A2, A2, A2 EOR A3, A3, A1, LSL#12 EOR A1, A3, A3, LSR#20 STMIA IP, A1, A2 MOV PC, LRSEEDPOINTER: .LONG SEED.DATA .GLOBAL SEEDSEED: .LONG 0X .LONG 0X# END4鏈接腳本文件ldscript參考源代碼SECTIONS. = 0x0;.text : *(.te
21、xt) .data : *(.data) .rodata : *(.rodata) .bss : *(.bss) 鏈接腳本程序主要是描述編寫的文件中的各個部分如何擺放在輸出文件中,并控制這些文件如何定位這些輸出文件。鏈接腳本文件必須以關鍵詞SECTIONS開始,緊接著式大括號,后面是所有需要輸出地描述部分,最后是閉括號收尾,并且全部使用半角符號。本ldscript文件中各語句的含義是:“.=0x0”為將當前地址計數器指向0x0,“.text : *(.text) ”為程序代碼必須放在當前的地址計數器指向的0x0處,“.data : *(.data) ”為已經初始化的數據必須放在當前的地址計數器指向的地方(緊接text區域后),“.rodata : *(.rodata) ”為只讀數據必須放在當前的地址計數器指向的地方(緊接data區域后),“.bss : *(.bss) ”為未初始化的數據必須放在當前的地址計數器指向的地方(緊接rodata區域后)。四、實驗操作步驟1創建新的工程,工程名為armcasm。2 按照參考程序編寫源代碼文件,并分別保存為 randtest.c、init. s、random. s和ldscript,然后把它們加入工程中。3按照編譯匯編器設置鏈接器設置調試器設置的順序來設置新工
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工合法合同協議
- 商業香薰機租用合同協議
- 2025標準商業辦公租賃合同
- 咖啡車出售轉讓合同協議
- 咖啡店合資合同協議
- 2025標準合同甲方勞動合同范本參考
- 商業授權合同協議
- 快遞驛站買賣協議書范本
- 模具裝卸服務合同協議
- 2025商場裝飾設計合同范本
- 農業文化創意產業園項目可行性研究報告
- GB/T 37507-2025項目、項目群和項目組合管理項目管理指南
- 浙江公路技師學院招聘考試真題2024
- 2025年保密觀知識測試題及答案
- 陜西省2024年普通高中學業水平合格性考試語文試卷(含答案)
- 年產鄰苯二甲酸二丁酯畢業設計
- 《吸煙的危害性》課件
- 三年級數學下冊《面積》練習試卷及答案
- 135調速器操縱手柄設計工藝卡片
- 美國房屋租賃合同完整版(中英文)
- 盲審后論文修改情況審核表
評論
0/150
提交評論