
- 1: Sezione di inserimento istruzioni
- 2: Finestra registri + variabili
- 3: Finestra di esecuzione
- 4: Schema concettuale
1. Sezione di inserimento istruzioni
Partendo dall'alto, questa sezione include 4 bottoni:
Ogni istruzione è denotata, sulla sinistra, da un indice, a puro scopo indicativo all'utente, seguito da 2 caselle di testo: LABEL e ISTRUZIONE.
NOTA: passare il cursore del mouse sopra l'indice di ogni istruzione, rende possibile l'eliminazione della stessa, semplicemente cliccando il bottone ivi apparso.
Partendo dall'alto, questa sezione include 4 bottoni:

- + : Aggiunge una nuova istruzione vuota, in coda alle altre
- - : Rimuove l'ultima istruzione dalla lista
- Start: Avvia l'esecuzione delle istruzioni (blocca ogni altra modifica)
- Stop: Interrompe l'esecuzione delle istruzioni

Ogni istruzione è denotata, sulla sinistra, da un indice, a puro scopo indicativo all'utente, seguito da 2 caselle di testo: LABEL e ISTRUZIONE.
- In label è possibile inserire una sequenza alfanumerica, di max 6 caratteri identificativa dell'istruzione. Utile qualora si vogliano eseguire salti.
-
In istruzione è, invece, possibile inserire tra le seguenti:
(ATTENZIONE: rispettare il formato nella sua interezza, vedi spazi e parentesi)-
add r[1-7], r[0-7], r[0-7]
Dove tra parentesi si seleziona un unico valore, dal range permesso
Es: add r4, r3, r5 --- pseudo codice: r4 = r3 + r5
-
add r[1-7], r[0-7], #[1-3] cifre numeriche
Es: add r4, r3, #123 --- pseudo codice: r4 = r3 + 123
-
subtract r[1-7], r[0-7], r[0-7]
Es: subtract r2, r1, r3 --- pseudo codice: r2 = r1 - r3
-
subtract r[1-7], r[0-7], #[1-3] cifre numeriche
Es: subtract r2, r1, #15 --- pseudo codice: r2 = r1 - 15
-
store r[1-7], label
Dove label fa riferimento ad una variabile di memoria dichiarata (vedi giù).
Es: store r2, somma --- pseudo codice: somma <- r2
-
store r[1-7], d(r[1-7])
Dove d è un numero di max 2 cifre, e multiplo di 4
Es: store r2, 12(r5) --- pseudo codice: 12+[r5] <- r2
-
load r[1-7], label
Dove label fa riferimento ad una variabile di memoria dichiarata (vedi giù).
Es: load r2, somma --- pseudo codice: r2 <- [somma]
-
load r[1-7], d(r[1-7])
Dove d è un numero di max 2 cifre, e multiplo di 4
Es: load r2, 12(r5) --- pseudo codice: r2 <- [12+[r5]]
-
branch_if_ [r[0-7]] op [r[1-7]] label (NOTA: tra branch_if_ e r[], vi è uno, e un solo carattere " ")
Dove op è tra le seguenti (< / = / > / <= / >=), e label fa riferimento ad una ISTRUZIONE, precedente o successiva all'istruzione stessa.
Es: branch_if_ [r3] >= [r0] CICLO --- pseudo codice: SE [r3] >= [r0] allora salta verso l'istruzione denotata dalla label CICLO
-
add r[1-7], r[0-7], r[0-7]
NOTA: passare il cursore del mouse sopra l'indice di ogni istruzione, rende possibile l'eliminazione della stessa, semplicemente cliccando il bottone ivi apparso.

2. Finestra dei registri e delle variabili
Tramite questa finestra è possibile visionare il contenuto a run-time di tutti i registri, e di tutte le variabili di cui il programma fa uso.
I registri utente sono quelli di uso generale, r0-r7.
I registri del processore sono quelli da rA a PC-Temp.
Tutti quelli sopra-citati vengono rappresentati nel processore in parole da 32bit. A scopo puramente visivo, sulla struttura della pagina, si è deciso di esprimerli in formato esadecimale, permettendone così la rappresentazione intera.
Per quanto riguarda il registro PC, si è deciso di raffigurarlo in cifre decimali, semplificandone l'associazione con gli indirizzi delle istruzioni.
Concludendo, il registro IR, che è suddiviso in 4 sezioni, durante l'esecuzione, verrà raffigurato in 2 modi diversi, simili tra loro, a seconda dell'istruzione:
Premendo il tasto MEMORIA si passa invece alla finestra delle VARIABILI:
In basso vengono visualizzati nuovi bottoni:
In un formato simile a quello delle istruzioni, è possibile inserire una label, alfanumerica, di max 6 caratteri.
Per quanto riguarda il contenuto, invece, è possibile inserire unicamente valori numerici, di max 10 cifre. O è possibile lasciarne il contenuto vuoto, se ad esempio, si vuole effettuare uno store su di essa.
DOPO aver avviato l'esecuzione, la finestra cambia aspetto:
Le istruzioni inserite dall'utente, vengono caricate in memoria, che permette unicamente la lettura dei dati, e non più la modifica.
ATTENZIONE: a prescindere dal modo di indirizzamento (che sia immediato, tramite label, o con indice e spiazzamento, 4(r1) ), è sempre necessario aver dichiarato la variabile di riferimento prima di avviare l'esecuzione. Infatti:
Tramite questa finestra è possibile visionare il contenuto a run-time di tutti i registri, e di tutte le variabili di cui il programma fa uso.
I registri utente sono quelli di uso generale, r0-r7.
I registri del processore sono quelli da rA a PC-Temp.
Tutti quelli sopra-citati vengono rappresentati nel processore in parole da 32bit. A scopo puramente visivo, sulla struttura della pagina, si è deciso di esprimerli in formato esadecimale, permettendone così la rappresentazione intera.
Per quanto riguarda il registro PC, si è deciso di raffigurarlo in cifre decimali, semplificandone l'associazione con gli indirizzi delle istruzioni.
Concludendo, il registro IR, che è suddiviso in 4 sezioni, durante l'esecuzione, verrà raffigurato in 2 modi diversi, simili tra loro, a seconda dell'istruzione:


-
Nel primo caso, sulla sinistra, il contenuto viene suddiviso nel seguente modo:
reg.source 1 | reg.source2 | reg.destination | cod.op.
Utilizzato nelle istruzioni a 3 operandi (Es: add r3, r1, r2).
source1, source2 e destination sono i registri, e per rappresentarli si utlizza un formato binario a 3 bit (2^3 = 8, coprendo quindi tutti i registri utente).
cod.op. indica invece il codice dell'istruzione associata, non utile ai fini del programma. -
Nel secondo caso, sulla destra, il contenuto viene suddiviso nel seguente modo:
reg.source | reg.destination | operando immediato | cod.op.
Utilizzato nelle istruzioni con val. immediato(Es: add r1, r3, #50).
source e destination sono i registri, e per rappresentarli si utlizza un formato binario a 3 bit.
Mentre operando immediato raffigura il valore immediato in formato binario. Ai fini del programma si è deciso di raffigurare tali valori con lunghezza di 10 bit.
Premendo il tasto MEMORIA si passa invece alla finestra delle VARIABILI:

- + : Aggiunge una nuova variabile vuota, in coda alle altre
- - : Rimuove l'ultima variabile dalla lista
- REGISTRI: Ritorna alla finestra REGISTRI, non cancella i dati inseriti
In un formato simile a quello delle istruzioni, è possibile inserire una label, alfanumerica, di max 6 caratteri.
Per quanto riguarda il contenuto, invece, è possibile inserire unicamente valori numerici, di max 10 cifre. O è possibile lasciarne il contenuto vuoto, se ad esempio, si vuole effettuare uno store su di essa.
DOPO aver avviato l'esecuzione, la finestra cambia aspetto:

ATTENZIONE: a prescindere dal modo di indirizzamento (che sia immediato, tramite label, o con indice e spiazzamento, 4(r1) ), è sempre necessario aver dichiarato la variabile di riferimento prima di avviare l'esecuzione. Infatti:
-
In caso di errore con indirizzi immediati, l'esecuzione viene fermata ancor prima di partire, e un messaggio indicherà l'istruzione di errore, dando la possibilità di correggere:
- In caso di errore con indirizzi dati da indice e spiazzamento, l'esecuzione non viene fermata fino a quando non si esegue il passo dell'istruzione da cui nasce l'errore, e ciò comporta l'arresto inaspettato del programma.
3. Finestra di esecuzione
Prima di descriverne le funzioni, si necessita di una piccola nozione sul funzionamento del programma:
L'esecuzione di ogni istruzione, oltre ad essere divisa in fasi, avviene in diversi passi, ossia la più piccola azione, utile ai fini del programma.
Es: la Fase 1 di ogni istruzione è effettuata in 4 passi.
Si può dividere in 2 aree diverse:
Prima di descriverne le funzioni, si necessita di una piccola nozione sul funzionamento del programma:
L'esecuzione di ogni istruzione, oltre ad essere divisa in fasi, avviene in diversi passi, ossia la più piccola azione, utile ai fini del programma.
Es: la Fase 1 di ogni istruzione è effettuata in 4 passi.
Si può dividere in 2 aree diverse:
-
Area 1, messaggi di output:
- Fase 1: Prelievo istruzione
- Fase 2: Decodifica istruzione
- Fase 3: ALU
- Fase 4: Accesso in memoria
- Fase 5: Registro di destinazione
-
Area 2, bottoni di esecuzione:
- NEXT: Prosegue al passo successivo
- PREV: Ritorna al passo precedente
- OP+: Prosegue fino al primo passo della prossima istruzione
- OP-: Ritorna all'ultimo passo dell'istruzione precedente
4. Schema concettuale
Semplicemente, lo schema rappresenta i vari percorsi e le varie scelte effettuate dal processore, passo per passo. Rendendo semplice seguire il percorso logico di ogni istruzione.
Semplicemente, lo schema rappresenta i vari percorsi e le varie scelte effettuate dal processore, passo per passo. Rendendo semplice seguire il percorso logico di ogni istruzione.
5. Sezione si Salvataggio/Caricamento
Tramite questa piccola interfaccia, è possibile salvare su file il lavoro svolto, o caricarlo da un file precedentemente salvato.

-
SALVATAGGIO: Semplicemente premendo il tasto "SAVE", viene richiesto il download di un file ".txt", contenente le operazioni e le variabili inserite.
NOTA: vi devono essere un minimo di 2 operazioni affinchè sia possibile salvare - CARICAMENTO: Per poter caricare un file di testo, bisogna per prima cosa premere il pulsante "Scegli file", che apre una schermata del S.O. dove viene richiesto di scegliere il file da caricare. Una volta localizzato e confermato, premere il tasto "LOAD", e tutto il contenuto verrà automaticamente inserito come operazioni e variabili.
ERRORI
Come notato nel paragrafo 2, il programma è dotato di un sistema di controllo su vari errori sintattici o logici, che ne evidenzia l'istruzione incriminata:
Indicando anche il tipo di errore, tramite un messaggio che compare a schermo per qualche secondo.
Come notato nel paragrafo 2, il programma è dotato di un sistema di controllo su vari errori sintattici o logici, che ne evidenzia l'istruzione incriminata:
