我有一个问题,支持分支指令B arm926ejs_reset_handler
跳转到标签arm926ejs_reset_handler:
,因此忽略之间的代码。我不知道为什么有人会这样做?忽略重要数据的分支指令?
和一些额外的解释。标签__start:
是该程序的入口点。分支指令忽略的行是启动ISROM应该在启动时获得的参数。 但是,如果我们跳过它们,启动ISROM如何获得这些参数?它对我没有任何逻辑。
__start:
arm926ejs_reset:
B arm926ejs_reset_handler
.word 0x41676d69
.word 0,0,0,0,0
image_type:
.word 0x0000000A
sizeOfPermanentCode:
.word (__image_size)
.word 0,0
bootparameter:
.word 0
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
arm926ejs_reset_handler:
这就是分支所做的事情,它在某处分支或跳转。就像C中的goto一样。如果它没有这样工作,那将会非常糟糕,你不能编写程序。程序柜台与它可以访问的内容完全无关。其他指令集使用跳转而不是分支,在这种情况下两者意味着同样的事情,根据定义,代码执行分支或跳转到另一个路径,从而留下它所在的路径。 – 2012-03-02 14:38:14
也阅读你的手臂手册,以了解前几个/许多取决于体系结构,内存(字)位置是重置向量,所以为了避免问题,您必须使用分支到某处或ldr pc,某些东西要分支到某处为了正确使用异常表。这正是这个代码正在做的。 – 2012-03-02 14:40:14
作为一个入口点只与加载程序相关(例如加载linux二进制应用程序的操作系统),这似乎是具有异常表的启动代码,并且一旦将此二进制文件置于ram/rom启动时启动标签无关处理器。 – 2012-03-02 14:42:12