Chinaunix首页 | 论坛 | 博客
  • 博客访问: 293015
  • 博文数量: 77
  • 博客积分: 1422
  • 博客等级: 上尉
  • 技术积分: 932
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-21 12:39
文章分类
文章存档

2011年(1)

2009年(3)

2008年(73)

我的朋友

分类: 系统运维

2008-09-18 10:46:36

以下是2440init.s中代码段开始的一段代码试着分析一下

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

没有elseif

阅读(1686) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~