-
-
[求助]对几个浮点指令有点糊涂,请教我。
-
发表于:
2007-7-27 17:12
3454
-
我在VC中反汇编了一个c表达式:
float x=1;y=2;y+=++x*++x;如下:
mov dword ptr [ebp-4],3F800000h ;x=1
mov dword ptr [ebp-8],2 ;y=2
fild dword ptr [ebp-8] ;y->st(0)
fld dword ptr [ebp-4] ;x->st(0),y->st(1)
fadd dword ptr [_real@4@3fff8000000000000000 (00426020)]
;我看到站里的教材说fadd是st(0) <-st(0) + st(1),应该没有操作数 呀,这里的怎么有?什么意思? 按照教程理解:st(0)=3,st(1)=2
fst dword ptr [ebp-4] ;如果把上面的操作数看成无用的话,这里x=3了
fadd dword ptr [_real@4@3fff8000000000000000 (00426020)]
;又来一个 此时st(0)=5,st(1)=2
fst dword ptr [ebp-4] ;x=5
fmul dword pte [ebp-4]
;教程中fmul应该st(0) <- st(0) * st(1),应该也没有操作数呀,这里的怎么有?什么意思如果也把操作数看成无用,按教程理解此时st(0)=10,st(1)=2
faddp st(1),st
;st(0)=10,st(1)=12,出栈也不知道是不是出到原来的ebp-4和ebp-8的位置,如果是那x=10,y=12
call _ftol (00401208)
mov dword ptr [ebp-8],eax
以上是我的理解一定不对因为x=3,y=11请哪位帮我找找哪儿理解错了应该是怎样的,谢谢!!!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课