Gå til innhold

Anbefalte innlegg

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... :p

Lenke til kommentar
Videoannonse
Annonse

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...