//---self_plus.c--
#include<stdio.h>
#define pro(x) (x*x)
int main()
{
int i=3,j,k;
j=pro(i++);
k=pro(++i);
printf("j=%d,k=%d\n",j,k);
return 0;
}
//--self_plus.s--
.file "self_plus.c"
.section .rodata
.LC0:
.string "j=%d,k=%d\n" ---------------------文中的字符串
.text
.globl main
.type main, @function -------------------主函数
main:
.LFB2:
pushq %rbp -------------------------------将%rbp入栈
.LCFI0:
movq %rsp, %rbp -----------------------保存栈frame,
.LCFI1:
subq $16, %rsp --------------------------调整rsp,为变量留下空间
.LCFI2:
movl $3, -4(%rbp) ------------------------ 把常量3(a)入栈,占4个字节
movl -4(%rbp), %edx --------------------从栈中把3放到edx中去
movl -4(%rbp), %eax --------------------从栈中把3放到eax中去
imull %eax, %edx -------------------------两个3相乘,存在edx
leaq -4(%rbp), %rax ---------------------取3的地址放入rax
incl (%rax) ----------------------------------地址指的内容加1,3变成4
leaq -4(%rbp), %rax ---------------------取4的地址放入rax
incl (%rax) ----------------------------------地址指的内容加1,4变成5
movl %edx, -8(%rbp) --------------------把9放入栈
leaq -4(%rbp), %rax ---------------------取5的地址放入rax
incl (%rax) ----------------------------------加1
leaq -4(%rbp), %rax ----------------------取6
incl (%rax) -----------------------------------加1
movl -4(%rbp), %eax --------------------取7
imull -4(%rbp), %eax ---------------------7×7放入eax
movl %eax, -12(%rbp) -------------------49入栈
movl -12(%rbp), %edx -------------------49放到edx
movl -8(%rbp), %esi ----------------------9放到esi
movl $.LC0, %edi
movl $0, %eax
call printf -------------------------------------输出9和49
movl $0, %eax
leave
ret
.LFE2:
.size main, .-main
.section .eh_frame,"a",@progbits
.Lframe1:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.string ""
.uleb128 0x1
.sleb128 -8
.byte 0x10
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe1
.quad .LFB2
.quad .LFE2-.LFB2
.byte 0x4
.long .LCFI0-.LFB2
.byte 0xe
.uleb128 0x10
.byte 0x86
.uleb128 0x2
.byte 0x4
.long .LCFI1-.LCFI0
.byte 0xd
.uleb128 0x6
.align 8
.LEFDE1:
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.4.6 20060404 (Red Hat 3.4.6-11)"