public class Prog {
/* ----------------------------------------------
sumSquares(a,b): returns (a*a + b*b)
---------------------------------------------- */
public static int sumSquares( int a, int b )
{
return (a*a + b*b);
}
public static void main( )
{
int x, y, z;
x = 4; y = 7;
z = sumSquares(x, y);
}
}
|
main:
/* -------------------------------------------------
Pass parameter x by copying its value in reg r0
------------------------------------------------- */
movw r0, #:lower16:x
movt r0, #:upper16:x
ldr r0, [r0]
/* -------------------------------------------------
Pass parameter y by copying its value in reg r1
------------------------------------------------- */
movw r1, #:lower16:y
movt r1, #:upper16:y
ldr r1, [r1]
/* ---------------------------------------------------------
call z = sumSquares(x,y):
agreed inputs: r0 = x, r1 = y
|
/* ----------------------------------------------------------------
Function sumSquares(a,b):
agreed inputs: r0 = a, r1 = b
agreed return: r0 = return value
---------------------------------------------------------------- */
sumSquares:
// When sumSquares begin, we will have: r0 = a, r1 = b
|
DEMO: /home/cs255001/demo/asm/8-sub/reg-param1.s