(a)

Main1  PC=PC+1; fetch; goto(MBR)


insb1  PC=PC+1; fetch  //inizia estrazione di val
insb2  MAR=MBRU; rd     //inizia lettura parola di indirizzo ind
insb3  H=MBRU          //pone in H val (ponendo a 0 i tre byte piu' a sinistra)
insb4  MDR=MDR<<8      //shifta di un byte la parola di indirizzo ind
insb5  TOS=MDR=H OR MDR    //pone val nel byte lasciato libero e aggiorna TOS
insb6  MAR=SP=SP+1; wr //scrive il risultato in cima allo stack
insb7  PC=PC+1; fetch  //inizia estrazione prossima istruzione
insb8  goto Main1      //faccio qui il goto Main1 anziche in insb7 perche'
                       //comunque debbo attendere un ciclo per avere in MBR
                       //l'opcode della prossima istruzione

Notare che questa istruzione INSB va presa solo come possibile esercizio.
Infatti va contro la politica di IJVM di avere tutti indirizzi relativi, mentre
per noi l'argomento "ind" e' un indirizzo assoluto che fa riferimento alla
parte della memoria IJVM dedicata allo Stack. 



Giambattista Pisasale ha fatto un commento sulla soluzione proposta:
"l'ultimo commento secondo me è insensato, perchè avrebbe potuto benissimo
mettere il "goto Main1" nella "insb7", in quanto L'MBR che verrà
utilizzato per l'esecuzione di appunto Main1 sarà quello disponibile alla fine del 
ciclo di detta istruzione, come si può benissimo leggere nel Tanenbaum
(Cap. 4 Par. 3.1, ultimi due periodi), fra l'altro ciò completa anche la
risposta all'esercizio 26-b (esercizi sul Mic1,2,3...)."
Vi sembra che abbia ragione?
A me si.


Altra possibile soluzione proposta da Marco Cristaldi

pc=pc+1;fetch; //lettura di val
mar=mbru;rd    //lettura valore dell'indirizzo ind (indirizzo assoluto)
mar=sp=sp+1    //inizio operazione aggiornamento cima dello stack
h=mdr<<8       // shift m[ind]
pc=pc+1;fetch; //lettura istruzione successiva
tos=mdr=h or mbru;wr;goto main 1 //calcolo risultato e completamento operazione aggiornamento stack



(b)
 Vedi testi
~  
