>  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秒