1

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:
4

2 回答 2

3

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

所以一开始的房间作为数据的存储空间,代码需要跳过数据,否则数据会被解释为代码,很可能导致非法指令和崩溃。

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

于 2012-03-02T09:55:57.610 回答
2

它只是在一些数据__start上进行分支 - 代码可以通过使用或arm926ejs_reset作为基地址的索引寻址来获取这些数据。

于 2012-03-02T09:40:47.327 回答