GAS LISTING /tmp/ccFI7VGr.s page 1 1 .file "factorial.c" 2 .text 3 .Ltext0: 4 .globl factorial 5 .type factorial, @function 6 factorial: 7 .LFB0: 8 .file 1 "factorial.c" 1:factorial.c **** // To generate an assembly listing from this source code, do: 2:factorial.c **** // gcc -c -g -Wa,-alh,-L factorial.c > factorial.s 3:factorial.c **** 4:factorial.c **** #include 5:factorial.c **** 6:factorial.c **** int factorial(int n) { 9 .loc 1 6 0 10 .cfi_startproc 11 0000 55 pushq %rbp 12 .LCFI0: 13 .cfi_def_cfa_offset 16 14 .cfi_offset 6, -16 15 0001 4889E5 movq %rsp, %rbp 16 .LCFI1: 17 .cfi_def_cfa_register 6 18 0004 4883EC10 subq $16, %rsp 19 0008 897DFC movl %edi, -4(%rbp) 7:factorial.c **** if (n == 1) { 20 .loc 1 7 0 21 000b 837DFC01 cmpl $1, -4(%rbp) 22 000f 7507 jne .L2 8:factorial.c **** return 1; 23 .loc 1 8 0 24 0011 B8010000 movl $1, %eax 24 00 25 0016 EB11 jmp .L3 26 .L2: 9:factorial.c **** } else { 10:factorial.c **** return n * factorial(n-1); 27 .loc 1 10 0 28 0018 8B45FC movl -4(%rbp), %eax 29 001b 83E801 subl $1, %eax 30 001e 89C7 movl %eax, %edi 31 0020 E8000000 call factorial 31 00 32 0025 0FAF45FC imull -4(%rbp), %eax 33 .L3: 11:factorial.c **** } 12:factorial.c **** } 34 .loc 1 12 0 35 0029 C9 leave 36 .LCFI2: 37 .cfi_def_cfa 7, 8 38 002a C3 ret 39 .cfi_endproc 40 .LFE0: 41 .size factorial, .-factorial 42 .section .rodata 43 .LC0: GAS LISTING /tmp/ccFI7VGr.s page 2 44 0000 66616374 .string "factorial(10): %d\n" 44 6F726961 44 6C283130 44 293A2025 44 640A00 45 .text 46 .globl main 47 .type main, @function 48 main: 49 .LFB1: 13:factorial.c **** 14:factorial.c **** int main() { 50 .loc 1 14 0 51 .cfi_startproc 52 002b 55 pushq %rbp 53 .LCFI3: 54 .cfi_def_cfa_offset 16 55 .cfi_offset 6, -16 56 002c 4889E5 movq %rsp, %rbp 57 .LCFI4: 58 .cfi_def_cfa_register 6 59 002f 4883EC10 subq $16, %rsp 15:factorial.c **** int x = factorial(10); 60 .loc 1 15 0 61 0033 BF0A0000 movl $10, %edi 61 00 62 0038 E8000000 call factorial 62 00 63 003d 8945FC movl %eax, -4(%rbp) 16:factorial.c **** printf("factorial(10): %d\n", x); 64 .loc 1 16 0 65 0040 B8000000 movl $.LC0, %eax 65 00 66 0045 8B55FC movl -4(%rbp), %edx 67 0048 89D6 movl %edx, %esi 68 004a 4889C7 movq %rax, %rdi 69 004d B8000000 movl $0, %eax 69 00 70 0052 E8000000 call printf 70 00 17:factorial.c **** return 0; 71 .loc 1 17 0 72 0057 B8000000 movl $0, %eax 72 00 18:factorial.c **** } 73 .loc 1 18 0 74 005c C9 leave 75 .LCFI5: 76 .cfi_def_cfa 7, 8 77 005d C3 ret 78 .cfi_endproc 79 .LFE1: 80 .size main, .-main 81 .Letext0: 82 .section .debug_info,"",@progbits 83 .Ldebug_info0: 84 0000 C8000000 .long 0xc8 GAS LISTING /tmp/ccFI7VGr.s page 3 85 0004 0200 .value 0x2 86 0006 00000000 .long .Ldebug_abbrev0 87 000a 08 .byte 0x8 88 000b 01 .uleb128 0x1 89 000c 00000000 .long .LASF8 90 0010 01 .byte 0x1 91 0011 00000000 .long .LASF9 92 0015 00000000 .long .LASF10 93 0019 00000000 .quad .Ltext0 93 00000000 94 0021 00000000 .quad .Letext0 94 00000000 95 0029 00000000 .long .Ldebug_line0 96 002d 02 .uleb128 0x2 97 002e 08 .byte 0x8 98 002f 07 .byte 0x7 99 0030 00000000 .long .LASF0 100 0034 02 .uleb128 0x2 101 0035 01 .byte 0x1 102 0036 08 .byte 0x8 103 0037 00000000 .long .LASF1 104 003b 02 .uleb128 0x2 105 003c 02 .byte 0x2 106 003d 07 .byte 0x7 107 003e 00000000 .long .LASF2 108 0042 02 .uleb128 0x2 109 0043 04 .byte 0x4 110 0044 07 .byte 0x7 111 0045 00000000 .long .LASF3 112 0049 02 .uleb128 0x2 113 004a 01 .byte 0x1 114 004b 06 .byte 0x6 115 004c 00000000 .long .LASF4 116 0050 02 .uleb128 0x2 117 0051 02 .byte 0x2 118 0052 05 .byte 0x5 119 0053 00000000 .long .LASF5 120 0057 03 .uleb128 0x3 121 0058 04 .byte 0x4 122 0059 05 .byte 0x5 123 005a 696E7400 .string "int" 124 005e 02 .uleb128 0x2 125 005f 08 .byte 0x8 126 0060 05 .byte 0x5 127 0061 00000000 .long .LASF6 128 0065 02 .uleb128 0x2 129 0066 01 .byte 0x1 130 0067 06 .byte 0x6 131 0068 00000000 .long .LASF7 132 006c 04 .uleb128 0x4 133 006d 01 .byte 0x1 134 006e 00000000 .long .LASF11 135 0072 01 .byte 0x1 136 0073 06 .byte 0x6 137 0074 01 .byte 0x1 138 0075 57000000 .long 0x57 139 0079 00000000 .quad .LFB0 GAS LISTING /tmp/ccFI7VGr.s page 4 139 00000000 140 0081 00000000 .quad .LFE0 140 00000000 141 0089 00000000 .long .LLST0 142 008d 9E000000 .long 0x9e 143 0091 05 .uleb128 0x5 144 0092 6E00 .string "n" 145 0094 01 .byte 0x1 146 0095 06 .byte 0x6 147 0096 57000000 .long 0x57 148 009a 02 .byte 0x2 149 009b 91 .byte 0x91 150 009c 6C .sleb128 -20 151 009d 00 .byte 0 152 009e 06 .uleb128 0x6 153 009f 01 .byte 0x1 154 00a0 00000000 .long .LASF12 155 00a4 01 .byte 0x1 156 00a5 0E .byte 0xe 157 00a6 57000000 .long 0x57 158 00aa 00000000 .quad .LFB1 158 00000000 159 00b2 00000000 .quad .LFE1 159 00000000 160 00ba 00000000 .long .LLST1 161 00be 07 .uleb128 0x7 162 00bf 7800 .string "x" 163 00c1 01 .byte 0x1 164 00c2 0F .byte 0xf 165 00c3 57000000 .long 0x57 166 00c7 02 .byte 0x2 167 00c8 91 .byte 0x91 168 00c9 6C .sleb128 -20 169 00ca 00 .byte 0 170 00cb 00 .byte 0 171 .section .debug_abbrev,"",@progbits 172 .Ldebug_abbrev0: 173 0000 01 .uleb128 0x1 174 0001 11 .uleb128 0x11 175 0002 01 .byte 0x1 176 0003 25 .uleb128 0x25 177 0004 0E .uleb128 0xe 178 0005 13 .uleb128 0x13 179 0006 0B .uleb128 0xb 180 0007 03 .uleb128 0x3 181 0008 0E .uleb128 0xe 182 0009 1B .uleb128 0x1b 183 000a 0E .uleb128 0xe 184 000b 11 .uleb128 0x11 185 000c 01 .uleb128 0x1 186 000d 12 .uleb128 0x12 187 000e 01 .uleb128 0x1 188 000f 10 .uleb128 0x10 189 0010 06 .uleb128 0x6 190 0011 00 .byte 0 191 0012 00 .byte 0 192 0013 02 .uleb128 0x2 GAS LISTING /tmp/ccFI7VGr.s page 5 193 0014 24 .uleb128 0x24 194 0015 00 .byte 0 195 0016 0B .uleb128 0xb 196 0017 0B .uleb128 0xb 197 0018 3E .uleb128 0x3e 198 0019 0B .uleb128 0xb 199 001a 03 .uleb128 0x3 200 001b 0E .uleb128 0xe 201 001c 00 .byte 0 202 001d 00 .byte 0 203 001e 03 .uleb128 0x3 204 001f 24 .uleb128 0x24 205 0020 00 .byte 0 206 0021 0B .uleb128 0xb 207 0022 0B .uleb128 0xb 208 0023 3E .uleb128 0x3e 209 0024 0B .uleb128 0xb 210 0025 03 .uleb128 0x3 211 0026 08 .uleb128 0x8 212 0027 00 .byte 0 213 0028 00 .byte 0 214 0029 04 .uleb128 0x4 215 002a 2E .uleb128 0x2e 216 002b 01 .byte 0x1 217 002c 3F .uleb128 0x3f 218 002d 0C .uleb128 0xc 219 002e 03 .uleb128 0x3 220 002f 0E .uleb128 0xe 221 0030 3A .uleb128 0x3a 222 0031 0B .uleb128 0xb 223 0032 3B .uleb128 0x3b 224 0033 0B .uleb128 0xb 225 0034 27 .uleb128 0x27 226 0035 0C .uleb128 0xc 227 0036 49 .uleb128 0x49 228 0037 13 .uleb128 0x13 229 0038 11 .uleb128 0x11 230 0039 01 .uleb128 0x1 231 003a 12 .uleb128 0x12 232 003b 01 .uleb128 0x1 233 003c 40 .uleb128 0x40 234 003d 06 .uleb128 0x6 235 003e 01 .uleb128 0x1 236 003f 13 .uleb128 0x13 237 0040 00 .byte 0 238 0041 00 .byte 0 239 0042 05 .uleb128 0x5 240 0043 05 .uleb128 0x5 241 0044 00 .byte 0 242 0045 03 .uleb128 0x3 243 0046 08 .uleb128 0x8 244 0047 3A .uleb128 0x3a 245 0048 0B .uleb128 0xb 246 0049 3B .uleb128 0x3b 247 004a 0B .uleb128 0xb 248 004b 49 .uleb128 0x49 249 004c 13 .uleb128 0x13 GAS LISTING /tmp/ccFI7VGr.s page 6 250 004d 02 .uleb128 0x2 251 004e 0A .uleb128 0xa 252 004f 00 .byte 0 253 0050 00 .byte 0 254 0051 06 .uleb128 0x6 255 0052 2E .uleb128 0x2e 256 0053 01 .byte 0x1 257 0054 3F .uleb128 0x3f 258 0055 0C .uleb128 0xc 259 0056 03 .uleb128 0x3 260 0057 0E .uleb128 0xe 261 0058 3A .uleb128 0x3a 262 0059 0B .uleb128 0xb 263 005a 3B .uleb128 0x3b 264 005b 0B .uleb128 0xb 265 005c 49 .uleb128 0x49 266 005d 13 .uleb128 0x13 267 005e 11 .uleb128 0x11 268 005f 01 .uleb128 0x1 269 0060 12 .uleb128 0x12 270 0061 01 .uleb128 0x1 271 0062 40 .uleb128 0x40 272 0063 06 .uleb128 0x6 273 0064 00 .byte 0 274 0065 00 .byte 0 275 0066 07 .uleb128 0x7 276 0067 34 .uleb128 0x34 277 0068 00 .byte 0 278 0069 03 .uleb128 0x3 279 006a 08 .uleb128 0x8 280 006b 3A .uleb128 0x3a 281 006c 0B .uleb128 0xb 282 006d 3B .uleb128 0x3b 283 006e 0B .uleb128 0xb 284 006f 49 .uleb128 0x49 285 0070 13 .uleb128 0x13 286 0071 02 .uleb128 0x2 287 0072 0A .uleb128 0xa 288 0073 00 .byte 0 289 0074 00 .byte 0 290 0075 00 .byte 0 291 .section .debug_loc,"",@progbits 292 .Ldebug_loc0: 293 .LLST0: 294 0000 00000000 .quad .LFB0-.Ltext0 294 00000000 295 0008 01000000 .quad .LCFI0-.Ltext0 295 00000000 296 0010 0200 .value 0x2 297 0012 77 .byte 0x77 298 0013 08 .sleb128 8 299 0014 01000000 .quad .LCFI0-.Ltext0 299 00000000 300 001c 04000000 .quad .LCFI1-.Ltext0 300 00000000 301 0024 0200 .value 0x2 302 0026 77 .byte 0x77 GAS LISTING /tmp/ccFI7VGr.s page 7 303 0027 10 .sleb128 16 304 0028 04000000 .quad .LCFI1-.Ltext0 304 00000000 305 0030 2A000000 .quad .LCFI2-.Ltext0 305 00000000 306 0038 0200 .value 0x2 307 003a 76 .byte 0x76 308 003b 10 .sleb128 16 309 003c 2A000000 .quad .LCFI2-.Ltext0 309 00000000 310 0044 2B000000 .quad .LFE0-.Ltext0 310 00000000 311 004c 0200 .value 0x2 312 004e 77 .byte 0x77 313 004f 08 .sleb128 8 314 0050 00000000 .quad 0 314 00000000 315 0058 00000000 .quad 0 315 00000000 316 .LLST1: 317 0060 2B000000 .quad .LFB1-.Ltext0 317 00000000 318 0068 2C000000 .quad .LCFI3-.Ltext0 318 00000000 319 0070 0200 .value 0x2 320 0072 77 .byte 0x77 321 0073 08 .sleb128 8 322 0074 2C000000 .quad .LCFI3-.Ltext0 322 00000000 323 007c 2F000000 .quad .LCFI4-.Ltext0 323 00000000 324 0084 0200 .value 0x2 325 0086 77 .byte 0x77 326 0087 10 .sleb128 16 327 0088 2F000000 .quad .LCFI4-.Ltext0 327 00000000 328 0090 5D000000 .quad .LCFI5-.Ltext0 328 00000000 329 0098 0200 .value 0x2 330 009a 76 .byte 0x76 331 009b 10 .sleb128 16 332 009c 5D000000 .quad .LCFI5-.Ltext0 332 00000000 333 00a4 5E000000 .quad .LFE1-.Ltext0 333 00000000 334 00ac 0200 .value 0x2 335 00ae 77 .byte 0x77 336 00af 08 .sleb128 8 337 00b0 00000000 .quad 0 337 00000000 338 00b8 00000000 .quad 0 338 00000000 339 .section .debug_aranges,"",@progbits 340 0000 2C000000 .long 0x2c 341 0004 0200 .value 0x2 342 0006 00000000 .long .Ldebug_info0 343 000a 08 .byte 0x8 GAS LISTING /tmp/ccFI7VGr.s page 8 344 000b 00 .byte 0 345 000c 0000 .value 0 346 000e 0000 .value 0 347 0010 00000000 .quad .Ltext0 347 00000000 348 0018 5E000000 .quad .Letext0-.Ltext0 348 00000000 349 0020 00000000 .quad 0 349 00000000 350 0028 00000000 .quad 0 350 00000000 351 .section .debug_line,"",@progbits 352 .Ldebug_line0: 353 0000 44000000 .section .debug_str,"MS",@progbits,1 353 02002200 353 00000101 353 FB0E0D00 353 01010101 354 .LASF3: 355 0000 756E7369 .string "unsigned int" 355 676E6564 355 20696E74 355 00 356 .LASF9: 357 000d 66616374 .string "factorial.c" 357 6F726961 357 6C2E6300 358 .LASF0: 359 0019 6C6F6E67 .string "long unsigned int" 359 20756E73 359 69676E65 359 6420696E 359 7400 360 .LASF1: 361 002b 756E7369 .string "unsigned char" 361 676E6564 361 20636861 361 7200 362 .LASF12: 363 0039 6D61696E .string "main" 363 00 364 .LASF6: 365 003e 6C6F6E67 .string "long int" 365 20696E74 365 00 366 .LASF11: 367 0047 66616374 .string "factorial" 367 6F726961 367 6C00 368 .LASF10: 369 0051 2F746D70 .string "/tmp" 369 00 370 .LASF8: 371 0056 474E5520 .string "GNU C 4.6.3" 371 4320342E 371 362E3300 372 .LASF2: GAS LISTING /tmp/ccFI7VGr.s page 9 373 0062 73686F72 .string "short unsigned int" 373 7420756E 373 7369676E 373 65642069 373 6E7400 374 .LASF4: 375 0075 7369676E .string "signed char" 375 65642063 375 68617200 376 .LASF5: 377 0081 73686F72 .string "short int" 377 7420696E 377 7400 378 .LASF7: 379 008b 63686172 .string "char" 379 00 380 .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3" 381 .section .note.GNU-stack,"",@progbits