31.05.2013 Views

Trends - Amiga Magazine Online

Trends - Amiga Magazine Online

Trends - Amiga Magazine Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

grammatori in asseiubler. un linguaggio che prevedendo<br />

~inicariiente f~inzioni elementari per la CPU, rende difficoltoso<br />

il calcolo con numeri reali in virgola mobile. a clifferenza<br />

dei linguaggi ad alto livello.<br />

11 formato fast floating point della Motorola e le relative<br />

funzioni di gestione risultano allora un'ottima soluzione,<br />

non solo per la disponibilità di routine giii pronte e per i<br />

vantaggi di corlipatibilità offerti da uno standard. ma soprat-<br />

tutto per l'elevata velocità cfi calcolo permessa da tale<br />

foriiiato.<br />

I'rima di entrare nel dettaglio. soffermiaiiioci per6 ancora<br />

un moiiiento su interessanti aspetti ciei compilatori C ine-<br />

renti all'uso clelle librerie ri~ateriiatiche.<br />

Fast Floating Point e C<br />

Sebbene sconsiglial>ile, l'uso clelle librerie FFP del sisteiiia<br />

operativo da C non è affatto impossibile.<br />

In questo caso occorre aprire le librerie per mezzo della<br />

consueta OpenLibrary e assegnare i vettori base nel lilodo<br />

seguente:<br />

struct Library "MathBase;<br />

MathBase=OpenLibrary("mathffp.llbrary,OL);<br />

struct Llbrary "MathTransBase;<br />

MathTransBase=OpenLibrary("mathtrans.library,OL);<br />

Va ossenato che la seconda libreria richiaiiia routine della<br />

mathffp; per questo mathffp verr2 aperta automaticainente<br />

nel caso non sia stato ancora effettuctta una relativa Open-<br />

Library.<br />

In questo modo non sarà, comunque, disponibile il vettore<br />

MathBase per l'utilizzo delle f~~nzioni della priiila libreria;<br />

per questo è consigliabile aprirle in ogni caso nell'ordine<br />

descritto. in rnodo da poter utilizzare sirniiltaneainente le<br />

funzioni di entrambe.<br />

compilatore l'uso del formato FFP. Si ricorda che per aprire<br />

con successo niathtrans dovrà, essere presente il file<br />

ri~athtrans.li11rary nella directory LIBS:.<br />

In alternativa il codice oggetto dovrà essere linkato con la<br />

libreria 1cmffp.lib e non sarà comunque in grado di trarre<br />

vantaggio dalla presenza di un coprocessore inateinatico.<br />

La libreria del linker può inoltre variare se si decide di<br />

utilizzare parametri assegnati a registri (linkare con<br />

Icriir.lib) o nel caso si utilizzino interi a 16 bit (linkare con<br />

1cnis.lib).<br />

Per quanto riguarda AztecC occorre, invece, compilare con<br />

l'opzione +ff e linkare con m.lil> per dati interi a 16 bit,<br />

ni32.lib per interi a 32 bit, ml.lil> per dati 16 bit e modelli<br />

LARGE e m132.lih per interi a 32 hit e modelli LARGE.<br />

Fast Floating Point e Assembler<br />

I'er quanto riguarda I'asseriibler il discorso si complica<br />

notevolmente, non solo perché le differenti stiutture clelle<br />

librerie di sistema e della linker library di conversione<br />

richiedono ruetodologie di passaggio di parametri comple-<br />

tamente diverse, rna soprattutto perché. dovendo definire<br />

costanti in virgola mobile oppure semplicemente attribuire<br />

un valore fast floating point ad un cleterminato registro,<br />

questo linguaggio non prevede alcuna pseudoprocedura<br />

che pei-riietta di scrivere direttamente nel sorgente il nume-<br />

ro in questione sotto forma della consueta rappresentazio-<br />

ne in virgola iilobile.<br />

Per questo è necessario ricorrere alla libreria di conversione<br />

FFP, e precisarilente alla funzione afp (ASCII to Floating<br />

Point), che perlilette di trasformare una stringa ASCII della<br />

quale viene passato l'indirizzo come parametro nell'equi-<br />

valente FFP. In questo modo è possil~ile, ad esempio,<br />

definire il numero e base dei logaritmi naturali nel modo<br />

seguente:<br />

e-FFP dc. l O<br />

e-ASCII dc.b '.27182818E+01', O<br />

Con il Lattice è opportuno includere anche i file proto e chiamare poi afp passando l'indirizzo di e-ASCII, memo-<br />

necessari, che perniettono di generare codici di chiamata rizzando il valore restituito in e-FFP, pronto per essere<br />

diretti. senza necessariamente ricorrere al linking con utilizzato. Coiiie dicevariio le funzioni di Aiiiiga.lib richie-<br />

<strong>Amiga</strong>.lib, sempre che non siano stati inclusi riferimenti alla dono un passaggio di parametri del tutto particolare in<br />

libreria di conversione. e in piu effettuano opportuni con- asseinbler, dal momento che questi non vengono passati<br />

trolli sui parametri passati alle funzioni (generalmente di nei consueti registri dO.dl e d2 etc.., nYa devono venire<br />

tipo float o long). impilati nello stack.<br />

Bisogna ricordarsi, inoltre, di includere il file libraries/ Questo data buffer gestisce i propri dati secondo la logica<br />

rnat11ffp.h relativo alle definizioni di entrambe le librerie 1,IFO (Last In, First Out). gestione tipica delle pile di elemen-<br />

FFP. Utilizzando le funzioni matematiche del cori~pilatoi-e. ti; questo fa sì che gli argomenti di queste funzioni debbano<br />

è possibile forzarlo ad utilizzare le entrate alle routine FFP venir caricati nello stack alla rovescia, in lilodo da venir poi<br />

del sistema operativo. per 111ezzo di appropriate opzioni di prelevati nell'ordine corretto.<br />

compilazione.<br />

Per caricare nello stack un valore a 32 bit, come appunto un<br />

Per quanto riguarda il Lattice ricordiamo che -ff impone al numero FFP. ci setvireriio di un istruzione del tipo:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!