关于一段C++程序的汇编代码的问题C/C++ codedouble _nMaxSpeedG00 GetMaxHardwareSpeedG00()0057883Fmo
关于一段C++程序的汇编代码的问题
- C/C++ code
double _nMaxSpeedG00 = GetMaxHardwareSpeedG00();0057883F mov ecx,dword ptr [this] 00578842 call CController::GetMaxHardwareSpeedG00 (56795Bh) 00578847 fstp qword ptr [_nMaxSpeedG00] __TEST_GRAT3(m_nSpeedG00, _nMaxSpeedG00, CMP_HARD_MAXSPEED);0057884A movzx ebx,byte ptr [_bIsLegal] 0057884E push 1 00578850 lea eax,[_nMaxSpeedG00] 00578853 push eax 00578854 mov ecx,dword ptr [this] 00578857 add ecx,0BF28h 0057885D push ecx 0057885E mov ecx,dword ptr [this] 00578861 call CController::_TestGreat<double,double> (568108h)
这两句程序的汇编代码中_nMaxSpeedG00被定义成了double类型的,我记得应该是使用的IEEE754的双精度保存的。符号位,阶数
和尾数分别为1,11,52。
上面的汇编代码中
00578850 lea eax,[_nMaxSpeedG00]
应该是讲一个双精度浮点数赋值给了EAX32位寄存器。这个是如何完成的啊,不会丢失位数么?
[解决办法]
lea eax,[_nMaxSpeedG00]
这个是将地址放进去了,而不是将其本身的值
