概述
void getReg( )
{
//根据armcc文档,寄存器不能直接访问,间接访问如下:
register int r_r0 __asm("r0");
register int r_r1 __asm("r1");
register int r_r2 __asm("r2");
register int r_r3 __asm("r3");
register int r_r4 __asm("r4");
register int r_r5 __asm("r5");
register int r_r6 __asm("r6");
register int r_r7 __asm("r7");
register int r_r8 __asm("r8");
register int r_r9 __asm("r9");
register int r_r10 __asm("r10");
register int r_r11 __asm("r11");
register int r_r12 __asm("r12");
__asm{
MOV reg_r[0],r_r0
MOV reg_r[1],r_r1
MOV reg_r[2],r_r2
MOV reg_r[3],r_r3
MOV reg_r[4],r_r4
MOV reg_r[5],r_r5
MOV reg_r[6],r_r6
MOV reg_r[7],r_r7
MOV reg_r[8],r_r8
MOV reg_r[9],r_r9
MOV reg_r[10],r_r10
MOV reg_r[11],r_r11
MOV reg_r[12],r_r12
}
//获取sp lr pc寄存器信息,是armcc定义的
__asm{
MOV reg_r[13], __current_sp()
MOV reg_r[14], __return_address()
MOV reg_r[15], __current_pc()
}
u32 r0,r1,r2;
//MRS命令将cpsr aspr等信息保存寄存器
__asm{
MRS r0,cpsr
MOV reg_r[16],r0
MRS r1,apsr
MOV reg_r[17],r1
MRS r2,spsr
MOV reg_r[18],r2
}
}
还可以利用S文件获取:
PRESERVE8
THUMB
AREA |.text|, CODE, READONLY
EXPORT dumpReg
IMPORT buf
dumpReg PROC
push {r0}
cpsid i
ldr r0, =buf
add r0, r0, #4
stmia r0!, {r1-r12}
stmia r0!, {sp}
stmia r0!, {lr}
mov r1, pc
str r1, [r0], #4
mrs r1, cpsr
str r1, [r0], #4
mrs r1, spsr
pop {r0}
push {r1}
ldr r1, =regbuf
str r0, [r1]
pop {r1}
bx lr
cpsie i
ENDP
END
//注释:是将寄存器信息保存到int类型的buf数组里面
最后
以上就是成就小伙为你收集整理的arm架构下读取寄存器信息的全部内容,希望文章能够帮你解决arm架构下读取寄存器信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复