.model TINY ; com .486 ; nebudeme suchaři .code org 100h start: Mov fs,Tbl_seg Finit ; nutné Xor ecx,ecx Mov Kopr,ecx Mov cx,360 ; máme 360 stupňů Xor di,di @SinLoop: Fild kopr ; do ST(0) nahraju prom. kopr (tj. stupeň) Fldpi ; do ST se nahraje PI - hodnota prom. Kopr bude posunuta o jednu dolů - tj. ST(1) Fmulp ; násobí ST(1)=ST(1)*ST(0) a pak ; odstraní ST(0) ze zásobníku - tzn. ST(1) se stane ST(0) Fild cst1 ; do ST(0) hodí konstantu ... (přepočet na radiány) ; v ST(1) je teď kopr*Pi Fdivp ; ST(1) =ST(1) / ST(0) a odstraní ST ; ST(0) = kopr * PI / 180 Fsin ; udělá sínus ST a uloží do ST Fild cst ; do ST(0) hodí fixed-point konstantu Fmulp ; opět násobení ... Fistp dword ptr FS:[DI] ; a vypočítanou hodnotu hodíme do paměti a uklidíme po sobě poslední stopy ;-) Add DI,4 ; pracujeme s DWordama ... Inc dword ptr kopr ; zvětšíme o 1 a jdeme na další ... Loop @Sinloop Retn Kopr dd 0 Pom dd 0 Cst dd 65536 ; fix-point cst ... zvolena kvůli pozdějšímu jednoduchému shiftu o 16 :) Cst1 dw 180 ; kvůlivá převodu na radiány Tbl_seg dw 07000h ; nechutně obsadíme nějaký segment end start výheň