我在使用跳转到标签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:
答案 0 :(得分:3)
数据和代码之间存在差异 - 代码包含执行的指令,而代码使用 数据。根本区别在于数据(通常)无法执行。
因此,当开头的房间用作数据的存储空间时,代码需要跳过数据,否则数据将被解释为代码,这很可能导致非法指令和崩溃。 / p>
当然,如果数据位于当前程序计数器之前(跳转之后),代码可以访问数据 - 从代码的角度来看,如果数据在代码之前或之后定位,则代码没有区别。
答案 1 :(得分:2)
它只是分支了一些数据 - 代码可以使用__start
或arm926ejs_reset
作为基地址通过索引地址获取此数据。