當前位置:編程學習大全網 - 編程語言 - arm常用幾個匯編語言的程序

arm常用幾個匯編語言的程序

壹。從壹數到十

COUNT EQU 0x30003100 ;定義變量COUNT的基地址 AREA Example1,CODE,READONLY;聲明代碼段Example1為只讀 ENTRY ;標識程序入口

CODE32 ;聲明32位ARM指令 START LDR R1,=COUNT ;將0X30003100賦給R1 MOV R0,#0 ;執行R0=0

STR R0,[R1] ;存儲R0寄存器的數據到R1指向的存儲單元 LOOP LDR R1,=COUNT ;將0X30003100賦給R1

LDR R0,[R1] ;將R1中的數值作為地址,取出此地址中的數據保存到R0中 ADD R0,R0,#1 ;執行R0=R0+1

CMP R0,#10 ;將R0與10進行比較

MOVHS R0,#0 ;若R0大於等於10,則R0=0

STR R0,[R1] ;存儲R0寄存器的數據到R1指向的地址單元 B LOOP ;跳轉到LOOP

END ;匯編文件結束

二,9的8次冪

X EQU 9 ;初始化X為9 n EQU 8 ;初始化N為8

AREA Example3,CODE,READONLY ;生明代碼段Example3為只讀 ENTRY ;標識程序入口路

CODE32 ;聲明32位ARM指令

START LDR SP,=0x30003F00 ;把0x30003F00 賦給SP(R13) LDR R0,=X ;把9賦給R0 LDR R1,=n ;把8賦給R1

BL POW ;跳轉到POW,並把下壹條指令地址存入到R14中 HALT B HALT ;等待跳轉

POW STMFD SP!,{R1-R12,LR} ;將R1-R12入棧,滿遞減堆棧 MOVS R2,R1 ;將R1賦給R2,並影響標誌位 MOVEQ R0,#1 ;若Z=1,則R0=1

BEQ POW_END ;若Z=1,跳轉到POW_END MOV R1,R0 ;將R0中值賦給R1 SUB R2,R2,#1 ;將R2-1的只賦給R2 POW_L1 BL DO_MUL ;跳轉到DO-MUL,並把下壹條指令地址存入R14中 SUBS R2,R2,#1 ;將R2-1的值賦給R2,並影響標誌位 BNE POW_L1 ;若Z=0,跳轉到POW_L1

POW_END LDMFD SP!,{R1-R12,PC} ;數據出棧,存入到R1-R12,PC中 DO_MUL MUL R0,R1,R0 ;把R1*R0的值賦給R0 MOV PC,LR ;LR中的值賦給PC END ;匯編結束

三:從壹壹直加到壹百

程序清單(壹) C 語言實驗參考程序

#define uint8 unsigned char ;定義壹個無符號字符常量uint8 #define uint32 unsigned int ;定義壹個無符號整型常量unint32

#define N 100 ;定義壹個常量N=100(宏定義,100用N代替) uint32 sum; ;定義sum為無符號整型常量(聲明壹個unsigned int型的變量sum) void Main(void) ;主函數

{uint32 i; ;定義無符號整型常量i(聲明壹個unsigned int型的變量i) sum=0; ;sum初始值為0

for(i=0;i<=N;i++) ;i在N內自增加1(i從0開始,i<=N時循環成立) {sum+=i;} ;把sum+i賦給sum while(1); ;為真循環 }

程序清單(二) 簡單的啟動代碼

IMPORT |Image$$RO$$Limit | ;R0輸出段存儲區域界線 IMPORT |Image$$RW$$Base | ;RW輸出段運行時起始地址 IMPORT |Image$$ZI$$Base | ;ZI輸出段運行時起始地址 IMPORT |Image$$ZI$$Limit | ;ZI輸出段存儲區域界線 IMPORT Main ;主函數

AREA Start,CODE,READONLY ;聲明代碼段start,為只讀 ENTRY ;程序入口

CODE32 ;聲明32位ARM指令 Reset LDR SP,=0x40003f00 ;將0x40003f00賦給SP

LDR R0,=|Image$$RO$$Limit| ;將R0輸出段存儲區域界線賦給R0 LDR R1,=|Image$$RW$$Base | ;將RW輸出段運行時起始地址賦給R1 LDR R3,=|Image$$ZI$$Base | ;將ZI輸出段運行時起始地址賦給R3 CMP R0,R1 ;比較R0和R1,相等Z=1,反之Z=0 BEQ LOOP1 ;若Z=1,則跳到LOOP1

LOOP0 CMP R1,R3 ;比較R1和R3,若R1<r3,c=0

LDRCC R2,[R0],#4 ;若C=0,讀取R0地址單元內容並且存入R2,且R0=R0+4 STRCC R2,[R1],#4 ;若C=0,讀取R2中的數據存入R1,且R1=R1+4 BCC LOOP0 ;若C=0,跳轉到LOOP0

LOOP1 LDR R1,=|Image$$ZI$$Limit| ;將ZI輸出段存儲區域賦給R1 MOV R2,#0 ;把0賦給R2

LOOP2 CMP R3,R1 ;比較R1和R3,若R1<r3,c=0 strcc="" r2,[r3],#4="" ;若c="0,將R2中數據保存到內存單元R3中,且R3=R3+4" bcc="" loop2="" b="" main="" ;跳轉到主程序="" end="" ;匯編結束=""

四、程序清單(壹) C 語言調用匯編的參考程序

#define uint8 unsigned char ;定義壹個無符號字符常量uint8 #define uint32 unsigned int ;定義壹個無符號整型常量.uint32

extern uint32 Add(uint32 x,uint32 y); //聲明子程序Add為壹個無符號整型常量,它為2個無符號整型常量x,y的和

uint32 sum; ;定義sum為無符號整型常量 void Main(void) ;無返回主程序

{sum=Add(555,168); ;sum等於555+168 while(1); ;為真循環 }

程序清單(二) 匯編加法函數程序

EXPORT Add ;聲明子程序Add方便調用 AREA Start,CODE,READONLY ;聲明代碼段start,為只讀 ENTRY ;程序入口

CODE32 ;聲明32位ARM指令

Add ADD R0,R0,R1 ;將R0+R1值賦給R0 MOV PC,LR ;將LR值賦給PC

  • 上一篇:張家口冬奧插畫-張家口2020冬奧會標,怎麽畫?
  • 下一篇:flash中,alpha值是什麽意思?
  • copyright 2024編程學習大全網