资源描述:
《ARM嵌入式设计实验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、汇编指令实验一COUNTEQU0x40003100;定义一个变量,地址为0x40003100AREAExample2,CODE,READONLY;声明代码段Example2ENTRY;标识程序入口CODE32;声明32位ARM指令STARTLDRR1,=COUNT;R1<=COUNTMOVR0,#0;R0<=0STRR0,[R1];[R1]<=R0,即设置COUNT为0LOOPLDRR1,=COUNTLDRR0,[R1];R0<=[R1]ADDR0,R0,#1;R0<=R0+1CMPR0,#10;R0与10比较,影响条件码标志MOVHSR0
2、,#0;若R0大于等于10,则此指令执行,R0<=0STRR0,[R1];[R1]<=R0,即保存COUNTBLOOPEND汇编指令实验二;文件名:TEST4.S;功能:计算X的n次方的值;说明:X和n均为无符号整数XEQU9nEQU8;定义X的值为9;定义n的值为8AREAExample4,CODE,READONLY;声明代码段Example4ENTRYCODE32;标识程序入口;声明32位ARM指令STARTLDRSP,=0x40003F00STMFD/LMDFD指令)LDRR0,=XLDRR1,=nBLPOWHALTBHALT设置堆栈
3、(满递减堆栈,使用;调用子程序POW,返回值为R0;名称:POW;功能:整数乘方运算。;入口参数:R0底数;R1指数;出口参数:R0运算结果;占用资源:RO、R1;说明:本子程序不考虑溢出问题POW;寄存器入栈保护;将指数值复制到R2,并影响条件码标STMFDSP!,{R1-R12,LR}MOVSR2.R1志MOVEQR0,#1BEQPOW_END;若指数为0,则设置R0=1;若指数为0,则返回CMPR2,#1POW_ENDMOVSUBR1,R0;设置DO_MUL子程序的入口参数RO和R2,R2,#1;计数器R2=指数值减1POW_L1BL
4、DO_MUL;调用DO_MUL子程序,RO=R1*ROSUBSR2,R2,#1;每循环一次,计数器R2减1BNEPOW_L1;若计数器R2不为0,跳转到POW.L1BEQ;若指数为1,则返回。(此时R0没有被更改)POW_ENDLDMFDSP!,{R1・R12,PC};寄存器出栈,返回;名称:DO_MUL;功能:32位乘法运算。;入口参数:R0乘数;R1被乘数;岀口参数:R0计算结果;占用资源:RO、R1;说明:本子程序不会破坏R1DO_MULMULR0,R1,R0;RO=R1*ROMOVPC,LR;返回END工程模板应用试验(1)C程序的
5、运行环境,然后进入C程序代码。Startup.s程序:;起动文件。初始化IMPORT
6、lmage$$RO$$Limit
7、IMPORT
8、lmage$$RW$$Base
9、IMPORT
10、lmage$$ZI$$Base
11、IMPORT
12、lmage$$ZI$$Limit
13、IMPORTMain;声明C程序中的Main()函数AREAStart,CODE,READONLY;声明代码段StartENTRY;标识程序入口CODE32;声明32位ARM指令ResetLDRSP=0x40003F00;初始化C程序的运行环境LDRLDRLDRRO,=
14、lmage$$
15、RO$$Limit
16、R1,=
17、lmage$$RW$$Base
18、R3,=
19、lmage$$ZI$$Base
20、CMPRO,R1BEQLOOP1LOOPOCMPR1,R3LDRCCR2,[RO],#4STRCCR2,[R1],#4BCCLOOPOLOOP1LDRR1,=
21、lmage$$ZI$$Limit
22、MOVR2,#0LOOP2CMPR3,R1STRCCR2,[R3],#4BCCLOOP2BMain;跳转到C程序代码Main()函数ENDTEST.C程序:#defineuint32unsignedint#defineN100uint32sum;/
23、/使用加法运算来计算1+2+3+...+(N-1)+N的值。(N>0)voidMain(void){uint32i;sum=0;for(i=0;i<=N;i++){sum+=i;}while(1);}(2)Startup.s程序:;起动文件。初始化C程序的运行环境,然后进入C程序代码。IMPORTIMPORTIMPORTIMPORT
24、lmage$$RO$$Limit
25、
26、lmage$$RW$$Base
27、
28、lmage$$ZI$$Base
29、
30、lmage$$ZI$$Limit
31、IMPORTMain;声明C程序中的Main()函数AREAStart,
32、CODE,READONLY;声明代码段StartENTRYCODE32;标识程序入口;声明32位ARM指令ResetLDRSP=0x40003F00;初始化C程序的运行环境LDR