GeirGrusom Skrevet 17. november 2005 Del Skrevet 17. november 2005 Jeg fikk et problem i masm, jeg skriver et bibliotek som tar for seg 3d matematikk, og ved skriveing av funksjonen nx = ((y1-y2)*(z1-z3))-((z1-z2)*(y1-y3)) ny = ((z1-z2)*(x1-x3))-((x1-x2)*(z1-z3)) nz = ((x1-x2)*(y1-y3))-((y1-y2)*(x1-x3)) for utregning av normalen til et polygon, sier MASM "Invalid parameter" e.l. for instruksjonene faddp fmulp fsubp etc. selvom det står i Intel manualen at disse ikke tar noe parameter, men multipliserer/e.l. ST(0) med ST(1), lagrer verdien i ST(1) og poper stacken... men masm krever et parameter som tydeligvis må være en peker, siden funksjonen kunne ikke ta "co-processor register" som det stod, noen som vet? regner egentlig ikke med å få noe svar på denne delen av forumet... Lenke til kommentar
Axel`` Skrevet 17. november 2005 Del Skrevet 17. november 2005 Bruker en annen assembler selv, men så vidt jeg kan se ut i fra en MASM-referanse jeg fant på nettet krever MASM at du må spesifisere både kilde og destinasjon for de nevnte instruksjonene. f.eks. fmulp st(6),st http://webster.cs.ucr.edu/Page_TechDocs/MA...ide/Chap_05.htm --Axel. Lenke til kommentar
GeirGrusom Skrevet 18. november 2005 Forfatter Del Skrevet 18. november 2005 Glimrende fmulp st(1), st fungerte! egentlig litt rart når i intel instruction set referance står det dette: DE C9 FMULP Multiply ST(1) by ST(0), store result in ST(1), and pop theregister stack takk for hjelpen Lenke til kommentar
GeirGrusom Skrevet 24. november 2005 Forfatter Del Skrevet 24. november 2005 For å slippe å lage en ny post, bare fortsetter jeg her Jeg er veldig uerfaren når det gjelder å programmere assembly mot andre språk ( har bare sittet med nbasm og inline assembly) Jeg har to problemer med en algoritme, jeg vet ikke om verdien blir passed byref eller byval, jeg har gjettet på byref, jeg syntes det var logisk i forhold til double eller strukturer. En annen ting er at koden hopper til 0 når den kommer til ret, hvorfor i helheim gjør den det? ;void __cdecl sincos(float *,float *,float) ?sincos@@YAXPAM0M@Z PROC pop ecx pop ebx pop eax fld DWORD PTR [ecx] fsincos fstp DWORD PTR [eax] fstp DWORD PTR [ebx] ret ?sincos@@YAXPAM0M@Z ENDP denne funksjonen blir kalt av void matrix::RotateX(matrixcell angle) { matrix new_mat = matrix(); matrixcell cosval; matrixcell sinval; sincos((float*)&cosval, (float*)&sinval, (float)angle); new_mat.m22 = cosval; new_mat.m32 = -sinval; new_mat.m23 = sinval; new_mat.m33 = cosval; MultiplyMatrix(new_mat); } når sincos er ferdig, hopper programmet til null av en eller annen grunn, så koden fungerer ikke, noen som vet hvorfor? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå