在ARM汇编语言程序中,子程序的调用一般是通过BL指令来实现的。在程序中,使用指令:BL+子程序名,即可完成子程序的调用。
该指令在执行时完成如下操作:
(1)将子程序的返回地址存放在连接寄存器LR中,同时将程序计数器PC指向子程序的入口点。(2)当子程序执行完毕需要返回调用处时,只需要将存放在LR中的返回地址重新复制给程序计数器PC即可。
(3)在调用子程序的同时,也可以完成参数的传递和从子程序返回运算的结果,通常可以使用寄存器R0~R3完成。
不同编译器编译的代码间的相互调用,要遵循AAPCS(ARM Architecture)。
以下是使用BL指令调用子程序的汇编语言源程序的基本结构:
AREA Init,CODE,READONLY
ENTRY
Start
LDR R0,=0x3FF5000
LDR R1,0xFF
STR R1,[R0]
LDR R0,=0x3FF5008
LDR R1,0x01
STR R1,[R0]
BL PRINT_TEXT
…
PRINT_TEXT
…
MOV PC,BL
…
END