int main() { // movq %rsp,%rbp // subq $0x40,%rsp // 0 -c -18 -20 -28 -30 -34 // [retadr]........[ x]...[ y ][ a ][ b ][ z ][ w]............[stack int x = 3; // movl $3,-0xc(%rbp) x is at -c long y = 4; // movq $4,-0x18(%rbp) y is at -18 int *a = &x; // leaq -0xc(%rbp),%rax // movq %rax,-0x20(%rbp) a is at -20 long *b = &y; // leaq -0x18(%rbp),%rax // movq %rax,-0x28(%rbp) b is at -28 // movq -0x20(%rbp),%rax a was at -20 long z = *a; // movslq (%rax),%rax // movq %rax,-0x30(%rbp) z is at -30 // movq -0x28(%rbp),%rax int w = *b; // movl (%rax),%ecx // movl %ecx,-0x34(%rbp) w is at -34 // addq $0x40,%rsp // popq %rbp return 0; // xorl %eax, %eax // retq }