arm9汇编 跳转指令解决思路
arm9汇编 跳转指令
我在写汇编的代码时遇到了问题,汇编是用的ARM9的汇编
汇编代码调用C函数,C函数的地址已经计算得到,保存在R0寄存器中,但是BL R0指令,编译通不过。
用BX R0虽然能编译通过,但是没有保存下一条汇编指令的地址,程序流程不能正常进行下去。用B R0一样也不行,
MOV PC,R0这类指令好像也一样不能保存新的LR。有什么指令可以跳转到R0寄存器指向的地址,同时保存LR吗?
我想到了一个比较笨的方法,就是计算BX R0下一条汇编的地址,在BX R0之前保存到LR中,相当于手动保存新的LR。
有没有其他的方法呢?
------解决方案--------------------
bl后面直接跟函数名,不能跟寄存器。
你可以使用blx r0试试。
------解决方案--------------------
刚才我查了下,arm920T是v4t的指令集,你只能用bl label这种跳转方式。blx要v5及以上才能提供。
我在写汇编的代码时遇到了问题,汇编是用的ARM9的汇编
汇编代码调用C函数,C函数的地址已经计算得到,保存在R0寄存器中,但是BL R0指令,编译通不过。
用BX R0虽然能编译通过,但是没有保存下一条汇编指令的地址,程序流程不能正常进行下去。用B R0一样也不行,
MOV PC,R0这类指令好像也一样不能保存新的LR。有什么指令可以跳转到R0寄存器指向的地址,同时保存LR吗?
我想到了一个比较笨的方法,就是计算BX R0下一条汇编的地址,在BX R0之前保存到LR中,相当于手动保存新的LR。
有没有其他的方法呢?
------解决方案--------------------
bl后面直接跟函数名,不能跟寄存器。
你可以使用blx r0试试。
------解决方案--------------------
刚才我查了下,arm920T是v4t的指令集,你只能用bl label这种跳转方式。blx要v5及以上才能提供。