технически это зависит от компилятора, но для ARM некоторые из них соответствуют одному и тому же ABI. Но вы можете просто спросить компилятор, и он даст вам правильный ответ. Написать программу тестирования программы
extern unsigned int tlb_ram_data_register_18_1 ( unsigned int );
unsigned int fun ( void )
{
unsigned int way0;
for(way0 = 0x0;way0 <= 0xFF ; way0++)
{
tlb_ram_data_register_18_1(way0);
}
return(5);
}
На данный момент я создаю компилятор aarch64, но сейчас вот как выглядит рука, вы увидите нечто похожее с любой целью.
Я использую текущую версию GCC
00000000 <fun>:
0: e92d4010 push {r4, lr}
4: e3a04000 mov r4, #0
8: e1a00004 mov r0, r4
c: e2844001 add r4, r4, #1
10: ebfffffe bl 0 <tlb_ram_data_register_18_1>
14: e3540c01 cmp r4, #256 ; 0x100
18: 1afffffa bne 8 <fun+0x8>
1c: e3a00005 mov r0, #5
20: e8bd4010 pop {r4, lr}
24: e12fff1e bx lr
не так очевидно, но в качестве параметра функции используется r0
также обратите внимание, что r0 используется для возвращаемого значения
unsigned int fun ( unsigned int x )
{
return(x+1);
}
00000000 <fun>:
0: e2800001 add r0, r0, #1
4: e12fff1e bx lr
r0 является первым / единственным параметром и также используется для возврата.
ааа, у меня есть удобный acc64 gcc
0000000000000000 <fun>:
0: 11000400 add w0, w0, #0x1
4: d65f03c0 ret
w0 на пути и на выходе. Вы можете попробовать это снова с 64-битным параметром и посмотреть, изменится ли это.