



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精品文檔實(shí)驗(yàn)一 ARM匯編語(yǔ)言程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?. 了解 IAR Embedded Workbench 集成開發(fā)環(huán)境2. 掌握 ARM匯編指令程序的設(shè)計(jì)及調(diào)試二、實(shí)驗(yàn)設(shè)備1. PC操作系統(tǒng) WIN98或 WIN2000或 WINXP,ADSI.2 集成開發(fā)環(huán)境,仿真驅(qū)動(dòng)程序三、實(shí)驗(yàn)內(nèi)容1. 熟悉 IAR Embedded Workbench 集成開發(fā)環(huán)境2. 理解下列程序,新建工程,加入下面的程序,并觀察實(shí)驗(yàn)結(jié)果,解釋程序?qū)崿F(xiàn)的功能分析:該程序?qū)崿F(xiàn)的功能是 程序功能: Y = A*B+C*D+E*F 程序代碼:AREA Examl, CODE,READONLY定;義一個(gè)代碼段ENTRY;
2、程序入口MOV R0,#0;設(shè)置 R0寄存器的值為 0MOV R8,#0;設(shè)置 R8寄存器的值為 0ADR R2,N;將 R2寄存器的值設(shè)為數(shù)據(jù)域N的地址LDR R1,R2;將以 R2的值為地址的數(shù)據(jù)讀入 R1MOV R2,#0;設(shè)置 R2的值為 0ADR R3,C;將 R3寄存器的值設(shè)為數(shù)據(jù)域C的地址ADR R5,X;將 R5寄存器的值設(shè)為數(shù)據(jù)域X的地址LOOPLDR R4,R3,R8;將 R3+R8的數(shù)據(jù)讀入 R4LDR R6,R5,R8;將 R5+R8的數(shù)據(jù)讀入 R6MUL R9,R4,R6;R9 = R4*R6ADD R2,R2,R9;R2 = R2+R9ADD R8,R8,#4;R8
3、 = R8+4ADD R0,R0,#1;R0 = R0+1CMP R0,R1;比較 R0和 R1的值BLT LOOP;R0<R1的話執(zhí)行循環(huán)N DCD 0X03;C DCD 0X01,0X02,0X03,0X04,0X05,0X06;X DCD 0X01,0X02,0X03,0X04,0X05,0X06;END程序結(jié)果: 各個(gè)寄存器的結(jié)果。1歡迎下載精品文檔執(zhí)行結(jié)果如下:3. 實(shí)現(xiàn) 1+2+3+4+····+100,求的值,并保存在地址 0x90018 的地址里面程序代碼:MOV R0,#100;設(shè)置 R0寄存器的值為 100LDR R2,=0X9
4、0018;設(shè)置 R2寄存器指向地址 0x90018。2歡迎下載精品文檔MOV R1,#0;設(shè)置 R1的值為 0MOV R3,#0;設(shè)置 R3的值為 0LOOPADD R3,R3,R0;R3 = R3+R0SUB R0,R0,#1;R0 = R0-1CMP R0,R1;將R0和 R1的值比較BNE LOOP;不相等的話繼續(xù)執(zhí)行循環(huán)STR R3,R2;將 R3的值裝入到 R2指向的地址塊中。END程序執(zhí)行結(jié)果: 程序執(zhí)行完在 0x90018 內(nèi)存入的數(shù)據(jù)是0x13ba 即 5050實(shí)驗(yàn)二 ARM匯編語(yǔ)言程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?. 了解 ARM匯編語(yǔ)言的基本框架,學(xué)會(huì)使用 ARM的匯編語(yǔ)言編程;2.
5、掌握 ARM匯編指令中的堆棧指令的操作,以及存儲(chǔ)器的裝載指令操作。二、實(shí)驗(yàn)設(shè)備。3歡迎下載精品文檔1. PC操作系統(tǒng) WIN98或 WIN2000或 WINXP, ADS1.2. 集成開發(fā)環(huán)境, 仿真器驅(qū)動(dòng)程序。三、實(shí)驗(yàn)內(nèi)容1. 理解下列程序,新建工程,加入下面的程序,并觀察實(shí)驗(yàn)結(jié)果程序代碼:x EQU 15; 定義常量 x=15y EQU 61; 定義常量 y=61stack_top EQU 0X1000;定義堆棧棧頂?shù)刂窞?x1000ENTRY;程序入口處MOV sp,#stack_top;將堆棧指針指向棧頂MOV r0,#x;將x 的值放入 r0STR r0,sp;將 r0 的值壓入堆棧
6、MOV r0,#y;將y 的值放入 r0LDR r1,sp;將 x的值放入 r1ADD r0,r0,r1;r0 = r0+r1STR r0,sp;將 r0 的值裝入堆棧Stop;B stop;程序結(jié)果為 : r1 = x+y = 0x6D2. 編寫程序循環(huán) R4R11進(jìn)行累加 8次賦值, R4R11初始值是 18,每次操作后把R4R11的內(nèi)容放到 SP棧中, SP初始設(shè)置為 0x800,最后把 R4R11用 LDMFD指令清空為 0程序代碼如下:。4歡迎下載精品文檔X EQU 1; 定義常量 x = 1stack_top EQU 0X800;定義棧頂?shù)刂稥NTRY;MOV SP,#stack_
7、top;將棧頂?shù)刂分赶?0x800MOV R4,#1;設(shè)置R4 = 1MOV R5,#2;設(shè)置R5 = 2MOV R6,#3;設(shè)置R6 = 3MOV R7,#4;設(shè)置R7 = 4MOV R8,#5;設(shè)置R8 = 5MOV R9,#6;設(shè)置R9 = 6MOV R10,#7;設(shè)置R10=7MOV R11,#8;設(shè)置R11=8LOOPADD R4,R4,#x; R4累加 1ADD R5,R5,#x; R5累加 1ADD R6,R6,#x; R6累加 1ADD R7,R7,#x; R7累加 1ADD R8,R8,#x; R8累加 1ADD R9,R9,#x; R9累加 1ADD R10,R10,#x;
8、 R10累加 1ADD R11,R11,#x; R11累加 1STMIA SP!,R4-R11;將 R4-R11的值壓入堆棧CMP R4,#9; 比較 R4和 9的大小BLT LOOP;R4 < 9 繼續(xù)執(zhí)行循環(huán)LDMFD SP!,R4-R11;將 R4-R11清零END;實(shí)驗(yàn)結(jié)果: 主要實(shí)現(xiàn)將數(shù)據(jù)2-9,3-10,4-11 9-16 壓入堆棧(初始地址是0x800處開始),最后將 R4-R11全部清零。5歡迎下載精品文檔3. 更改實(shí)驗(yàn)中 1中的 X,Y的值,觀察期結(jié)果程序代碼:x EQU 20y EQU 120stack_top EQU 0X1000ENTRYMOV sp,#stack
9、_topMOV r0,#xSTR r0,spMOV r0,#yLDR r1,spADD r0,r0,r1STR r0,spStopB StopEND程序結(jié)果為: r0 = x+y = 140 = 0X8C。6歡迎下載精品文檔實(shí)驗(yàn)三 ARM匯編語(yǔ)言程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?. 了解 ARM匯編語(yǔ)言的基本框架,學(xué)會(huì)使用 ARM的匯編語(yǔ)言編程2. 掌握 ARM匯編的存儲(chǔ)器加載 / 存儲(chǔ)指令,及 if 條件、循環(huán)、循環(huán)及循環(huán)的匯編實(shí)現(xiàn)二、實(shí)驗(yàn)設(shè)備1.PC 操作系統(tǒng) WIN98或 WIN2000或 WINXP,ADS1.2集成開發(fā)環(huán)境,仿真器驅(qū)動(dòng)程序三、實(shí)驗(yàn)內(nèi)容1. 理解下列程序,新建工程,加入下面的程序,
10、并觀察實(shí)驗(yàn)結(jié)果程序代碼:Num EQU 20;定義常量 Num = 20START;LDR r0,=src;將 src 數(shù)據(jù)塊的開始地址存入r0 中LDR r1,=dst;將 dst 數(shù)據(jù)塊的開始地址存入r1 中MOV r2,#Num; 設(shè)置 r2 的值為 20MOV sp,#0x400;堆棧指針 sp指向 0x400blockcopy;MOVS r3,r2,LSR #3; 將r2 左移 3位移入 r3 并且影響標(biāo)志位 BEQ copywords; 結(jié)果為 0的話跳轉(zhuǎn)到 copywords。7歡迎下載精品文檔STMFD SP!,r4-r11;將r4-r11 的值入棧octcopy;LDMIA
11、r0!,r4-r11;將src 的前 8個(gè)字?jǐn)?shù)據(jù)存入讓 r4-r11STMIA r1!,r4-r11;將r4-r11 中的數(shù)據(jù)放入 dst 數(shù)據(jù)塊中SUBS r3,r3,#1;r3 = r3-1BNE octcopy; 結(jié)果不為 0跳轉(zhuǎn)到 octcopyLDMFD SP!,R4-R11;恢復(fù)原來的 r4-r11copywords;ANDS r2,r2,#7; r2= r2&7BEQ stop; 結(jié)果為 0跳轉(zhuǎn)到 stopwordcopy;LDR r3,r0,#4;將 r0指向的字?jǐn)?shù)據(jù)放入r3 中, r0 = r0+4STR r3,r1,#4;將 r3中的數(shù)據(jù)存入到 dst 數(shù)據(jù)塊中,
12、r1 = r1+4SUBS r2,r2,#1;r2 = r2 -1BNE wordcopy;不為 0跳轉(zhuǎn)到 wordcopy 處stop;B stop;src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4;dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;END;程序結(jié)果: 將 src 的數(shù)據(jù)全部存入到dst 中2.新建工程,并自行編寫程序,分別使用LDR,STR,LDMIA,STMIA操作,實(shí)現(xiàn)對(duì)某段連續(xù)存儲(chǔ)單元寫入數(shù)據(jù),并觀察結(jié)果程序代碼:MOV R4,#1;設(shè)置 r4 = 1 ;。8歡迎下載精品文檔M
13、OV R5,#2;設(shè)置 r5 = 1 ;MOV R6,#3;設(shè)置 r4 = 1 ;LDR R0,=dst;R0保存 dst 的首地址STR R4,R0;將r4 的值裝入 r0 執(zhí)行的內(nèi)存中STR R5,R0,#4;將r5 的值裝入 r0+4 執(zhí)行的內(nèi)存中STR R6,R0,#8;將r6 的值裝入 r0+8 執(zhí)行的內(nèi)存中LDR R7,=src; R0保存 src 的首地址LDMIA R7,R8-R10;將 r7 執(zhí)行的地址的數(shù)據(jù)讀入r8=r10LDR R3,=N;r3 保存 N的首地址STMIA R3!,R8-R10;將 r8-r10 裝入 r3 指向的內(nèi)存N DCD 0,0,0src DCD
14、1,2,3dst DCD 0,0,0END程序結(jié)果: 熟悉使用 LDMIA,STMIA和 LDR,STR指令3. 使用 ARM匯編指令實(shí)現(xiàn) if 條件執(zhí)行,使用 ARM匯編指令實(shí)現(xiàn) for 條件執(zhí)行,使用 ARM匯編指令實(shí)現(xiàn) while 條件執(zhí)行,使用 ARM匯編指令實(shí)現(xiàn) dowhile 條件執(zhí)行。程序代碼:實(shí)現(xiàn) if 條件:MOV R0,#1 MOV R1,#2 CMP R0,R1BGT LOOP1 BLT LOOP2LOOP1。9歡迎下載精品文檔MOV R3,R0LOOP2MOV R3,R1END程序結(jié)果:實(shí)現(xiàn) for 和 while 條件:MOV R1,#1MOV R3,#0MOV R2
15、,#101;LOOPADD R3,R1,R3ADD R1,R1,#1CMP R1,R2BLT LOOPEND程序結(jié)果:。10歡迎下精品文檔實(shí)現(xiàn) dowhile 條件:MOV R0,#1MOV R1,#100MOV R3,#0LOOPCMP R0,R1BGT STOPADD R3,R0,R3ADD R0,R0,#1B LOOP STOPEND程序結(jié)果:。11歡迎下精品文檔實(shí)驗(yàn)四基于 ARM的 C語(yǔ)言程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?. 了解 ARM C語(yǔ)言的基本框架,學(xué)會(huì)使用ARM的 C 語(yǔ)言編程。2. 掌握 C 語(yǔ)言和匯編語(yǔ)言編程的相互調(diào)用。二、實(shí)驗(yàn)設(shè)備1. EL-ARM-830 教學(xué)實(shí)驗(yàn)箱, Penti
16、umII 以上的 PC機(jī),仿真器電纜。三、 ARM C語(yǔ)言簡(jiǎn)介與使用規(guī)則1. ARM 使用 C語(yǔ)言編程是大勢(shì)所趨在應(yīng)用系統(tǒng)的程序設(shè)計(jì)中, 若所有的編程任務(wù)均由匯編語(yǔ)言來完成, 其工作量巨大,并且不宜移植。 由于 ARM的程序執(zhí)行速度較高, 存儲(chǔ)器的存儲(chǔ)速度和存儲(chǔ)量也很高,因此, C 語(yǔ)言的特點(diǎn)充分發(fā)揮,使得應(yīng)用程序的開發(fā)時(shí)間大為縮短,代碼的移植十分方便,程序的重復(fù)使用率提高,程序架構(gòu)清晰易懂,管理較為容易等等。因此,C語(yǔ)言的在 ARM編程中具有重要地位。2. ARM C 語(yǔ)言程序的基本規(guī)則在 ARM程序的開發(fā)中, 需要大量讀寫硬件寄存器, 并且盡量縮短程序的執(zhí)行時(shí)間的代碼一般使用匯編語(yǔ)言來編寫
17、,比如ARM的啟動(dòng)代碼, ARM的操作系統(tǒng)的移植代碼等,除此之外,絕大多數(shù)代碼可以使用C語(yǔ)言來完成。C 語(yǔ)言使用的是標(biāo)準(zhǔn)的C 語(yǔ)言, ARM的開發(fā)環(huán)境實(shí)際上就是嵌入了一個(gè)C 語(yǔ)言的集。12歡迎下精品文檔成開發(fā)環(huán)境,只不過這個(gè)開發(fā)環(huán)境和ARM的硬件緊密相關(guān)。在使用 C 語(yǔ)言時(shí), 要用到和匯編語(yǔ)言的混合編程。當(dāng)匯編代碼較為簡(jiǎn)潔,則可使用直接內(nèi)嵌匯編的方法,否則,使用將匯編文件以文件的形式加入項(xiàng)目當(dāng)中,通過ATPCS的規(guī)定與C 程序相互調(diào)用與訪問。ATPCS,就是 ARM、Thumb的過程調(diào)用標(biāo)準(zhǔn) ( ARM/ThumbProcedureCallStandard ),它規(guī)定了一些子程序間調(diào)用的基本規(guī)
18、則。如寄存器的使用規(guī)則,堆棧的使用規(guī)則,參數(shù)的傳遞規(guī)則等。在 C 程序和 ARM的匯編程序之間相互調(diào)用必須遵守ATPCS。而使用 ADS的 C語(yǔ)言編譯器編譯的C 語(yǔ)言子程序滿足用戶指定的ATPCS的規(guī)則。但是,對(duì)于匯編語(yǔ)言來說,完全要依賴用戶保證各個(gè)子程序遵循ATPCS的規(guī)則。 具體來說, 匯編語(yǔ)言的子程序應(yīng)滿足下面3 個(gè)條件: 在子程序編寫時(shí),必須遵守相應(yīng)的ATPCS規(guī)則; 堆棧的使用要遵守相應(yīng)的ATPCS規(guī)則; 在匯編編譯器中使用-atpcs選項(xiàng)?;镜?ATPCS規(guī)定,請(qǐng)?jiān)斠娤嚓P(guān)技術(shù)文檔。匯編程序調(diào)用C程序匯編程序的設(shè)置要遵循ATPCS規(guī)則,保證程序調(diào)用時(shí)參數(shù)正確傳遞。在匯編程序中使用I
19、MPORT偽指令聲明將要調(diào)用的C 程序函數(shù)。在調(diào)用 C 程序時(shí),要正確設(shè)置入口參數(shù),然后使用BL 調(diào)用。C程序調(diào)用匯編程序匯編程序的設(shè)置要遵循ATPCS規(guī)則,保證程序調(diào)用時(shí)參數(shù)正確傳遞。在匯編程序中使用EXPORT偽指令聲明本子程序,使其他程序可以調(diào)用此子程序。在 C 語(yǔ)言中使用 extern 關(guān)鍵字聲明外部函數(shù)(聲明要調(diào)用的匯編子程序)。在 C 語(yǔ)言的環(huán)境內(nèi)開發(fā)應(yīng)用程序, 一般需要一個(gè)匯編的啟動(dòng)程序, 從匯編的啟動(dòng)程序,跳到 C 語(yǔ)言下的主程序,然后,執(zhí)行 C程序,在 C 環(huán)境下讀寫硬件的寄存器,一般是通過宏調(diào)用, 在每個(gè)項(xiàng)目文件的 Startup44b0/INC 目錄下都有一個(gè) 44b.h 的頭文件,那里面定義了所有關(guān)于44B0 的硬件寄存器的宏,對(duì)宏的讀寫,就能操作44B0 的硬件。具體的編程規(guī)則同標(biāo)準(zhǔn)C 語(yǔ)言。四、實(shí)驗(yàn)內(nèi)容1、理解下列程序,新建工程,加入下面的程序,并觀察實(shí)驗(yàn)結(jié)果。13歡迎下精品文檔程序代碼:/*實(shí)現(xiàn) 5 個(gè)數(shù)的相加 */int sum5(int a,int b,int c,int d,int e)return (a+b+c+d+e); 匯編語(yǔ)言IMPORT sum5; 聲明調(diào)用 c函數(shù)CALLSUMSSTMFD SP!,LR;將 LR寄存器入棧MOV R0,#1;r0 = 1ADD R1,R0,R0;r1 =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 代寫課題申報(bào)書多少錢
- 成囊材料市場(chǎng)分析及競(jìng)爭(zhēng)策略分析報(bào)告
- 企業(yè)生產(chǎn)線用工合同范本
- 中國(guó)傳統(tǒng)文化學(xué)習(xí)心得體會(huì)
- 廠家求購(gòu)鋼材合同范本
- 臨床護(hù)理習(xí)題(附答案)
- 機(jī)械制造基礎(chǔ)模擬試題含答案
- 代理經(jīng)營(yíng)承包協(xié)議合同范本
- 箱包維修合同范本
- 流體力學(xué)復(fù)習(xí)題(含答案)
- 環(huán)衛(wèi)車輛操作及維護(hù)培訓(xùn)方案
- 醫(yī)療器械質(zhì)量負(fù)責(zé)人崗位職責(zé)
- 湘陰縣易聚餐飲有限公司部門備用金業(yè)務(wù)財(cái)務(wù)融合流程設(shè)計(jì)
- 第十七屆山東省職業(yè)院校技能大賽機(jī)器人系統(tǒng)集成應(yīng)用技術(shù)樣題1學(xué)生賽
- 血管通路的介入治療
- 臨床三基考試題庫(kù)(附答案)
- 2024年浙江省杭州市拱墅區(qū)中考語(yǔ)文一模試卷
- 蘇科版八年級(jí)物理上冊(cè)同步學(xué)與練第14課光的反射(原卷版+解析)
- 2024年上海市中考語(yǔ)文真題卷及答案解析
- 校園直飲水機(jī)供貨安裝及售后服務(wù)方案
- 廢氣處理系統(tǒng)改造及廢水處理系統(tǒng)改造項(xiàng)目可行性研究報(bào)告
評(píng)論
0/150
提交評(píng)論