ARM指令:
GBLA Test1 ;声明一个全局的数学变量,变量名为Test1 GBLL Test2 ;申明一个全局的逻辑变量,变量名为Test2 Test1 SETA 0x3 ;将变量Test1赋值为3,注意书写格式,需要顶格写 Test2 SETL {TRUE} ;将变量Test2赋值为TRUE ;EQU伪指令 COUNT EQU 0x30003100 ; 定义一个变量,地址为0x30003100 AREA Example1,CODE,READONLY ; 声明代码段Example1 ENTRY ; 标识程序入口 CODE32 ; 声明32位ARM指令 START ;立即寻址 MOV R0,#0 ; R0 <= 0,将立即数0x00存入寄存器R0,可通过AXD的processor views-->register查看 ADD R0,R0,#1 ; R0 <= R0 + 1 ADD R0,R0,#0x3f ; R0 <= R0 + 0x3f ;寄存器寻址 MOV R1,#1 ; R1 <= 1,将立即数0x01存入寄存器R1 MOV R2,#2 ; R2 <= 2,将立即数0x02存入寄存器R2 ADD R0,R1,R2 ; R0 <= R1+R2,将寄存器R1和R2的内容相加,其结果存放在寄存器R0中 ;寄存器间接寻址 LDR R1,=COUNT ; R1 <= COUNT,将存储器地址放入寄存器R0 ;MOV R0,#0x12 ; R0 <= 0x12,MOV指令目地操作数只能是8位 LDR R0,=0x12345678 STR R0,[R1] ; [R1] <= R0,将寄存器R0的内容存入寄存器R1所指向的存储器 ;即设置COUNT为0x12345678, ;STR指令用于从源寄存器中将一个32位的字数据传送到存储器中 ;可通过AXD的processor views-->memory查看0x30003100的值 ;基址变址寻址 LDR R1,=COUNT ;将存储器地址0x30003100放入寄存器R1 LDR R2,=(COUNT+4) ;将存储器地址0x30003104放入寄存器R1 MOV R3,#0x12 ;将立即数0x12存入寄存器R3 STR R3,[R2] ;将寄存器R3的内容存入寄存器R2所指向的存储器 LDR R4,[R1,#4] ;将寄存器R1的内容加上4所指向的存储器的字存入寄存器R4 ;多寄存器寻址 LDR R1,=COUNT ;将存储器地址0x30003100放入寄存器R1 LDMIA R1,{R5,R6} ;R5 <= [R1],R6 <= [R1+4] ;相对寻址 BL NEXT ;跳转到子程序NEXT处执行,注意使用F8(step in) NOP NOP ;跳转指令(B) B label1 ;跳转到子程序label1处执行 NOP NOP NOP NEXT MOV R0,LR NOP NOP NOP MOV PC,LR ;从子程序返回 label1 NOP NOP NOP ;跳转指令(BL) BL lable2 ;跳转到子程序label2处执行 NOP NOP ;MOV指令 MOV R0,#0x12 ;R0=0x12 MOV R1,R0 ;R1=R0 MOV R1,R0,LSL#3 ;R1=R0<<3 ;MVN指令 MVN R0,#0xff ; R0 = 0xfffff00 MVN R0,#0xA0000007 ; 0xA0000007的反码为0x5FFFFFF8 ;CMP指令(使用AXD查看CPSR) MOV R0,#1 MOV R1,#2 CMP R0,R1 ;若R0>R1,则置R0=3,若R0<=R1,则置R1=3 MOVHI R0,#3 ;根据CPSR条件标志位中的HI(无符号大于)判断,若R0>R1,则R0=3 MOVLS R1,#3 ;根据CPSR条件标志位中的LS(无符号小于或等于)判断,R0<=R1,则R1=3 ;TST指令,测试R5的bit23是否为1,若是则置R5=0x01,不是则置R5=0x00 LDR R5,=0xffffffff TST R5,#(1<<23) ;当bit23位为1时,CPSR EQ位被设置 MOVEQ R5,#0x00 MOVNE R5,#0x01 ;ADD指令 MOV R1,#1 MOV R2,#2 MOV R3,#3 ADD R0,R1,R2 ;R0=R1+R2 ADD R0,R1,#256 ;R0=R1+256 ADD R0,R2,R3,LSL#1 ;R0=R2+(R3<<1) ;SUB指令 MOV R1,#100 MOV R2,#8 SUB R0,R1,R2 ;R0=R1-R2 SUB R0,R1,#55 ;R0=R1-256 ;AND指令 MOV R0,#0xff AND R0,R0,#3 ;逻辑与运算,R0 = R0 & 3 ;ORR指令 MOV R0,#0xff ORR R0,R0,#3 ;逻辑或运算,R0 = R0 | 3 ;BIC指令 MOV R0,#0x77 BIC R0,R0,#0x0b ;将R0的bit0,bit1,bit3清零,其余位不变 ;MUL指令 MOV R1,#10 MOV R2,#20 MUL R0,R1,R2 ;R0=R1*R2 ;MRS指令(将CPSR或者SPSR的内容传送到通用寄存器) MRS R0,CPSR ;传送CPSR的内容到R0 MRS R1,SPSR ;传送SPSR的内容到R1 ;LDR指令 LDR R1,=0x30003100 ;R1=0x30003100,使用AXD的processor views-->memory查看内存的值 LDR R0,[R1] ;R0=[R1] LDR R0,[R1,#4] ;R0=[R1+4] ;LDRB,LDRH指令 LDR R1,=0x30003100 LDRB R0,[R1] ;将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零 LDRH R2,[R1] ;将存储器地址为R1的半字数据读入寄存器R2,并将R2的高16位清零 ;STR指令,内存地址0x30003100=0xab LDR R1,=0x30003100 MOV R0,#0xab STR R0,[R1] ;将R0中的字数据写入以R1为地址的存储器中 STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中 ;LDM,STM指令 LDR R1,=0x30003100 LDMIA R1,{R5,R6} ;R5 = [R1],R6 = [R1+4] MOV R2,#0x33 MOV R3,#0X44 STMIA R1,{R2,R3} ;[R1]=R2,[R1+4]=R2 ;SWP指令 SWP R0,R0,[R1] ; 该指令完成将R1所指向的存储器中的字数据与R0中的字数据交换 ;移位指令 MOV R1,#4 MOV R0,R1,LSL#2 ;R0=R1<<2 MOV R1,#3 MOV R0,R1,ROR#2 ;将R1中的内容循环右移两位后传送到R0中 ;汇编控制伪指令,while指令 WHILE Test1<10 MOV R0,#Test1 MOV R1,#1 Test1 SETA Test1+1 WEND ;汇编控制伪指令,IF指令 IF Test2 = {TRUE} MOV R0,#1 MOV R1,#2 ELSE MOV R0,#0 MOV R1,#0 ENDIF B out lable2 MOV R0,LR ;查看R14 NOP NOP MOV PC,LR ;从子程序返回 out NOP END
原文:http://blog.csdn.net/chun_1959/article/details/23871275