#include void one_two_three(int n){ switch(n) { case 1: printf("one"); break; case 2: printf("two"); break; case 3: printf("one"); break; case 4: printf("four"); break; case 5: printf("four"); break; case 6: printf("four"); break; case 7: printf("four"); break; }} int main() { one_two_three(2); return 0; } .file "test.c" .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "one" .LC1: .string "two" .LC2: .string "four" .LC3: .string "five" .LC4: .string "six" .LC5: .string "seven" .text .p2align 4,,15 .globl one_two_three .type one_two_three, @function one_two_three: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax cmpl $7, %eax ja .L11 jmp *.L10(,%eax,4) .section .rodata .align 4 .align 4 .L10: .long .L11 .long .L5 .long .L4 .long .L5 .long .L6 .long .L7 .long .L8 .long .L9 .text .p2align 4,,7 .L11: popl %ebp ret .p2align 4,,7 .L5: movl $.LC0, 8(%ebp) popl %ebp .p2align 4,,5 jmp printf .L4: movl $.LC1, 8(%ebp) popl %ebp jmp printf .L9: movl $.LC5, 8(%ebp) popl %ebp jmp printf .L8: movl $.LC4, 8(%ebp) popl %ebp jmp printf .L7: movl $.LC3, 8(%ebp) popl %ebp jmp printf .L6: movl $.LC2, 8(%ebp) popl %ebp jmp printf .size one_two_three, .-one_two_three .p2align 4,,15 .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $4, %esp movl $2, (%esp) call one_two_three addl $4, %esp xorl %eax, %eax popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .ident "GCC: (GNU) 4.1.3 20070629 (prerelease) (Debian 4.1.2-13)" .section .note.GNU-stack,"",@progbits