Thread View: pl.comp.lang.asm
2 messages
2 total messages
Started by panki
Tue, 17 Jan 2012 11:19
koprocesor reszta z dzielenia fprem
Author: panki
Date: Tue, 17 Jan 2012 11:19
Date: Tue, 17 Jan 2012 11:19
38 lines
496 bytes
496 bytes
mogl by mi ktos podpowiedziec jak uzywac funkcji fprem. probowalem to w ten sposob ale nie chce dzialac [code] ; proba coprocesora section .text global _start extern koniec extern piszeaxld _start: finit fld qword [a] ;ladule wartosc fld qword [b] ;laduje dzielnik petla: fprem ;reszta fstsw ax; zapisuje status reszty sahf; stan do flag; jnz petla; fstp tword [reszta] mov eax, reszta call piszeaxld call koniec section .data a dq 5 b dq 8 reszta dt 0.0; [/code]
Re: koprocesor reszta z dzielenia fprem
Author: "Bogdan (bogdro)
Date: Tue, 17 Jan 2012 20:40
Date: Tue, 17 Jan 2012 20:40
64 lines
1890 bytes
1890 bytes
W dniu 17.01.2012 20:19, panki pisze: > mogl by mi ktos podpowiedziec jak uzywac funkcji fprem. > probowalem to w ten sposob ale nie chce dzialac > > [code] > ; proba coprocesora > > section .text > > global _start > > extern koniec > extern piszeaxld > > _start: > > finit > > fld qword [a] ;ladule wartosc > fld qword [b] ;laduje dzielnik > petla: > fprem ;reszta > fstsw ax; zapisuje status reszty > sahf; stan do flag; > jnz petla; > fstp tword [reszta] > > mov eax, reszta > call piszeaxld > > call koniec > > section .data > a dq 5 > b dq 8 > reszta dt 0.0; > > [/code] Po pierwsze, co nie chce działać? Nie kompiluje się? Kompiluje się, ale nie uruchamia się lub powoduje zamknięcie programu? Uruchamia się, ale podaje nieoczekiwany wynik? Powiedz jeszcze, co dokładnie robi procedura piszeaxld? Bo na tę chwilę zgaduję, że wypisuje liczbę całkowitą spod adresu podanego w EAX. Jeśli to prawda, to widzę z tym jeden problem: poprzez FSTP zapisujesz resztę z dzielenia, ale zmiennoprzecinkową, która po wyświetleniu jako liczba całkowita może nie wyglądać tak, jak tego można oczekiwać. Ale to raczej ten mniejszy problem. Co ważniejsze, to to, że FPREM przyjmuje 2 parametry na stosie FPU. W pierwszej iteracji pętli jak najbardziej jeszcze tam są, ale od drugiej na stosie jest już tylko jeden. Jako drugi brane jest cokolwiek, co akurat było na stosie. To zapewne jest niepożądane. P.S. Ja się nie czepiam, ale formalnie FPREM jest instrukcją procesora, a nie funkcją (funkcje zwykle pisze się we własnych programach). -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.Xiph.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads