Test Program #1 Source Code

/*
 * neil_1.c
 * code generation demo
 */
#define uchr unsigned char
 
uchr one, two, three, three_a;
 
void main(void)
{   one     = 1;     /* init globals (same data) */
    two     = 1;
    three   = 1;
    three_a = 1;
}

Code Listing From the COSMIC Software Compiler

 Notes:
 1. code size: 14-0+1=15 bytes
 2. notice that data is only loaded into the b register only once (line 7)
   1                     ; C Compiler for MC68HC11 [COSMIC Software]
   2                     ; Version V4.0g - 16 Apr 1997
   4                     ; 9 void main(void)
   4                     ; 10 {   one     = 1; /* init globals (with same data) */
   5  0000               _main:
   7  0000 c601          	ldab	#1
   8  0002 f70003        	stab	_one
   9                     ; 11     two     = 1;
  10  0005 f70002        	stab	_two
  11                     ; 12     three   = 1;
  12  0008 f70001        	stab	_three
  13                     ; 13     three_a = 1;
  14  000b f70000        	stab	_three_a
  15                     ; 14 }
  16  000e 39            	rts	
  17                     	xdef	_main
  18                     	switch	.bss
  19  0000               _three_a:
  20  0000 00            	ds.b	1
  21                     	xdef	_three_a
  22  0001               _three:
  23  0001 00            	ds.b	1
  24                     	xdef	_three
  25  0002               _two:
  26  0002 00            	ds.b	1
  27                     	xdef	_two
  28  0003               _one:
  29  0003 00            	ds.b	1
  30                     	xdef	_one
  31                     	end

Code Listing From a Competing Compiler

 Notes:
 1. Code Size: 20-0+1 = 21 bytes
 2. five different products produced almost the same output
 3. the compiler's optimizer switch was enabled
 4. notice that the b register is repeatedly loaded with the same value
    (lines 22 25 28 31)
			    1	$	lbra,hc11
			    2		defseg	c_text,class=CODE
			    3		defseg	c_const,class=CODE
			    4		defseg	c_strings,class=CODE
			    5		defseg	c_data,class=CODE
			    6		defseg	c_bss,class=DATA
			    7		defseg	c_rdata,class=CODE
			    8		defseg	c_rbss,class=PAGE0
			    9		defseg	c_temp,class=PAGE0,overlaid
			   10		defseg	c_vectors,start=$FFC0,overlaid
			   11		seg c_temp
0000& (0004)		   12	ctemp	rmb	4
			   13		seg c_rbss
			   14		seg	c_text
			   15		global	_main
			   16		signat	_main,24
			   17		global	_one
			   18		global	_two
			   19		global	_three
			   20		global	_three_a
			   21	_main
0000& C6 01 		   22		ldab	#1
0002& F7 0000& 		   23		stab	_one
			   24	;neil_1.c: 11: two = 1;
0005& C6 01 		   25		ldab	#1
0007& F7 0003& 		   26		stab	_two
			   27	;neil_1.c: 12: three = 1;
000A& C6 01 		   28		ldab	#1
000C& F7 0001& 		   29		stab	_three
			   30	;neil_1.c: 13: three_a = 1;
000F& C6 01 		   31		ldab	#1
0011& F7 0002& 		   32		stab	_three_a
			   33	;neil_1.c: 14: }
0014& 39 		   34		rts
			   35		seg	c_bss
			   36	_one
0000& (0001)		   37		rmb	1
			   38	_three
0001& (0001)		   39		rmb	1
			   40	_three_a
0002& (0001)		   41		rmb	1
			   42	_two
0003& (0001)		   43		rmb	1
			   44	
			   45		end
Back to Home
Neil Rieck
Kitchener - Waterloo - Cambridge, Ontario, Canada.