2010-第3章嵌入式ARM指令系統(tǒng)-補(bǔ)充.ppt_第1頁
2010-第3章嵌入式ARM指令系統(tǒng)-補(bǔ)充.ppt_第2頁
2010-第3章嵌入式ARM指令系統(tǒng)-補(bǔ)充.ppt_第3頁
2010-第3章嵌入式ARM指令系統(tǒng)-補(bǔ)充.ppt_第4頁
2010-第3章嵌入式ARM指令系統(tǒng)-補(bǔ)充.ppt_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第3章 ARM指令系統(tǒng)-補(bǔ)充,李建義,ARM指令總結(jié),指令的基本格式: 標(biāo)號(hào) 助記符條件s 目的寄存器 源寄存器1,源操作數(shù)2 常用指令: ADD,ADC,SUB,SBC,MUL,MLA CMP B,BL,BX MOV LDRB/H,STRB/H,ARM指令總結(jié),ARM指示符 AREA ENTRY END 偽指令 ADR、ADRL、LDR MACRO、MEND,匯編的編程風(fēng)格,標(biāo)號(hào)和注釋要頂格書寫,但指令和偽指令不能頂格書寫,需要前導(dǎo)空格 注釋前加“;”,匯編程序舉例,COUNT EQU 0 x30001010 AREA Example1,CODE,READONLY ENTRY CODE32

2、START LDR R1,=COUNT MOV R0,#0 STR R0,R1,匯編程序舉例,LOOP LDR R1,=COUNT LDR R0,R1 ADD R0,R0,#1 CMP R0,#10 MOVHS R0,#0 STR R0,R1 B LOOP END,程序的調(diào)試窗口,寄存器窗口,存儲(chǔ)器Memory窗口,調(diào)試按鈕,要查看的存儲(chǔ)器起始地址,Step in 到函數(shù)內(nèi)部執(zhí)行,Step 不進(jìn)入函數(shù)內(nèi)部執(zhí)行,Run to cursor 執(zhí)行到光標(biāo)處,C與匯編混合調(diào)用規(guī)則(1) 寄存器使用規(guī)則,子程序間通過寄存器R0R3來傳遞參數(shù)(A0A3)。被調(diào)用子程序返回前無需恢復(fù)寄存器R0R3的值。 在

3、子程序中,使用R4R11保存局部變量(V1V8)。若子程序中使用了寄存器V1V8中的某些寄存器,子程序進(jìn)入時(shí)必須保存這些寄存器內(nèi)容,返回時(shí)必須恢復(fù)這些寄存器內(nèi)容。,C與匯編混合調(diào)用規(guī)則(1) 寄存器使用規(guī)則,R13用作數(shù)據(jù)棧指針,記做SP,在進(jìn)入子程序時(shí)的值和退出子程序時(shí)的值必須相等。 R14保存子程序返回地址,R15是程序計(jì)數(shù)器,(2)參數(shù)傳遞規(guī)則,當(dāng)函數(shù)的參數(shù)不超過4個(gè)時(shí),可以使用寄存器R0R3來傳遞參數(shù) 參數(shù)超過4個(gè)時(shí),將多余的數(shù)據(jù)用數(shù)據(jù)棧進(jìn)行傳遞,入棧的順序與參數(shù)順序恰好相反,即最后 一個(gè)字?jǐn)?shù)據(jù)先入棧 子程序結(jié)果返回 返回32位的數(shù),利用R0 返回64位的數(shù)時(shí),使用R0、R1,(3)數(shù)

4、據(jù)棧使用規(guī)則,ATPCS規(guī)定數(shù)據(jù)棧為FD(Full Descendnig)類型,地址減小方向,已使用的??臻g,未使用的棧空間,?;刂?棧指針,棧的上限地址,棧中數(shù)據(jù),3.從匯編程序中訪問C程序變量,在C程序中聲明的全局變量可以在匯編程序中通過地址訪問,具體訪問方式如下: 使用IMPORT偽操作聲明該全局變量 使用LDR指令讀取該全局變量的內(nèi)存地址 根據(jù)該數(shù)據(jù)類型,使用相應(yīng)的LDR指令讀取該全局變量的值;使用相應(yīng)的STR指令修改該全局變量的值,C與匯編的混合編程,1.內(nèi)嵌匯編 _asm 匯編指令 ,void my_strcpy(char *src, const char *dst) int c

5、h; _asm loop: LDRB ch, src, #1 STRB ch, dst, #1 CMP ch, #0 BNE loop ,2.從匯編程序中訪問C程序變量,在C程序中聲明的全局變量可以在匯編程序中通過地址訪問。 使用IMPORT偽操作聲明該全局變量 使用LDR指令讀取該全局變量的內(nèi)存地址:LDR R1,=變量名 根據(jù)該數(shù)據(jù)類型,使用相應(yīng)的LDR指令讀取該全局變量的值;使用相應(yīng)的STR指令修改該全局變量的值,C與匯編混合調(diào)用2.匯編語言程序中調(diào)用C語言函數(shù),按照參數(shù)使用規(guī)則將參數(shù)存入R0-R3,SP, 內(nèi)嵌匯編調(diào)用C函數(shù) BL 函數(shù)名,參數(shù)表 不同文件中調(diào)用 匯編文件.S C文件.

6、C,IMPORT 函數(shù)名 設(shè)置參數(shù)R0-R3,SP BL 函數(shù)名,extern 返回值 函數(shù)名(參數(shù)) ,3.C程序中調(diào)用匯編程序的子函數(shù),匯編程序的設(shè)計(jì)要遵守ATPCS,保證程序調(diào)用時(shí)參數(shù)的正確傳遞 匯編文件.s C文件.c,AREA 段名 CODE,READONLY EXPORT 函數(shù)名,extern 函數(shù)名(參數(shù)); 函數(shù)名(實(shí)參);,內(nèi)嵌匯編調(diào)用C函數(shù),#include void my_strcpy(char *src, const char *dst) int ch; _asm loop: LDRB ch, src, #1 STRB ch, dst, #1 CMP ch, #0 BN

7、E loop ,int main(void) const char *a = Hello World; char b20; _asm MOV R0, a MOV R1, b BL my_strcpy,R0,R1 printf(Original string: %sn,a); printf(Copied string: %sn,b); return 0; ,例子:字符串復(fù)制strtest.c,extern void strcopy(const char *s, char *d); int main( ) const char *srcstr =“Hello World.; char dststr

8、20; strcopy(srcstr ,dststr ); return 0; ,例子:字符串復(fù)制strcopy.s,AREA SCopy, CODE, READONLY EXPORT strcopy strcopy LDRB r2, r0,#1 STRB r2, r1,#1 CMP r2, #0 BNE strcopy MOV pc,lr END,strcopy(srcstr ,dststr );,調(diào)試窗口,匯編文件中調(diào)用C函數(shù)test5.c,;匯編程序調(diào)用C程序g()計(jì)算5個(gè)整數(shù)i、2*i、3*i、4*i、5*i EXPORT f AREA f, CODE, READONLY IMPORT

9、 g IMPORT globl STR lr, sp, #-4! ADD r1, r0, r0 ADD r2, r1,r0 ADD r3, r1,r2 STR r3, sp, #-4! ADD r3, r1, r1 BL g LDR r1, =globl STR r0, r1 ADD sp, sp, #4 LDR pc, sp,#4 END,#include extern int g(int a , int b , int c, int d, int e) return a+b+c+d+e; /*/ unsigned long globl; extern void f(int); int main(void) globl = 0; f(4); printf(g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論