2410 Init.s 中的几个问题

1.  ASSERT :DEF :ENDIAN_CHANGE--- What's mean?

 

ASSERT :DEF:ENDIAN_CHANGE
[ ENDIAN_CHANGE
    ASSERT  :DEF:ENTRY_BUS_WIDTH
    [ ENTRY_BUS_WIDTH=32
  b ChangeBigEndian    ;DCD 0xea000007
    ]
   
    [ ENTRY_BUS_WIDTH=16
  andeq r14,r7,r0,lsl #20  ;DCD 0x0007ea00
    ]
   
    [ ENTRY_BUS_WIDTH=8
  streq r0,[r0,-r10,ror #1] ;DCD 0x070000ea
    ]
|
    b ResetHandler 
]

1、ASSERT :DEF:ENDIAN_CHANGE

ASSERT 是断言伪指令,语法是:ASSERT +逻辑表达式

def 是逻辑伪操作符,格式为: :DEF:label,作用是:判断label是否定义过

2、四句蓝色的指令能且只能执行一句,并且前三句若执行跳转后处理程序的最后一句也是

b ResetHandler 

3、" [ " 相当于 if

      " | "相当于else

      " ] " 相当于endif

 

Q2:  ldrcc 与 cmp

ldrcc是一个条件指令,当没有设c标志时执行ldr,否则相当于一条nop
cmp r0, r1
ldrcc r5,#1
ldrcc r6,#2
ldrcc r7,#3
相当于

if(r0 <r1){
r5=1;
r6=2;
r7=3;
}

 

Q3: cpsr_cxsf

[嵌入式开发]启动代码里cpsr_cxsf的意思

http://www.52rd.com/Blog/Detail_RD.Blog_zjhfqq_7843.html

 zjhfqq 发表于 2007-4-26 23:41:00

在启动代码里,我们会看到如 msr cpsr_cxsf,r0这样的代码。
请问CPSR_cxsf是什么意思? 

用MSR指令对PSR进行操作的时候,为了设定操作的范围,避免对某些位的操作而影响其他部分而定义了这几个FLAG。

具体指令如下:
MSR{cond} <psr>_<fields>, #immed_8r
MSR{cond} <psr>_<fields>, Rm

<fields>的具体含义如下:
specifies the field or fields to be moved. <fields> can be one or more of:

c - control field mask byte (PSR[7:0])
x - extension field mask byte (PSR[15:8])
s - status field mask byte (PSR[23:16)
f - flags field mask byte (PSR[31:24]).

在ADS文档《ADS Assembler Guide》里面,你搜索MSR指令,可以找到详细的说明。
cpsr_cxsf相当于cpsr_all,不推荐再用cpsr_all这类老的代码方式了,会有警告的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值