%include "rw32.inc" CEXTERN printf section .data x dq 123456789.9876 f_str db "%.3f",0 section .text vlastniFloat32: enter 0,0 push __float32__(42.9) ; vloží 32b číslo na vrchol zásobníku fld dword[esp] ; načte 32b číslo z vrcholu zásobníku add esp, 4 ; smazání čísla leave ret cisloDouble64: enter 0,0 push dword [x+4] ; dolní část čísla push dword [x] ; horní část čísla fld qword [esp] ; load z vrcholu zásobníku fsin ; libovolná operace (sin) fstp qword [esp] ; uložení 64bit čísla do zásobníku push f_str ; argument pro printf call printf ; zavolání externí C funkce call WriteNewLine leave ret eaxToSt0: ; EAX -> ST0 enter 0,0 call ReadFloatNewLine ; uživatelská hodnota do EAX (float ale int) push eax ; EAX do zásobníku mov eax, 5 fld dword [esp] ; načtení z vrcholu zásobníku do ST0 add esp, 4 ; úklid call WriteDoubleNewLine ; vypsání ST0 leave ret st0ToEax: ; ST0 -> EAX enter 0,0 sub esp, 4 ; alokace lokální proměnné call ReadDoubleNewLine ; načtení uživatelské 64b hodnoty fst dword [ebp-4] ; ulož 32 číslo z ST0 do lokální proměnné mov eax, [ebp-4] ; zkopíruj hodnotu z lokální promměné do EAX call WriteFloatNewLine ; výpis 32b float hodnoty z EAX add esp, 4 ; úklid leave ret main: enter 0,0 call vlastniFloat32 call cisloDouble64 call eaxToSt0 call st0ToEax leave ret