BIC:ARM指令,对某些位,清零。先取反再相与。
asm("BIC r2, r2, #0x1f"); ##对R2的低5位清零。
ORR:ARM指令,逻辑或
asm("ORR r2, r2, #0x10"); ##R2逻辑与0x10。
MRS:asm("MRS r2, CPSR"); ##将CPSR的值加载到R2中。
MSR:asm("MSR CPSR, r2"); ##将R2的值加载到CPSR中。
asm(" SWI 0x0"); ##跳转到软件中断函数,并转换为SVC模式。
LDR:{条件}目的寄存器 存储器寄存器。将存储地址所指的4个字节数据传送到寄存器,其中寻址方式会有很多种。
asm("ldr r0,=0xddeeaabb"); ##在这里ldr是一个伪指令,相当于move指令。
asm("ldr r0, [r1]"); ##将存储器地址为r1的一个字的数据加载到r0中。
MRC与MCR:在处理器寄存器与协处理器寄存器之间交换数据。
MRC {cond} coproc, opcode1, Rd, CRn, CRm {,opcode2}
asm("mrc p15,0,r0,c1,c1,0"); ##在CRn, CRm均为c1, opcode均为0时,表示SCR
(Secure Configuration Register),表示将c1的值赋值给r0.
asm("mcr p15,0,r0,c1,c1,0"); ##将r0的值赋值给c1.
asm("mcr p15,0,r0,c12,c0,0"); ##将r0的值赋值给c12,此时c12表示VBAR,
Vector Base Address Register,存放异常时的入口地址。
SMC:(Secure Monitor Call). asm(" SMC 0x0"); ##将ARM core切换到Trust Zone模式。
asm("mov r2, r2, lsr, #4"); ##r2左移4位后,加载到r2中。
asm("str r3, [sp, #-4]"); ##将r3中的数据加载到堆栈中,堆栈顶指针向前移4.
asm("ldmia r0!, {r3-r10}"); ##ldmia多寄存器加载指令,将r0地址中的数据加载到r3中,且每次r0增加4.
!表示,最终r0的值会改变。
asm("SVC 0x0"); ##arm core转为Supervisor模式。