1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| // g++ -g b.cpp // layout split, s si n ni
// g++ -O0 -S b.cpp
// main // 存储Node数据 main: movl $1, -528(%rbp) movl $2, -464(%rbp) movl $3, -400(%rbp) movl $4, -336(%rbp) leaq -208(%rbp), %rax leaq -336(%rbp), %rdx leaq -400(%rbp), %rcx movq %rcx, %rsi // 第一个参数用来存储 temporary object在当前main函数(而不是重载后的add函数) movq %rax, %rdi // 调用重载 call _ZplRK4NodeS1_ leaq -144(%rbp), %rax leaq -208(%rbp), %rdx leaq -464(%rbp), %rcx movq %rcx, %rsi movq %rax, %rdi call _ZplRK4NodeS1_
_ZplRK4NodeS1_: movq %rdi, -8(%rbp) movq -8(%rbp), %rax movq %rax, %rdi // 在对应地址创建node call _ZN4NodeC1Ev // 运算结果 addl %eax, %edx // 把结果存入对应的位置 movq -8(%rbp), %rax movl %edx, (%rax)
|