next up previous contents index

[ENGN3213 Home]

Local Variables and Stack Frames

    Consider the following C program from CLAB7:

/*      clab71c.c (Clements, page 145) */

int main() {
           int i,j;
           i = 1;
           j = 2;        
           return i + j;
}
This simple program has two integer local variables, i, j. The GCC assembler produces the following assembly language code (with a few of my comments inserted):
68K GAS  clab71c.s 			page 1


   1               		.file	"clab71c.c"
   2               	gcc2_compiled.:
   3               	__gnu_compiled_c:
   4               	.text
   5               		.even
   6               	.globl main
   7               	main:
   8 0000 4E56 FFF8 		link.w %a6,#-8            <-- stack frame for i, j set up 
   9 0004 2F02      		move.l %d2,-(%sp)
  10 0006 4EB9 0000 		jsr __main
  10      0000 
  11 000c 7401      		moveq.l #1,%d2
  12 000e 2D42 FFFC 		move.l %d2,-4(%a6)        <-- i=1;
  13 0012 7402      		moveq.l #2,%d2
  14 0014 2D42 FFF8 		move.l %d2,-8(%a6)        <-- j=2;
  15 0018 222E FFFC 		move.l -4(%a6),%d1
  16 001c D2AE FFF8 		add.l -8(%a6),%d1         <-- i+j
  17 0020 2001      		move.l %d1,%d0            <-- return i+j;
  18 0022 6000 0002 		jbra .L1
  19               		.even
  20               	.L1:
  21 0026 242E FFF4 		move.l -12(%a6),%d2
  22 002a 4E5E      		unlk %a6                  <-- stack frame collapsed
  23 002c 4E75      		rts

68K GAS  clab71c.s 			page 2


DEFINED SYMBOLS
           clab71c.s:2      e0:00000000 gcc2_compiled.
           clab71c.s:3      e0:00000000 __gnu_compiled_c
                               e0:00000000 .text
                               e1:0000002e .data
                               e2:0000002e .bss
           clab71c.s:7      e0:00000000 main

UNDEFINED SYMBOLS
__main

Don't let the apparent complexity confuse you; note that:


next up previous contents index

[ENGN3213 Home]

ANU Engineering - ENGN3213