接着上面的内容,继续解释,对于汇编中这样的代码:
第一种:
ldr pc, 标号1 ...... 标号1:.word 标号2 ...... 标号2: ......(具体要执行的代码)
或者是,
第二种:
ldr pc, 标号1 ...... 标号1:.word XXX(C语言中某个函数的函数名)
的意思就是,将地址为标号1中内容载入到pc中。
而地址为标号1中的内容,就是标号2。
TEXT_BASE=0x33D00000
所以上面第一种的意思:
就很容易看出来,就是把标号2这个地址值,给pc,即实现了跳转到标号2的位置执行代码,
就相当于调用一个函数,该函数名为标号2.
第二种的意思,和上面类似,是将C语言中某个函数的函数名,即某个地址值,给pc,实现调用C中对应的那个函数。
两种做法,其含义用C语言表达,其实很简单:
PC = *(标号1) = 标号2
例 3.1. 汇编中的ldr加标号实现函数调用 示例
举个例子就是:
第一种:
...... ldr pc, _software_interrupt ...... _software_interrupt: .word software_interrupt ...... software_interrupt: get_bad_stack bad_save_user_regs bl do_software_interrupt
就是实现了将标号1,_software_interrupt,对应的位置中的值,标号2,software_interrupt,给pc,即实现了将pc掉转到software_interrupt的位置,即实现了调用函数software_interrupt的效果。
第二种:
ldr pc, _start_armboot _start_armboot: .word start_armboot
含义就是,将标号1,_start_armboot,所对应的位置中的值,start_armboot给pc,即实现了调用函数start_armboot的目的。
其中,start_armboot是C语言文件中某个C语言的函数。