ARM汇编初学者,帮忙看两段简单的汇编代码

zhouxiangbai 2012-02-01 09:24:58
第一段汇编代码:
==================================================================
;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寄存器中。不知道我理解的是否正确?
...全文
107 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
卓卓有余 2012-02-01
  • 打赏
  • 举报
回复
第一段 是设置协处理器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位吧)清零,其他不变。
zhouxiangbai 2012-02-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 panzhx 的回复:]

第二段
ADR r0, CM_FCLKEN_CORE ;将寄存器CM_FCLKEN_CORE的地址赋值r0
LDR r1, [r0] ;读取寄存值到r1
BIC r1, r1, CM_FCLKEN1_CORE_VALU……
[/Quote]谢谢!

BIC―――――位清除指令
指令格式:
BIC{cond}{S} Rd,Rn,operand2
BIC指令将Rn 的值与操作数operand2 的反码按位逻辑”与”,结果存放到目的寄存器Rd 中。指令示例:BIC R0,R0,#0x0F ;将R0最低4位清零,其余位不变。

原来《arm体系结构与编程》中关于BIC指令的解释是错误的,它说是“将Rn的值取反,再与操作说operand2进行逻辑与运算,结果存放到Rd”。
这导致我对第二段汇编代码的理解产生错误,看来那本书有很多错误的地方,需要小心啊!

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧