🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#2467
Author: panki
Date: Tue, 17 Jan 2012 11:19
38 lines
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
#2468
Author: "Bogdan (bogdro)
Date: Tue, 17 Jan 2012 20:40
64 lines
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