Ora ke avete visto un primo esempio di interpretazione di una istruzione è il caso di introdurre alcune istruzioni in più, per poter avere un set Assembler completo!
Allora, per ora abbiamo le istruzioni aritmetike, ci servono altre due classi di istruzioni:
1) Quelle di "salto"
2) Quelle di accesso in memoria
Per capire le istruzioni di salto dobbiamo soffermarci un attimo su come avviene l'esecuzione di un programma... come potete immaginarvi un programma è sostanzialmente una successione di istruzioni e un insieme di dati su cui fare operazioni, un po come una ricetta dove i dati sono gli ingredienti, le istruzioni sono le cose da fare e il processore è il nostro chef! Ke ne dici azarius, ti piace l'esempio?
In generale il processore esegue le istruzioni nell'ordine in cui sono scritte, xò in certe occasioni si ha la necessità di "saltare" da una istruzione ad un'altra ke nn è la diretta successiva... ci servono quindi delle istruzioni ke ci consentano di dire al processore "ora invece ke eseguire la prossima istruzione vai direttamente a quest'altra"... supponiamo quindi di avere un'istruzione del tipo :
"Vai a, indirizzo"... i primi 8 bit dell'istruzione diranno al processore ke si trova davanti a un'istruzione di salto, i restanti 24 gli diranno a quale istruzione deve saltare... x ora non siamo abbastanza esperti per dare un significato all'indirizzo presente nella istruzione ke dice al processore dove trovare l'istruzione da eseguire, immaginate cmq ke si tratta di un indirizzo di memoria.
A questa istruzione ne aggiungiamo un'altra più o meno uguale dove al posto dell'indirizzo c'è un numero corrispondente ad un registro in cui si trova l'indirizzo della istruzione da eseguire, l'istruzione sarà quindi del tipo "Vai a, registro contenente l'istruzione"
Queste due istruzioni ci permettono quello ke si kiama "salto incondizionato", cioè sono delle istruzioni ke semplicemente dicono al processore "vai qui!"... ma esistono delle situazioni in cui bisogna decidere se saltare o no... tornando all'esempio della ricetta, spesso trovate scritto "mescolare fino a quando l'impasto è ben amalgamato", analizziamo questa cosa: c'è una cosa da fare (mescolare) e una cosa da controllare ke ci dice quando smettere di fare quella operazione e passare alla prossima (l'impasto deve essere ben amalgamato)... ebbene spesso in un programma ci si trova davanti alla necessità di un meccanismo simile a questo, i più pratici avranno certamente riconosciuto il famigerato "ciclo iterativo" ke si compone di una condizione (detta tecnicamente "guardia") e di una serie di cose da fare fino a quando la guardia rimane vera, quando la guradia diventa false si smette di fare quelle operazioni e si passa alle successive... ora cerco di farvi un esempio facile, vi scriverò una serie di istruzioni ke possono essere un programmino facile facile; ogni istruzione avrà davanti un numero detto etiketta ke ci servirà per riferirci a quella istruzione in particolare e ci permetterà di "andare" direttamente a quella istruzione con un salto:
0 - scrivi 0 nel registro 3
1 - se il contento del registro 1 è minore del contenuto del registro 2 allora salta all'istruzione 5
2 - sottrai dal contenuto del registro 1 il contenuto del registro 2 mettendo il risultato nel registro 1
3 - aumenta di 1 il contenuto del registro 3
4 - se il contento del registro 1 è maggiore del contenuto del registro 2 allora salta all'istruzione 2
5 - .......
Supponete ke nei registri 1 e 2 siano stati scritti precedentemente dei valori con l'unico vincolo ke quello scitto nel registro 1 sia maggiore di quello scritto nel registro 2. Ora vi lascio con un interrogativo pesante... cosa fa questo semplice programmino? Cosa conterranno alla fine i registri 1 e 3? Se avete difficoltà a capire per bene il programmino fatevi un disegno in cui ogni istruzione è rakkiusa in un cerchietto e inserite delle frecce da un'istruzione all'altra se c'è la possibilità ke le due istruzioni possano essere eseguite una di seguito all'altra... questo è suppergiù il "diagramma di flusso" del programma