|
发表于 2022-11-20 13:32:17
|
显示全部楼层
其他都没问题,只有最后一句
你说编译的时候自动替换,其实不是这样的
是先读取calc这个变量里面保存的地址,然后转到这个地址执行
- cacl = sum;
- 11bd: 48 8d 05 95 ff ff ff leaq -0x6b(%rip),%rax # 1159 <sum>
- 11c4: 48 89 45 f0 movq %rax,-0x10(%rbp)
- //printf("sum =%.2f\n", cacl); // 这个不是调用函数
- printf("sum =%.2f\n", cacl(num1, num2));
- 11c8: f3 0f 10 45 ec movss -0x14(%rbp),%xmm0
- 11cd: 8b 45 e8 movl -0x18(%rbp),%eax
- 11d0: 48 8b 55 f0 movq -0x10(%rbp),%rdx
- 11d4: 0f 28 c8 movaps %xmm0,%xmm1
- 11d7: 66 0f 6e c0 movd %eax,%xmm0
- 11db: ff d2 callq *%rdx
- 11dd: 66 0f ef d2 pxor %xmm2,%xmm2
- 11e1: f3 0f 5a d0 cvtss2sd %xmm0,%xmm2
- 11e5: 66 48 0f 7e d0 movq %xmm2,%rax
- 11ea: 66 48 0f 6e c0 movq %rax,%xmm0
- 11ef: 48 8d 05 29 0e 00 00 leaq 0xe29(%rip),%rax # 201f <_IO_stdin_used+0x1f>
- 11f6: 48 89 c7 movq %rax,%rdi
- 11f9: b8 01 00 00 00 movl $0x1,%eax
- 11fe: e8 3d fe ff ff callq 1040 <printf@plt>
复制代码 |
|