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 />
!