PROVA SCRITTA DI CALCOLATORI ELETTRONICI DEL 4/7/2013
(Tempo a disposizione: 3 ore)
TRACCIA A
ESERCIZIO 1 (Tutti):
Si realizzi una rete sequenziale sincrona R con un ingresso X ed una uscita Z. La rete esegue l'AND sequenziale di due
numeri a 2 bit. In particolare, in 4 istanti di tempo consecutivi, la rete riceve i due operandi, contemporaneamente alla
ricezione dell'ultimo bit del secondo operando restituisce il primo bit del risultato e nel successivo istante di tempo restituisce
il secondo bit del risultato. Inoltre, le sequenze di 4 bit (riconosciute come coppie di operandi) sono sovrapposte di un bit,
ovvero il secondo bit del secondo operando di un'operazione è anche il primo bit del primo operando della successiva
operazione.
Segue un possibile funzionamento di R:
t: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
X: 001011111110101 0…
Z: 0000 0 00101100 1 01 0
La rete riceve negli istanti di tempo t=0 e t=1 il primo operando della prima operazione, ovvero “00” e negli istanti di tempo
t=2 e t=3 il secondo operando, ovvero “10”. Il risultato dell'operazione è “00” che viene restituito negli istanti t=3 e t=4. La
successiva operazione sarà eseguita sugli operandi ricevuti negli istanti di tempo t=3 e t=4 (valore dell'operando “01”) e
negli istanti t=5 e t=6 (valore dell'operando “11”). Il risultato, restituito negli istanti t=6 e t=7 è “01”, e così via.
ESERCIZIO 2 ( DM270 – 9CFU ):
Estendere il set di istruzioni della macchina a stack con l’operazione
ADDODD, definita come segue. In cima allo stack è presente il puntatore
alla cima di una lista L1 e, nella locazione precedente, il puntatore alla
cima di una lista L2. Si assuma che la lunghezza di L2 sia maggiore o
uguale alla lunghezza di L1. L'istruzione compie la seguente operazione:
se l'i-esimo elemento della lista L1 è pari, un nuovo elemento il cui valore
è pari all'i-esimo elemento di L1, deve essere inserito in quella che era la
posizione i della lista L2 prima di qualsiasi inserimento.
Si consideri l'esempio riportato in figura. Sulla sinistra è riportata la
situazione della memoria dati prima dell'esecuzione dell'istruzione.
Essendo l'elemento in posizione 1 di L1 pari, un nuovo elemento deve
essere allocato nell'heap e inserito in posizione 1 di L2. La situazione
della memoria dati dopo l'esecuzione dell'istruzione è riportata sulla
destra.
ESERCIZIO 2 ( DM270 – 6CFU ):
Estendere il set di istruzioni della macchina a stack con l’operazione
COMPACT, definita come segue. In cima allo stack è presente il
puntatore ad un array A. L'istruzione compie la seguente operazione: se
l'i-esimo elemento dell'array A è nullo (ossia, è uguale a 0) deve essere
rimosso dall'array, ovvero l'array deve essere ricompattato e la sua
lunghezza decrementata di un'unità.
ESERCIZIO 2 ( DM509 ):
Estendere il set di istruzioni della macchina ad accumulatore con l’operazione SUM16@ X, definita come segue. Nella
locazione di indirizzo X è presente l'indirizzo di un vettore la cui lunghezza è specificata nell'accumulatore. Il primo elemento
del vettore sarà pertanto contenuto nella locazione di indirizzo M[X]. Al termine dell’istruzione, l'accumulatore dovrà
contenere la somma degli elementi multipli di 16 presenti nel vettore.
Ad esempio, si consideri la seguente situazione. L'accumulatore contiene 5 ed il contenuto della RAM è quello specificato di
seguito (per semplicità sono state riportate solo le prime 16 locazioni di memoria). Al termine dell'istruzione SUM16@ 2,
l'accumulatore conterrà il numero 80, ottenuto come somma di M[10] e di M[12].
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
7 14 9 8 54 62 34 12 31 15 32 34 48 18 16 35
ESERCIZIO 3 (DM 270 – 9CFU/6CFU ):
Scrivere una procedura assembly che, data una matrice M di word di
dimensione 5x5, restituisca una matrice R (di dimensione 5x2) contenente
le sole colonne di indice dispari di M. Scrivere, inoltre, il programma
principale che invochi opportunamente la suddetta procedura.
Ad esempio si consideri la matrice M riportata sulla destra, la procedura
dovrà restituire la matrice R riportata sulla sinistra.