Dołączył: 30.12.2008
| Witam, mam taki problem siedze juz 3 dzien i nie moge znalesc bledu w kodzie ... a mianowcie przerobilem kod z c++ na masm :
[c]
int k=0;
while(k<n-1)
{
// zapisywanie do ciagu wynikowego
float w=M[k];
M[k]=M[n-1];
M[n-1]=w;
int j=n-1;
while(j>k)
{
int i=j*2;
i-=n;
if(i<=k)
break;
if(i>k+1 && czymniej(M[i-1],M [i])==true)
i--;
if(czyniemniej(M [i],M[j])==true)
break;
w=M [i];
M [i]=M[j];
M[j]=w;
j=i;
}
k++;
}
[/c]
na
[asm]
XOR EBX,EBX ; i
XOR ECX,ECX ; j
XOR EDX,EDX ; k
XOR ESI,ESI ; n-1
; u4 - temp
; u1 - k+1
mov ESI,licznik
dec ESI
petla1:
cmp EDX,ESI
jae koniec1 ; spr
fld [tab+8*EDX]
fstp u4
fld [tab+8*ESI]
fstp [tab+8*EDX]
fld u4
fstp [tab+8*ESI]
mov ECX,ESI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
petla2:
cmp ECX,EDX
jbe koniec2 ; spr
mov EBX,ECX
sal EBX,1
sub EBX,licznik
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cmp EBX,EDX
jbe koniec2
mov u1,0
mov u1,EDX
inc u1
cmp EBX,u1
jbe tutaj
fld [tab+8*EBX]
dec EBX
fld [tab+8*EBX]
inc EBX
fcom ; ### cmp st(0),st(1) x<y == true
fstsw AX
sahf
jae czyniemniej
dec EBX
czyniemniej:
ffree st(1)
ffree st(0)
tutaj:
mov ax,0
fld [tab+8*ECX]
fld [tab+8*EBX]
fcom ; ### cmp st(0),st(1) x<y == true
fstsw AX
sahf
jae czysc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ffree st(1)
ffree st(0)
fld [tab+8*EBX]
fstp u4
fld [tab+8*ECX]
fstp [tab+8*EBX]
fld u4
fstp [tab+8*ECX]
mov ECX,EBX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
jmp petla2
czysc:
ffree st(1)
ffree st(0)
koniec2:
inc EDX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
jmp petla1
koniec1:
[/asm]
oczywiscie sortowanie ma byc dla liczb rzeczywistych
dziala mi dla max 6 liczb dam wiecej i program sie sypie
KOrzystam z Masm32 v10 -> winda
Z gory dzieki za pomoc
|