リスト8 リスト9 リスト10 リスト11 リスト12


〔リスト8〕非定数による初期化例(test52.c)
	#include <stdio.h>
	void Tbl(int param);
	int main(void)
	{
	 int data;
	 printf("input tbl data ....:");
	 scanf("%d",&data);
	 Tbl(data);
	 return;
	}
	void Tbl(int param)
	{
	 int tbl1[3] = {param,param*10,param*100};
	 return;
	}


〔リスト9〕test52.cから生成されたアセンブラ(test52.s)
	 .file "test52.c"
	 .version "01.01"
	gcc2_compiled.:
	.section .rodata
	.LC0:
	 .string "input tbl data ....:"
	.LC1:
	 .string "%d"
	.text
	 .align 4
	.globl main
	 .type  main,@function
	main:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $24,%esp
	 addl $-12,%esp
	 pushl $.LC0
	 call printf
	 addl $16,%esp
	 addl $-8,%esp
	 leal -4(%ebp),%eax
	 pushl %eax
	 pushl $.LC1
	 call scanf
	 addl $16,%esp
	 addl $-12,%esp
	 movl -4(%ebp),%eax
	 pushl %eax
	 call Tbl
	 addl $16,%esp
	 jmp .L2
	 .p2align 4,,7
	.L2:
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe1:
	 .size  main,.Lfe1-main
	 .align 4
	.globl Tbl
	 .type  Tbl,@function
	Tbl:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $40,%esp
	 movl 8(%ebp),%eax
	 movl %eax,-24(%ebp)
	 movl 8(%ebp),%edx
	 movl %edx,%eax
	 sall $2,%eax
	 addl %edx,%eax
	 leal (%eax,%eax),%edx
	 movl %edx,-20(%ebp)
	 movl 8(%ebp),%edx
	 movl %edx,%eax
	 sall $2,%eax
	 addl %edx,%eax
	 leal 0(,%eax,4),%edx
	 addl %edx,%eax
	 leal 0(,%eax,4),%edx
	 movl %edx,-16(%ebp)
	 movl -24(%ebp),%eax
	 movl %eax,-12(%ebp)
	 movl -20(%ebp),%eax
	 movl %eax,-8(%ebp)
	 movl -16(%ebp),%eax
	 movl %eax,-4(%ebp)
	 jmp .L3
	 .p2align 4,,7
	.L3:
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe2:
	 .size  Tbl,.Lfe2-Tbl
	 .ident "GCC: (GNU) 2.95.3 20010315 (release)"


〔リスト10〕非定数による初期化だが,最適化によって定数として扱われる例(test53.c)
	#include <stdio.h>
	void Tbl(int param);
	int main(void)
	{
	 Tbl(100);
	 return;
	}
	void Tbl(int param)
	{
	 int tbl1[3] = {param,param*10,param*100};
	 return;
	}


〔リスト11〕test53.cから最適化なしのオプションで生成されたアセンブラ(test53.s)
	 .file "test53.c"
	 .version "01.01"
	gcc2_compiled.:
	.text
	 .align 4
	.globl main
	 .type  main,@function
	main:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $8,%esp
	 addl $-12,%esp
	 pushl $100
	 call Tbl
	 addl $16,%esp
	 jmp .L2
	 .p2align 4,,7
	.L2:
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe1:
	 .size  main,.Lfe1-main
	 .align 4
	.globl Tbl
	 .type  Tbl,@function
	Tbl:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $40,%esp
	 movl 8(%ebp),%eax
	 movl %eax,-24(%ebp)
	 movl 8(%ebp),%edx
	 movl %edx,%eax
	 sall $2,%eax
	 addl %edx,%eax
	 leal (%eax,%eax),%edx
	 movl %edx,-20(%ebp)
	 movl 8(%ebp),%edx
	 movl %edx,%eax
	 sall $2,%eax
	 addl %edx,%eax
	 leal 0(,%eax,4),%edx
	 addl %edx,%eax
	 leal 0(,%eax,4),%edx
	 movl %edx,-16(%ebp)
	 movl -24(%ebp),%eax
	 movl %eax,-12(%ebp)
	 movl -20(%ebp),%eax
	 movl %eax,-8(%ebp)
	 movl -16(%ebp),%eax
	 movl %eax,-4(%ebp)
	 jmp .L3
	 .p2align 4,,7
	.L3:
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe2:
	 .size  Tbl,.Lfe2-Tbl
	 .ident "GCC: (GNU) 2.95.3 20010315 (release)"


〔リスト12〕test53.cから-O3オプションで最適化されて生成されたアセンブラ(test54.s)
	 .file "test54.c"
	 .version "01.01"
	gcc2_compiled.:
	.text
	 .align 4
	.globl Tbl
	 .type  Tbl,@function
	Tbl:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $24,%esp
	 movl 8(%ebp),%eax
	 movl %eax,-12(%ebp)
	 leal (%eax,%eax,4),%eax
	 leal (%eax,%eax),%edx
	 movl %edx,-8(%ebp)
	 leal (%eax,%eax,4),%eax
	 sall $2,%eax
	 movl %eax,-4(%ebp)
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe1:
	 .size  Tbl,.Lfe1-Tbl
	 .align 4
	.globl main
	 .type  main,@function
	main:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $8,%esp
	 addl $-12,%esp
	 pushl $100
	 call Tbl
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe2:
	 .size  main,.Lfe2-main
	 .ident "GCC: (GNU) 2.95.3 20010315 (release)"