> 2007/09/15 (土) 02:34:18 ◆ ▼ ◇ [qwerty]> > 久しぶりにCでプログラム書いてみたのだけどさっぱり動いてくれません
> > 駄目人間化してる(;´Д`)タスケテー
> インラインアセンブラで全て解決ヽ(´ー`)ノ
コールバック関数を作りたいのにうまくいかないだけなんだけどね
探してたら昔書いたこんなの出てきたよ(;´Д`)それにしても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;
参考:2007/09/15(土)02時22分00秒