Pages: 1 ... 11 12 [13] 14 15 ... 24   Go Down
Print
Author Topic: AA 2010-2011: Quesiti a risposta aperta  (Read 82271 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
fabio_bm
Apprendista Forumista
**
Offline Offline

Posts: 108


« Reply #180 on: 16-06-2011, 17:26:47 »

Il bit A, o di riporto ausiliario, nel registro di flag del Pentium 4 indica un riporto oltre il bit 3 nella somma. Perché ciò è utile nella somma BCD (max 10 righe)?

Perchè nella somma BCD sono ammessi valori compresi tra 0 e 9, e quando otteniamo un valore maggiore di 9, abbiamo bisogno di usare il bit di riporto per non ottenere valori non validi.
Logged
fabio_bm
Apprendista Forumista
**
Offline Offline

Posts: 108


« Reply #181 on: 17-06-2011, 10:14:30 »

Confrontare almeno tre diverse modalità d'indirizzamento in termini dei loro effetti sulla lunghezza dell'istruzione e sul suo tempo di esecuzione (max 15 righe).

Indirizzamento immediato : Ha un tempo di esecuzione molto veloce, in quanto non deve essere effettuato il fetch dell'operando, perchè è già contenuto nell'istruzione; Tuttavia, la dimensione massima dell'operando è dipendente dalla grandezza del registro. La lunghezza dell'istruzione dipende dalla costante specificata.
Indirizzamento diretto : Il suo tempo di esecuzione è leggermente rallentato dall'accesso in memoria dell'indirizzo specificato, ed ha una lunghezza dell'istruzione maggiore (in media), in quanto si specifica l'indirizzo della memoria.
Indirizzamento a registro : Ha un tempo di esecuzione veloce, dovuto alla buona velocità di accesso ai registri, e lunghezza dell'istruzione breve, dovuto agli indirizzi brevi dei registri.
Logged
AlaskanMalamute
Matricola
*
Offline Offline

Gender: Male
Posts: 45


No Muos !! No War!!


« Reply #182 on: 21-06-2011, 00:36:03 »

Code:
Scrivere una procedura in un linguaggio assemblativo, con istruzioni per la moltiplicazione, per il calcolo di n! (max 10 righe).

Avrei un piccolo problema su questa domanda.
Dato che non ricordo istruzioni per la moltiplicazione diretta avevo pensato di implentarlo tramite dei cicli.
In pratica pensavo di salvare n in due registri (SP ed H), e sommare il valore del di SP tante volte quanto H (usando un apposito registroche si decrementa ad ogni passaggio fino ad egualiare H), salvare (alla fine del ciclo) il risultato su SP mentre H viene decrementato fino ad uno che sarà la fine del programma.

spero di essere stato chiaro Wink
Leggi bene la domanda.......La domanda chiede in un linguaggio assemblativo!!!!


IMPLEMENTATO CON ISTRUZIONI IJVM:

         BIPUSH n
           ISTORE n
           BIPUSH 1
           IF_ICMPEQ L1
           GOTO L2
L1:      GOTO  fine
L2:      POP
    ISTORE b
L3:    BIPUSH 1
    ILOAD b
    ISUB
         ISTORE n
         GOTO cond
cond:    BIPUSH 1
    ILOAD n
    IF_ICMPEQ fine
    GOTO MUL
MUL:     ILOAD r
         ILOAD b
    IADD
    ISTORE r
    ILOAD n
    BIPUSH 1
     ISUB
    ISTORE n
    BIPUSH 1
    ILOAD n
    IF_ICMPEQ fine
    GOTO MUL
FINE:    ISTORE r


Le variabili n,b,r sono locali...il risultato si troverà in r..

che ne pensa prof?
« Last Edit: 21-06-2011, 01:03:30 by AlaskanMalamute » Logged
Giuseppe Scollo
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 1.500


« Reply #183 on: 22-06-2011, 01:01:52 »

Nella somma BCD sono considerati validi i valori numerici compresi tra 0 e 9, e se  il bit di flag A del Pentium 4 fosse il riporto oltre il terzo bit, potremmo già uscire dal range di valori permessi con 3 bit, senza avere un riporto.
Questa è una metà della spiegazione, se capisco bene, esemplificabile con la somma 8+8 (che non ha riporto dal terzo bit, bensì dal quarto). L'altra metà sta nel fatto che potremmo non uscire dal range dei valori di cifra decimale, pur avendo un riporto dal terzo bit, esemplificabile con la somma 4+4. Il riporto dal terzo bit dunque non serve.
Logged
Giuseppe Scollo
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 1.500


« Reply #184 on: 22-06-2011, 01:18:27 »

Perchè nella somma BCD sono ammessi valori compresi tra 0 e 9, e quando otteniamo un valore maggiore di 9, abbiamo bisogno di usare il bit di riporto per non ottenere valori non validi.
L'argomento non è sufficiente, come esemplificato dalla somma 5+5: dà un valore maggiore di 9, ma non c'è riporto dal bit 3. Occorre tener conto di due condizioni, per la somma BCD:
  • se la somma mod 16 è maggiore o minore di 9: se è maggiore, va apportata una correzione che genera un riporto sul nibble a sinistra;
  • se c'è un riporto dal bit 3, ovvero la somma è maggiore o uguale a 16; anche in questo caso si ha un riporto sul nibble a sinistra, ma la correzione da apportare al nibble di destra è diversa che nel caso precedente (dunque, in ogni caso, per determinare la correzione giusta del nibble di destra occorre tener conto del valore del riporto dal bit 3).
Nel primo caso, si sottrae 10 (decimale) al nibble di destra, nel  secondo caso gli si aggiunge 6 (poiché il riporto dal bit 3 equivale a sottrargli 16, mentre gli va sottratto solo 10 decimale).
Logged
Giuseppe Scollo
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 1.500


« Reply #185 on: 22-06-2011, 01:28:39 »

Indirizzamento immediato : [...] la dimensione massima dell'operando è dipendente dalla grandezza del registro.
Quale registro?
Quote
Indirizzamento a registro : Ha un tempo di esecuzione veloce, dovuto alla buona velocità di accesso ai registri,
Vero. È però utile tenere in conto che se il dato non è già presente nel registro, occorre un'istruzione in più per caricarvelo. Il vantaggio in termini di velocità complessiva di esecuzione dei programmi dipende dunque dall'ottimizzazione dell'uso dei registri effettuata dal compilatore: tanto migliore quanto più frequente è il riuso come operandi di dati già presenti nei registri, senza necessità di accessi alla memoria.
Logged
Giuseppe Scollo
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 1.500


« Reply #186 on: 22-06-2011, 01:43:29 »

IMPLEMENTATO CON ISTRUZIONI IJVM:
IJVM non ha istruzioni per la moltiplicazione, il che spiega perché il suo programma richieda ben più di 10 istruzioni. In linea di principio, non è una buona idea risolvere un problema diverso da quello proposto, perlomeno in sede di esame (si rischia di conseguire la valutazione 0 perché il problema proposto non è stato affrontato; in altra sede, naturalmente, è un esercizio legittimo e utile quanto qualsiasi altro).

Se vuole usare la sintassi IJVM potenziata con una istruzione per la moltiplicazione, la cosa più ovvia da fare è dare a quest'ultima una sintassi simile a quella delle altre operazioni aritmetiche, quali IADD e ISUB. Dunque, ad es., la nuova istruzione IMUL (senza operandi) estrae i suoi due argomenti dalla cima dello stack, e al posto del secondo vi pone il risultato della loro moltiplicazione (che si troverà dunque in cima allo stack dopo l'esecuzione di IMUL).

Un suggerimento per affrontare meglio il problema, disponendo dell'istruzione IMUL: definire il calcolo del fattoriale mediante un metodo ricorsivo (attenzione dunque al passaggio del parametro: deve avvenire per il tramite dello stack, prima dell'invocazione ricorsiva del metodo nel suo stesso corpo).
Logged
Jack&Daxter
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 398



« Reply #187 on: 23-06-2011, 12:22:48 »

Ragazzi mi aiutate a dire se la spiegazione che ho dato io alla domanda è corretta? Se è sbagliata potreste dirmi cosa aggiungere alla domanda?

DOMANDA+RISPOSTA NON MOTIVATA
Code:
Le chiamate di sistema sono :le istruzioni del livello OSM escluse quelle del livello ISA

RISPOSTA MOTIVATA
Code:
Premesso che il livello ISA può essere considerato l'interfaccia fra l'HW e il SW
 e che le istruzioni del livello OSM si occupano di implementare il S.O e di aggiungere
 nuove istruzioni e caratteristiche di più alto livello rispetto a quelle fornite dal livello ISA.
L'insieme d'istruzioni del livello OSM contengono pressochè tutte le istruzioni
del livello ISA,così come l'insieme delle nuove istruzioni aggiunte dal S.O dette
 chiamate di sistema o system call.Una chiamata di sistema invoca un predeterminato
 servizio del S.O, a tutti gli effetti una sua istruzione.
« Last Edit: 23-06-2011, 12:25:55 by Jack&Daxter » Logged
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #188 on: 24-06-2011, 13:22:27 »

Sulle cache set-associative, il testo (sez. 4.5.1) sembra suggerire, ma non prescrive, che il numero di vie k sia una potenza di 2. C'è qualche motivo perchè sia meglio che lo sia?

Se un programma che utilizza la cache usa intensamente le parole comprese tra l'indirizzo 0 e x, si verificheranno costantemente dei conflitti e ogni riferimento alla memoria potrebbe potenzialmente espellere un elemento dalla cache. Una soluzione a questo problema problema è quello di consentire che in ciascun elemento della cache ci possano essere due o più linee.

Può andar bene?

Qualcuno saprebbe rispondere a questa domanda?
Code:
Nella microarchitettura Mic-1, il registro del bus  B è codificato in 4 bit della microistruzione, mentre i 9 bit del bus C sono mappati individualmente nel relativo campo. Perché?
« Last Edit: 24-06-2011, 16:26:02 by zElOtO » Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
Giuseppe Scollo
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 1.500


« Reply #189 on: 25-06-2011, 00:32:38 »

Sulle cache set-associative, il testo (sez. 4.5.1) sembra suggerire, ma non prescrive, che il numero di vie k sia una potenza di 2. C'è qualche motivo perchè sia meglio che lo sia?

Se un programma che utilizza la cache usa intensamente le parole comprese tra l'indirizzo 0 e x, si verificheranno costantemente dei conflitti e ogni riferimento alla memoria potrebbe potenzialmente espellere un elemento dalla cache. Una soluzione a questo problema problema è quello di consentire che in ciascun elemento della cache ci possano essere due o più linee.

Può andar bene?
No. Non risponde alla domanda posta (se per qualche motivo è meglio che il n. di vie k sia una potenza di 2). Inoltre, quanto asserito nella prima frase non ha molto senso: quanto vale x? Se x è un indirizzo nella prima linea di cache, non ci sarà alcun conflitto. Infine, non viene chiesto di spiegare perché sia utile avere cache a più vie. Per trovare la risposta corretta alla domanda, può chiedersi se ci sia qualche vantaggio nello scegliere una potenza di 2, anziché un numero che non lo è, quale numero di vie della cache.
Quote
Qualcuno saprebbe rispondere a questa domanda?
Lei no? Le suggerisco  di consultare la sez. 4.1.2 del testo, in particolare il paragrafo che inizia alla fine di p. 231 e finisce a p. 232, subito dopo la Figura 4.5.
Logged
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #190 on: 25-06-2011, 12:47:12 »

Sulle cache set-associative, il testo (sez. 4.5.1) sembra suggerire, ma non prescrive, che il numero di vie k sia una potenza di 2. C'è qualche motivo perchè sia meglio che lo sia?

Se un programma che utilizza la cache usa intensamente le parole comprese tra l'indirizzo 0 e x, si verificheranno costantemente dei conflitti e ogni riferimento alla memoria potrebbe potenzialmente espellere un elemento dalla cache. Una soluzione a questo problema problema è quello di consentire che in ciascun elemento della cache ci possano essere due o più linee.

Può andar bene?
No. Non risponde alla domanda posta (se per qualche motivo è meglio che il n. di vie k sia una potenza di 2). Inoltre, quanto asserito nella prima frase non ha molto senso: quanto vale x? Se x è un indirizzo nella prima linea di cache, non ci sarà alcun conflitto. Infine, non viene chiesto di spiegare perché sia utile avere cache a più vie. Per trovare la risposta corretta alla domanda, può chiedersi se ci sia qualche vantaggio nello scegliere una potenza di 2, anziché un numero che non lo è, quale numero di vie della cache.

Essendo il numero degli insiemi nella cache una potenza di 2, l’operazione di modulo può essere
effettuata considerando i log2(# insiemi nella cache) bit meno significativi, che sono utilizzati
come indice della cache. Il blocco può poi essere messo in un qualsiasi elemento dell’insieme: la
ricerca deve quindi essere effettuata su tutti gli elementi dell’insieme.
Si consideri ad esempio una cache set-associativa a 2 vie composta da 8 parole, e si supponga
ancora che lo spazio di indirizzamento della memoria sia compreso tra 0 e 29: un indirizzo di
memoria X corrisponde ad un elemento dell’insieme dato da X modulo 4 della cache. I log2(4) =
2 bit meno significativi dell’indirizzo di memoria sono utilizzati come indice della cache.
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
Giuseppe Scollo
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 1.500


« Reply #191 on: 25-06-2011, 14:01:46 »

Essendo il numero degli insiemi nella cache una potenza di 2, l’operazione di modulo può essere
effettuata considerando i log2(# insiemi nella cache) bit meno significativi, che sono utilizzati
come indice della cache. Il blocco può poi essere messo in un qualsiasi elemento dell’insieme: la
ricerca deve quindi essere effettuata su tutti gli elementi dell’insieme.
Dunque un "insieme nella cache", nella sua terminologia, consta delle linee di cache ospitate in una stessa riga della cache. Il numero di vie della cache specifica perciò la massima cardinalità di ciascuno di tali insiemi (ovvero il n. di "colonne" della cache, in una sua rappresentazione a matrice), non il n. di insiemi nella cache (che ne sarebbe il n. di "righe", nella rappresentazione suddetta). Come lei indica, una volta selezionato un insieme, cioè una riga, nella cache sulla base (di una porzione) dell'indirizzo di memoria, la ricerca va effettuata su tutti gli elementi dell'insieme: che la cardinalità massima di tale insieme sia o no una potenza di 2 non fa alcuna differenza.
Quote
Si consideri ad esempio una cache set-associativa a 2 vie composta da 8 parole, e si supponga
ancora che lo spazio di indirizzamento della memoria sia compreso tra 0 e 29: un indirizzo di
memoria X corrisponde ad un elemento dell’insieme dato da X modulo 4 della cache. I log2(4) =
2 bit meno significativi dell’indirizzo di memoria sono utilizzati come indice della cache.
L'esempio è irrilevante, e per mostrare come un numero di vie che non è una potenza di 2 possa andare altrettanto bene, consideri l'esempio simile ma con una cache set-associativa composta da 12 parole: l'indicizzazione da lei proposta va ancora bene se la cache è a 3 vie, in questo caso.
Logged
mozart
Matricola
*
Offline Offline

Posts: 9


« Reply #192 on: 25-06-2011, 16:59:37 »

Per quali istruzioni del linguaggio della IJVM l'interprete su MIC-1 esegue una microistruzione con il bit JAMZ=1?

Il bit di JAMZ viene utilizzato assieme al bit Z della ALU per determinare se si deve effettuare un salto condizionato, dal sistema di esercitazione risulta che le istruzioni della IJVM che che usano il bit JAMZ=1 sono 2, tuttavia, le istruzioni per il salto condizionato sono 3:
IFEQ, IFLT e IF_ICMPEQ.
Logged
Giuseppe Scollo
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 1.500


« Reply #193 on: 25-06-2011, 19:21:24 »

dal sistema di esercitazione risulta che le istruzioni della IJVM che che usano il bit JAMZ=1 sono 2, tuttavia, le istruzioni per il salto condizionato sono 3:
IFEQ, IFLT e IF_ICMPEQ.
Non solo dal sistema di esercitazione, ma anche dalla traduzione delle istruzioni IJVM in MAL per Mic-1 (v. la tabella in Figura 4.17 del testo), risulta che 2 delle istruzioni di salto condizionato usano JAMZ=1, mentre una (IFLT) usa JAMN=1.
Logged
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« Reply #194 on: 26-06-2011, 13:31:52 »

Quote
Qualcuno saprebbe rispondere a questa domanda?
Nella microarchitettura Mic-1, il registro del bus  B è codificato in 4 bit della microistruzione, mentre i 9 bit del bus C sono mappati individualmente nel relativo campo. Perché?
Lei no? Le suggerisco  di consultare la sez. 4.1.2 del testo, in particolare il paragrafo che inizia alla fine di p. 231 e finisce a p. 232, subito dopo la Figura 4.5.
In alcuni casi può essere utile scrivere l'output presente nel bus C in più di un registro, mentre in nessun caso ha senso abilitare nello stesso momento più di un registro sul bus B. Con pochi circuiti aggiuntivi è possibile ridurre il numero di bit necessari per la selezione delle sorgenti che alimentino il bus B. Ci sono soltanto nove possibili registri di input che possono guidare il bus B. Possiamo quindi codificare in 4 bit l'informazione del bus B e utilizzare un decodificatore per generare 16 segnali di controllo, 7 dei quali non vengono utilizzati.

.....  boh
Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
Pages: 1 ... 11 12 [13] 14 15 ... 24   Go Up
Print
Jump to: