# From https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html : # "-Og : optimize debugging" https://www.ibm.com/developerworks/library/l-gas-nasm/index.html google "NASM vs GAS" to see examples of the two styles for representing assembly. Notice that they reverse the order of arguments, e.g. "movl $1, %eax" vs "mov eax, 1". See https://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax b bytes (8 bit) s short (16 bit integer, 32 bit float) w word (16 bit) l long (32 bit integer, 64 bit float) q quad (64 bit) t ten (ten bytes, 80 bits) example : movl -8(%ebp, %edx, 4), %eax # Full example: load *(ebp + (edx * 4) - 8) into eax If no letter suffix (i.e. "mov" rather than "movq"), use size of destination register. $ gcc -Og swap.c -o swap $ objdump -d swap > swap.objdjump --- swap.objdump - (excerpt) --------------------------------- 0000000000400546 : 400546: 8b 07 mov (%rdi),%eax 400548: 8b 16 mov (%rsi),%edx 40054a: 89 17 mov %edx,(%rdi) 40054c: 89 06 mov %eax,(%rsi) 40054e: c3 ret 000000000040054f : 40054f: 48 83 ec 18 sub $0x18,%rsp 400553: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax 40055a: 00 00 40055c: 48 89 44 24 08 mov %rax,0x8(%rsp) 400561: 31 c0 xor %eax,%eax 400563: c7 04 24 7b 00 00 00 movl $0x7b,(%rsp) 40056a: c7 44 24 04 c8 01 00 movl $0x1c8,0x4(%rsp) 400571: 00 400572: 48 8d 74 24 04 lea 0x4(%rsp),%rsi 400577: 48 89 e7 mov %rsp,%rdi 40057a: e8 c7 ff ff ff callq 400546 40057f: 8b 44 24 04 mov 0x4(%rsp),%eax 400583: 03 04 24 add (%rsp),%eax 400586: 48 8b 54 24 08 mov 0x8(%rsp),%rdx 40058b: 64 48 33 14 25 28 00 xor %fs:0x28,%rdx 400592: 00 00 400594: 74 05 je 40059b 400596: e8 85 fe ff ff callq 400420 <__stack_chk_fail@plt> 40059b: 48 83 c4 18 add $0x18,%rsp 40059f: c3 retq 00000000004005a0
: 4005a0: 48 83 ec 08 sub $0x8,%rsp 4005a4: b8 00 00 00 00 mov $0x0,%eax 4005a9: e8 a1 ff ff ff callq 40054f 4005ae: b8 00 00 00 00 mov $0x0,%eax 4005b3: 48 83 c4 08 add $0x8,%rsp 4005b7: c3 retq 4005b8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 4005bf: 00 ---------------------------------------------------------------- $ gdb swap (gdb) break swap (gdb) run (gdb) disass swap ... (gdb) info reg ... ----------------------------------------------------------------