arm 汇编指令学习
str r1, [r0] ;将r1寄存器的值,传送到地址值为r0的(存储器)内
mrs r0, cpsr ;读cpsr寄存器到r0
bic r0, r0, #0x1 ;位清除 clear bit 1
orr r0, r0, #0xd3 ;逻辑或
msr cpsr,r0 ;写cpsr寄存器
mrc p15, 0, r0, c1, c0, 4 ;可参见《ARM体系结构与编程》第五章
/*<4>提供附加信息,用于区别同一个编号的不同物理寄存器。
MRC指令将协处理器的寄存器中数值传送到ARM处理器的寄存器中。
MCR指令将ARM处理器的寄存器中的数据传送到协处理器的寄存器中。*/
LDR R1,=COUNT ;是将COUNT这个变量的地址,也就是0x40003100放到R1中。
MOV PC, LR ;如果在子程序中LR没有改变,则等同于 RET
;程序在 调用子程序时,会把 BL SUB_XXXXX 处的
;下一条指令送入LR, 这样,当所调用的子程序没有改变LR的值时(注意这里我说说的是在整个子程序中LR没有被改变),返回父程序时,你就可以使用
bne label ;不等跳转
strb r0, [r1] ;从源寄存器中将一个8位的字节数据存储到存储器中,该字节数据为源寄存器的低8位
adr r0, _start ;指令将基于PC相对偏移的地址值读取到寄存器中。
ldmia r0!, {r9-r10} /* copy from source address [r0] */
stmia r1!, {r9-r10} /* copy to target address [r1] */
ADD R0,R1,R2 ; R0=R1+R2
ADD R0,R1,#3 ;R0=R1+3
DSB,ISB,DMB指令
DMB:
数据内存屏障可作为内存屏障使用。 它可确保会先检测到程序中位于 DMB 指令前的所有显式内存访问指令,然后再检测到程序中位于 DMB 指令后的显式内存访问指令。它不影响其他指令在处理器上的执行顺序。
option 的允许值为:
SY-
完整的系统DMB 操作。 这是缺省情况,可以省略。
DSB:
数据同步屏障是一种特殊类型的内存屏障。 只有当此指令执行完毕后,才会执行程序中位于此指令后的指令。 当满足以下条件时,此指令才会完成:
-
位于此指令前的所有显式内存访问均完成。
-
位于此指令前的所有缓存、跳转预测和 TLB 维护操作全部完成。
允许的值为:
SY-
完整的系统 DSB 操作。 这是缺省情况,可以省略。
UN-
只可完成于统一点的DSB 操作。
ST-
存储完成后才可执行的DSB 操作。
UNST-
只有当存储完成后才可执行的DSB 操作,并且只会完成于统一点。
ISB:
指令同步屏障可刷新处理器中的管道,因此可确保在 ISB 指令完成后,才从高速缓存或内存中提取位于该指令后的其他所有指令。这可确保提取时间晚于 ISB 指令的指令能够检测到 ISB 指令执行前就已经执行的上下文更改操作的执行效果,例如更改ASID 或已完成的 TLB 维护操作,跳转预测维护操作以及对 CP15 寄存器所做的所有更改。
此外,ISB 指令可确保程序中位于其后的所有跳转指令总会被写入跳转预测逻辑,其写入上下文可确保 ISB 指令后的指令均可检测到这些跳转指令。这是指令流能够正确执行的前提条件。
option 的允许值为:
SY-
完整的系统DMB 操作。 这是缺省情况,可以省略。

浙公网安备 33010602011771号