分支指令忽略重要数据?

时间:2012-03-02 09:35:51

标签: assembly arm startupscript

我在使用跳转到标签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:

2 个答案:

答案 0 :(得分:3)

数据和代码之间存在差异 - 代码包含执行的指令,而代码使用 数据。根本区别在于数据(通常)无法执行。

因此,当开头的房间用作数据的存储空间时,代码需要跳过数据,否则数据将被解释为代码,这很可能导致非法指令和崩溃。 / p>

当然,如果数据位于当前程序计数器之前(跳转之后),代码可以访问数据 - 从代码的角度来看,如果数据在代码之前或之后定位,则代码没有区别。

答案 1 :(得分:2)

它只是分支了一些数据 - 代码可以使用__startarm926ejs_reset作为基地址通过索引地址获取此数据。