汇编语言:子程序呼叫与无条件转移指令
1、最基本的无条件转移指令有两条:
B Label ;转移到Label处对应的地址
BL reg ;转移到有寄存器reg给出的地址
2、呼叫子程序时,需要保存返回地址,正点的指令是:
BL Label ;转移到Label处对应的地址,并且把转移前的下条指令地址保存到LR
BLX reg ;转移到由寄存器reg给出的地址,根据REG的LSB切换处理器的状态,并且把转移前的下条指令地址保存到LR
注意:、使用BLX要注意,其改变状态的功能。因此确保reg的lsb必须为1,以确保不会进入ARM状态。
3、以PC为目的寄存器的MOV和LDR指令也可以实现转移,常见的形式有:
MOV PC, R0 ; 转移地址由R0给出
LDR PC, [R0] ; 转移地址存储在R0所指向的存储器中
POP {..., PC] ; 把返回地址以弹出堆栈的方式送给PC,从而实现转移
LDMIA SP!, {..., PC ; POP另一种等效写法
注意:使用这些方式必须保证送给PC的值是奇数(LSB=1) |