当前位置: 代码迷 >> 汇编语言 >> ARM汇编菜鸟,帮忙看两段简单的汇编代码
  详细解决方案

ARM汇编菜鸟,帮忙看两段简单的汇编代码

热度:4729   发布时间:2013-02-26 00:00:00.0
ARM汇编初学者,帮忙看两段简单的汇编代码
第一段汇编代码:
==================================================================
;set secure or nonsecure vector base address registor to default
MOV r0, #0 ;vector base address
MCR p15, #0, r0, c12, c0, #0 ;set vector base address
==================================================================
我理解这段代码的作用是:将协处理器p15的c12寄存器赋值为0。但书上说c12寄存器是保留的寄存器,没什么特殊用途。
请问:上述代码的真正用途是什么?


第二段汇编代码:
==================================================================
CM_FCLKEN_CORE
  .long 0x48004A00

CM_FCLKEN1_CORE_VALUE .equ 0x3E000

ADR r0, CM_FCLKEN_CORE
LDR r1, [r0]
BIC r1, r1, CM_FCLKEN1_CORE_VALUE
STR r1, [r0]
==================================================================
我理解这段代码的作用是,将CM_FCLKEN_CORE寄存器的值取反,并与CM_FCLKEN1_CORE_VALUE按位与运算,最后将结果
写回CM_FCLKEN_CORE寄存器中。不知道我理解的是否正确?

------解决方案--------------------------------------------------------
第一段 是设置协处理器p15 c12, c0为零,应该是使中断向量映射到地址0处。这个要看看协处理器寄存器介绍了,在那本《arm体系结构与编程》里有介绍的,具体忘记了。

第二段
ADR r0, CM_FCLKEN_CORE ;将寄存器CM_FCLKEN_CORE的地址赋值r0
LDR r1, [r0] ;读取寄存值到r1
BIC r1, r1, CM_FCLKEN1_CORE_VALUE;将r1中的(0x3E000里面为1的位)清零
STR r1, [r0] ;再次写给寄存器

实际作用是 寄存器CM_FCLKEN_CORE 中的 0x3E000-对应0x3e的位(应该是13~17位吧)清零,其他不变。
  相关解决方案