; void swap (int*, int*); ; void main (void) ; { ; int x = 2, y = 3; ; swap (&x, &y); /* swap x and y */ ; } ; void swap (int *a, int *b) ; { ; int temp; ; temp = *a; ; *a = *b; ; *b = temp; ; } AREA SwapVal, CODE, READONLY ENTRY MOV sp, #0x00000000 MOV fp, #0xFFFFFF00 B main swap PUSH {fp} MOV fp, sp SUB sp, sp, #4 LDR r1, [fp, #4] ; get address of parameter a LDR r2, [r1] ; get value of parameter a STR r2, [fp, #-4] ; store parameter a in temp in stack frame LDR r0, [fp, #8] ; get address of parameter b LDR r3, [r0] ; get value of parameter b STR r3, [r1] ; store parameter b in parameter a LDR r3, [fp, #-4] ; get temp from stack frame STR r3, [r0] ; store temp in b MOV sp, fp ; Collapse stack frame; restore sp POP {fp} MOV pc, lr main PUSH {fp} MOV fp, sp SUB sp, sp, #8 ADR r6, x ; store x on the STR r6, [fp, #-4] ; store &x on the stack ADR r6, y STR r6, [fp, #-8] ; store &y on the stack BL swap MOV sp, fp ; Collapse frame; restore sp POP {fp} Stop B Stop x DCD 2 y DCD 3 END