Reputation: 109
I have a C code that calls a function defined in ARM Assembly. Two Parameters have to be passed.
If the function call looks like this:
functionName(a, b)
the registers x0
and x1
hold these values in which order? Is it x0
holds a
and x1
holds b
or the other way round?
Upvotes: 1
Views: 4613
Reputation: 71566
It took longer to ask the question than to just try it.
extern void bar ( unsigned int, unsigned int );
void foo ( void )
{
bar(5,7);
}
compile then disassemble
traditional arm
00000000 <foo>:
0: e3a00005 mov r0, #5
4: e3a01007 mov r1, #7
8: eafffffe b 0 <bar>
aarch64
0000000000000000 <foo>:
0: 528000e1 mov w1, #0x7 // #7
4: 528000a0 mov w0, #0x5 // #5
8: 14000000 b 0 <bar>
c: d503201f nop
msp430
00000000 <foo>:
0: 3e 40 07 00 mov #7, r14 ;#0x0007
4: 3f 40 05 00 mov #5, r15 ;#0x0005
8: b0 12 00 00 call #0x0000
c: 30 41 ret
pdp-11
00000000 <_foo>:
0: 1166 mov r5, -(sp)
2: 1185 mov sp, r5
4: 15e6 0007 mov $7, -(sp)
8: 15e6 0005 mov $5, -(sp)
c: 09f7 fff0 jsr pc, 0 <_foo>
10: 65c6 0004 add $4, sp
14: 1585 mov (sp)+, r5
16: 0087 rts pc
Upvotes: 5