#include <stdio.h>
int main( void )
{
int *p, i;
double n;
n = 10;
i = (int)n;
return 0;
}
对他编译后,然后反汇编下
。。。。
0x0000000000400448 <main+0>:
push
%rbp
0x0000000000400449 <main+1>:
mov
%rsp,%rbp
0x000000000040044c <main+4>:
mov
$0x4024000000000000,%rax
0x0000000000400456 <main+14>:
mov
%rax,-0x8(%rbp) //这句表示把10这个双精度浮点数放到%brp-0x8地址的位置
0x000000000040045a <main+18>:
movsd
-0x8(%rbp),%xmm0//这句就是强转,可以看出这个是直接在CPU寄存器里面转的,CPU里的寄存器是不可以寻址的,所以你要取地址当人出错,这里的临时变量是存放到%xmm0这个寄存器里的
0x000000000040045f <main+23>:
cvttsd2si %xmm0,%eax//这句就是把临时变量存放到%eax寄存器里面
0x0000000000400463 <main+27>:
mov
%eax,-0xc(%rbp)//这句就是对i复制,就是强转后的10
0x0000000000400466 <main+30>:
mov
$0x0,%eax
0x000000000040046b <main+35>:
leaveq
0x000000000040046c <main+36>:
retq
。。。。。。。。。
希望对你有帮助