next up previous contents index

[ENGN3213 Home]

Pointers

  You know that C uses pointers to pass parameters by reference. Consider the following C program from CLAB7:

/*     clab73c.c    */

#define number 12

int adder(int x, int *py)
{
     return x + *py;
}

int main()
{
  int a, b, c;
  a = 1; b = number;
  c = adder(a, &b);
}
The GCC assembler produces the following assembly language code (with a few of my comments inserted):
68K GAS  clab73c.s 			page 1


   1               		.file	"clab73c.c"
   2               	gcc2_compiled.:
   3               	__gnu_compiled_c:
   4               	.text
   5               		.even
   6               	.globl adder
   7               	adder:
   8 0000 4E56 0000 		link.w %a6,#0         <-- zero-length stack frame created
   9 0004 206E 000C 		move.l 12(%a6),%a0    <-- address &b 
  10 0008 222E 0008 		move.l 8(%a6),%d1     <-- value a
  11 000c D290      		add.l (%a0),%d1       <-- value of b added to a
  12 000e 2001      		move.l %d1,%d0        <-- value returned in D0
  13 0010 6000 0002 		jbra .L1
  14               		.even
  15               	.L1:
  16 0014 4E5E      		unlk %a6              <-- stack frame collapsed
  17 0016 4E75      		rts
  18               		.even
  19               	.globl main
  20               	main:
  21 0018 4E56 FFF4 		link.w %a6,#-12       <-- stack frame for a,b,c set up 
  22 001c 4EB9 0000 		jsr __main
  22      0000 
  23 0022 7201      		moveq.l #1,%d1
  24 0024 2D41 FFFC 		move.l %d1,-4(%a6)    <-- a=1;
  25 0028 720C      		moveq.l #12,%d1
  26 002a 2D41 FFF8 		move.l %d1,-8(%a6)    <-- b=12
  27 002e 200E      		move.l %a6,%d0
  28 0030 5180      		subq.l #8,%d0
  29 0032 2F00      		move.l %d0,-(%sp)     <-- &b pushed onto stack
  30 0034 2F2E FFFC 		move.l -4(%a6),-(%sp) <-- a pushed onto stack
  31 0038 4EB9 0000 		jsr adder
  31      0000 
  32 003e 508F      		addq.l #8,%sp         <-- clean up stack
  33 0040 2D40 FFF4 		move.l %d0,-12(%a6)
  34               	.L2:
  35 0044 4E5E      		unlk %a6              <-- stack frame collapsed
  36 0046 4E75      		rts

68K GAS  clab73c.s 			page 2


DEFINED SYMBOLS
           clab73c.s:2      e0:00000000 gcc2_compiled.
           clab73c.s:3      e0:00000000 __gnu_compiled_c
                               e0:00000000 .text
                               e1:00000048 .data
                               e2:00000048 .bss
           clab73c.s:7      e0:00000000 adder
           clab73c.s:20     e0:00000018 main

UNDEFINED SYMBOLS
__main

Note:


next up previous contents index

[ENGN3213 Home]

ANU Engineering - ENGN3213