问个浮点数汇编
问题在汇编代码里,有两个问题
290: int main( int argc, char* argv[] )
291: {
00E51490 push ebp
00E51491 mov ebp,esp
00E51493 sub esp,54h
00E51496 push ebx
00E51497 push esi
00E51498 push edi
292: float ff1=3.0;
00E51499 fld dword ptr ds:[00E548A4h]
-------------------------------------------------------
;这个ds是什么意思?我鼠标放上去显示值为0
; 所以我看了00E548A4内存的值,显示如下,3.0是我期望的值
- (float*)(0x0E548a4) 0x00e548a4 __real@40400000 float *
3.0000000 float
;寄存器窗口显示:
; CS = 0023 DS = 002B ES = 002B SS = 002B FS = 0053 GS = 002B
; 请问这里的DS又是什么?
-------------------------------------------------------
00E5149F fstp dword ptr [ebp-4]
293: float ff11=4.0;
00E514A2 fld dword ptr ds:[00E54854h]
00E514A8 fstp dword ptr [ebp-8]
294: float ff2 = ff1+2.0;
00E514AB fld dword ptr [ebp-4]
00E514AE fadd qword ptr ds:[00E54890h]
-------------------------------------------------------
;这里做加法,我期望00E54890h里的值是2.0
; 可是,为什么是0呢?我怎么找不到2.0在哪里?
- (float*)(0x00E54890) 0x00e54890 __real@4000000000000000 float *
0.00000000 float
-------------------------------------------------------
00E514B4 fstp dword ptr [ebp-0Ch]
295: float ff22 = 5.0;
00E514B7 fld dword ptr ds:[00E54850h]
00E514BD fstp dword ptr [ebp-10h]
296: float ff3 = floatfunc(ff2);
00E514C0 push ecx
00E514C1 fld dword ptr [ebp-0Ch]
00E514C4 fstp dword ptr [esp]
00E514C7 call 00E51177
00E514CC add esp,4
00E514CF fstp dword ptr [ebp-14h]
297: }
00E514D2 xor eax,eax
00E514D4 pop edi
00E514D5 pop esi
00E514D6 pop ebx
00E514D7 mov esp,ebp
00E514D9 pop ebp
00E514DA ret