double和float类型变量在汇编角度怎么区分
float是占用四个字节,double是栈用8个字节的。
float a=5; double b=5; printf("%lf",a+b); return 0;
对应的汇编代码
00401028 |. C745 FC 0000A>mov [local.1],0x40A00000 0040102F |. C745 F4 00000>mov [local.3],0x0 00401036 |. C745 F8 00001>mov [local.2],0x40140000 0040103D |. D945 FC fld [local.1] 00401040 |. DC45 F4 fadd qword ptr ss:[ebp-0xC] 00401043 |. 83EC 08 sub esp,0x8 00401046 |. DD1C24 fstp qword ptr ss:[esp]
fdd 中有一个qword ptr 意思是说你操作的是一个8个字节的数据,那么这个变量就是double的变量了。