2410 Init.s 中的几个问题

本文解析了ARM汇编语言中的关键指令,包括ASSERT:DEF:ENDIAN_CHANGE的含义及用法,ldrcc与cmp的区别,以及cpsr_cxsf的作用。通过具体的实例解释了这些指令如何在程序中应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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这类老的代码方式了,会有警告的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值