为什么R4不会被func1()保留,如何修改__asm int func1(int arg1, int arg2){ MOVS r4, r1 ; r4 = arg2 ; 1st argument already in r0 MOVS r1, #4 ; 2nd argument for func2 MOVS r2, #5 ; 3rd argument for func2 MOVS r3, #6 ; 4th argument for func2 BL func2 ; call func2 ADDS r0, r0, r4 ; return value in r0 … }__asm int func2(int arg1, int arg2, int arg3, int arg4){ MULS r0, r1, r0 ; r0 = arg1 * arg2 MULS r0, r2, r0 ; r0 = r0 * arg3 MULS r0, r3, r0 ; r0 = r0 * arg4 BX lr ; return value in r0 }
时间: 2024-03-18 10:44:21 浏览: 157
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
R4不会被保留是因为在func2函数中,只有r0被用来返回结果,其他寄存器的值都不会被使用。如果你想让R4被保留下来并在后续的代码中使用它,可以在func2函数中将R4作为第五个参数传递并在相应的位置使用它。
修改后的代码如下:
__asm int func1(int arg1, int arg2){
MOVS r4, r1 ; r4 = arg2 ; 1st argument already in r0
MOVS r1, #4 ; 2nd argument for func2
MOVS r2, #5 ; 3rd argument for func2
MOVS r3, #6 ; 4th argument for func2
BL func2 ; call func2
ADDS r0, r0, r4 ; return value in r0 …
}
__asm int func2(int arg1, int arg2, int arg3, int arg4, int arg5){
MULS r0, r1, r0 ; r0 = arg1 * arg2
MULS r0, r2, r0 ; r0 = r0 * arg3
MULS r0, r3, r0 ; r0 = r0 * arg4
ADDS r0, r0, r4 ; r0 = r0 + arg5
BX lr ; return value in r0
}
在这个修改后的代码中,func2函数接受五个参数,其中第五个参数是R4的值。在函数中,我们将R4的值添加到计算结果中,并将结果存储在R0中,以便在func1函数中使用。
阅读全文