> 2007/09/15 (土) 02:35:34 ◆ ▼ ◇ [qwerty]> > インラインアセンブラで全て解決ヽ(´ー`)ノ
> コールバック関数を作りたいのにうまくいかないだけなんだけどね
> 探してたら昔書いたこんなの出てきたよ(;´Д`)それにしてもx86はレジスタ少なすぎ
> int MathSqrt(int i){
> int j,k;
> _asm{
> mov eax,[i]
> mov ecx,eax
> cmp eax,0
> jz skip_1 // 0は0
> cmp eax,1
> jz skip_1 // 1は1(次のループの判断が2以上な為にこっちが速い)
> mov ebx,1 // 近似値を求めるための挟み込み
> loop_1:
> shl ebx,1
> shr ecx,1
> cmp ebx,ecx
> jb loop_1 // 大きい間はループする
> add ebx,ecx
> shr ebx,1
> loop_2:
> mov ecx,ebx
> push eax
> cdq // これを忘れないように
> div ebx
> add ebx,eax
> shr ebx,1
> pop eax
> cmp ebx,ecx
> jb loop_2
> mov eax,ecx
> skip_1:
> mov [k],eax
> }
> return k;
jは何してるのよ(;´Д`)
参考:2007/09/15(土)02時34分18秒