#define __stringify_1(x) #x
#define read_cpuid(reg) \
({ \
unsigned int __val; \
asm("mrc p15, 0, %0, c0, c0, " __stringify_1(reg)\
: "=r" (__val) \
: \
: "cc"); \
__val; \
})
{cond} p#,,Rd,cn,cm{,}
MRC 从协处理器移到ARM寄存器(L=1)
MCR 从ARM寄存器移到协处理器(L=0)
{cond} 两个字符的条件代码
p# 被请求得协处理器的惟一标识苻
计算一个常量并放到CP Opc域
Rd 是一个表达式计算ARM有效寄存器序号
cn 和cm 是计算有效协处理器寄存器CRn CRm序号
计算一个常量,并放到CP域
举例
MRC 2,5,R3,c5,c6 ;请求协处理器2 执行操作5 ,操作数为c5和c6,
; 传送结果到R3 (单次32位字)
MCR 6,0,R4,c6 ; 请求协处理器6执行操作0,操作数为R4
;结果送到c6
本例为请求协处理器P15,执行操作0,操作数为c0,c0结果送到%0(可用寄存器),操作数2为协处理器选项。
阅读(1174) | 评论(0) | 转发(0) |