16.06.2013 Views

2 - Amiga Magazine Online

2 - Amiga Magazine Online

2 - 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.

!<br />

lano la vecchia "amiga.libn con piccoli frammenti di codice<br />

destinati alla conversione dei parametri di chiamata dallo<br />

stile "C" (parametri sullo stack) a quello "<strong>Amiga</strong>OS" (para-<br />

metri nei registri). Nel caso tradizionale, su 68000, un pro-<br />

gramma P chiama con una JSR la routine glue R' che con-<br />

verte i parametri e chiama a sua volta la routine "vera" R<br />

con una JMP; R termina con una RTS che ritorna a P in to-<br />

tale, tre o quattro accessi in memoria. Su un PowerPC, P<br />

potrebbe chiamare R' tramite LR, R' potrebbe chiamare R<br />

tramite CTR e R ritornerebbe a P via LR (che non è stato<br />

modificato da R3: in totale O o 1 accessi in memoria!<br />

Le istruzioni del BP che fanno uso di questi registri sono<br />

relativamente poche, ma offrono molte varianti. Le due<br />

principali sono la "Branch", dall'ermetico mnemonico b, e<br />

la "Branch Conditional", dal prevedibile codice bc. La for-<br />

ma base indica salti relativi all'indirizzo corrente (con di-<br />

splacement dato dall'operando, come per le istruzioni BRA<br />

e Bcc della famiglia 68000), mentre l'aggiunta di una "a"<br />

all'opcode indica salti a indirizzi assoluti (quindi ba è equi-<br />

valente a JMP del 68000, mentre bca salta a un indirizzo<br />

assoluto se la condizione è soddisfatta, e non ha corrispon-<br />

denti nel set di istruzioni del 68000).<br />

I suffissi "lr" e "ctr" indicano, rispettivamente, che la desti-<br />

nazione del salto è contenuta nei registri LR e CTR, e pos-<br />

sono essere applicati soltanto ai salti condizionati ottenen-<br />

do bclre bcctr, questa non è però una limitazione dato che<br />

una delle condizioni esprimibili è "sempre true", e si ricade<br />

così nel caso di salto incondizionato. Per finire, una "l" ag-<br />

giunta al codice mnemonico indica che si vuole memoriz-<br />

zare in LR l'indirizzo di ritorno al momento del salto (atten-<br />

zione: la scrittura in LR awiene anche se la condizione non<br />

è soddisfatta). In ogni caso, la condizione da testare è codi-<br />

ficata (numericamente!) dagli argomenti.<br />

Nelle intenzioni dei progettisti, questo sistema di mnemoni-<br />

ci dovrebbe essere così logico che a ogni programmatore<br />

dovrebbe apparire ovvio che I'istruzione:<br />

owero "Branch if Not Equa1 to CTR and Link, testing CR2"!<br />

In confronto a questa ricchezza di opzioni (ricordiamo che<br />

quasi tutte si possono combinare liberamente, ottenendo<br />

un'infinità di istruzioni diverse), la chiamata a sistema in-<br />

carnata dall'istruzione sc, che non ha parametri, sembra<br />

quasi spoglia. E' compito del sistema operativo stabilire<br />

delle convenzioni di chiamata che indichino allo stesso SO<br />

quale servizio è stato richiesto e con quali parametri: que-<br />

ste informazioni potrebbero essere mantenute in uno spe-<br />

ciale blocco di memoria, oppure nei registri, o anche nei<br />

byte immediatamente seguenti l'istruzione stessa; in ogni<br />

caso, il processore non pone nessun vincolo.<br />

L'effetto di sc è quello di generare una vera e propria inter-<br />

rupt, e quindi è paragonabile all'istnizione TRAP incondi-<br />

zionata del 68000. Sebbene ancora non sia stato pubblicato<br />

uno standard riguardante le chiamate di sistema per Ami-<br />

gaOS su PowerPC, è lecito aspettarsi che esse facciano uso<br />

di una normale istruzione di salto (come già awiene per le<br />

chiamate a librerie) piuttosto che della più lenta sc, traendo<br />

profitto dal fatto che la maggior parte di <strong>Amiga</strong>OS "gira"<br />

normalmente in modo utente, e quindi non è necessario<br />

un costoso cambio di contesto al momento della chiamata.<br />

Le ultime istruzioni che il BP ci mette a disposizione con-<br />

sentono di effettuare operazioni logiche fra bit del CR. Tro-<br />

viamo così crand, cror, cmor e simili; ciascuna istruzione<br />

esegue l'operazione logica indicata fra i bit del CR specifi-<br />

cati nei primi due operandi, e pone il risultato nel bit del<br />

CR specificato dal terzo operando; per esempio:<br />

cror 0,2,10<br />

pone nel bit 10 (ovvero, il bit EQ di CR2) l'OR logico dei<br />

bit O e 2 (LT e EQ di CRO, rispettivamente), riflettendo così<br />

la condizione "minore o uguale". Anche in questo caso,<br />

una manciata di mnemonici estesi semplificano l'accesso a<br />

operazioni comuni; per esempio:<br />

bcctrl 4,10 crset Bx = creqv Bx,Bx,Bx<br />

istruisce il processore a saltare al contenuto del registro<br />

CTR se il flag EQ nel CR2 non è attivato, ponendo in ogni<br />

caso in LR l'indirizzo dell'istruzione successiva ... Per coloro<br />

che abbiano conservato parte della loro natura umana, e a<br />

cui la cosa non appaia affatto owia, sono disponibili una<br />

serie di mnemonici estesi che verranno tradotti (a cura<br />

dell'assemblatore) in un formato equivalente a quello visto<br />

sopra. Usando tali mnemonici, la condizione viene espres-<br />

sa nel nome dell'istruzione, anziché fra gli argomenti, co-<br />

sicché l'operazione precedente diventa un più interpretabi-<br />

le:<br />

bnectrl cr2<br />

imposta incondizionatamente un bit del CR (letteralmente:<br />

se il bit x è uguale al bit x, poni il bit x a l!). L'istnizione<br />

mcvf (Move Condition Register Field), che ha due argo-<br />

menti, si limita a copiare il nibble del CR indicato dal suo<br />

secondo argomento nella posizione del CR indicata dal pri-<br />

mo. cosicché:<br />

mcrf 2,O<br />

effettua l'assegnamento CR2 := CRO, preservando le condi-<br />

zioni ottenute dall'ultima operazione per riferimenti futuri.<br />

La prossima volta ci occuperemo degli altri procesmri A 1<br />

!

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

Saved successfully!

Ooh no, something went wrong!