Chat del 16 Aprile 2023 dalle 18:31:27 alle 19:14:31
- Francesco DA SILVA
- Ma se ci fosse scritto come "la cella di memoria che dista xxx byte dall\'indirizzo di memoria..." potrebbe anche essere un indirizzamento relativo no?
- Stefano SALVI
- Da Silva: in questo caso la frase sarebbe "vado all\'istruzione che dista .... dalla posizione corrente". Nell\'altro caso parlavo di cella (dato/variabile) qui di istruzione, dato che è un salto.
- Francesco DA SILVA
- Ok grazie
- Stefano SALVI
- Buona sera!
- Francesco DA SILVA
- Buonasera
- Emanuele ROSSATO
- Buonasera prof
- Leonardo AFFINI
- buonasera prof
- Stefano SALVI
- Partite pure con le domande.
- Marco CONCARI
- buonasera prof
- Roberta ZACCAGNI
- buonasera
- Francesco DA SILVA
- Volevo chiederle se poteva rispiegare brevemente come funzionasse l\'indirizzamento stack, in particolare il comando *SP--=R e R=*++SP.
- Stefano SALVI
- Da Silva: per prima cosa lo stack è un\'area di memoria nella quale si insieriscono dati in sequenza, e quando si recuperano (sempre in sequenza, si recuperano dall\'iultimo inserito al primo. Per implementarla (in C) possiamo usar eun puntatore (chiamiamolo char *SP) che punta sempre alla prima cella vuota delll\'area.
- Leonardo AFFINI
- Io invece volevo chiederle se potesse rispiegare cosa fanno le labels magari con l\'esempio che è presente sulle slide che è: here: ADD 33
- Tommaso PARALUPPI
- Buona sera prof
- Emanuele ROSSATO
- Le volevo fare una domanda riguardante i diversi metodi di indirizzamento: nel caso fossimo in presenza di un indirizzamento indicizzato, ovverosia l\'utilizzo di un array, bisogna anche segnare l\'indirizzamento indiretto dato che l\'indicizzato utilizza un puntatore e registro per la coppia di registri o possiamo segnare solamente l\'indicizzato?
- Stefano SALVI
- Da Silva (2): la prima "formula" (che può essere spezzata in *SP = R; SP--) mette il valore di R nella prima cella vuota e poi sposta il puntatore alla prossima cella vuota;
- Marco CONCARI
- volevo chiederle cosa c\'è in riassunto all\'interno della tabella dei pubblici
- Tommaso PARALUPPI
- Fabio Taraschi non è potuto entrare a causa di un imprevisto. Le domande che le vorrebbe porre gliele farò io.
- Stefano SALVI
- Da Silva (3): la seconda espressione R=*++SP che può essere spezzata in SP++; R=*SP, si posizione sull\'ultima cella occupata e ne recupra il valore, di fatto liberandola.
- Affini: allarghiamo un po l\'esempio: here: ADD 33 /n cmp 99\n jl here; dove i \n separano le righe. Questa sequenza la potremmo sccrivere in C: char A; do { A += 33; } while (A < 99);
- Affini: Ti chiarisce meglio le idee? Alla fine del while devo tornare (se...) alla graffa di apertura che ho contrassegnato con la label \'here\'
- Leonardo AFFINI
- ok si prof adesso ho le idee un po\' più chiare, grazie mille
- Stefano SALVI
- Rossato: l\'indicizzato implica il Diretto (per l\'array) ma poi viene utilizzato il Registro per indicare la copia di registri che si usano come indice (o l\'implicito de abboiamo un registro indice specializzato, ad esempio IX)
- Emanuele ROSSATO
- Quindi in verifica possiamo evitare di specificare tutte le modalità o comunque dobbiamo segnarle?
- Stefano SALVI
- Concari: nella tabella dei pubblici venfgono copiati tutti i simboli (dalla tabella dei simbooli) che interessano agli altri sorgenti del progetto, ad esempio i sibìmoli relativi alle funzioni di questo sorgente che possono venire utilizzati da altri sorgentoi del progetto, oppure le variabili "pubbliche".
- Paraluppi: Ok.
- Marco CONCARI
- ok grazie prof
- Stefano SALVI
- Rossato: io ti darò una particolare istruzione e tu dovrai segnare le modalità in base all\'istruzione che ti do.
- Francesco DA SILVA
- Volevo chiederle se poteva fare un altro esempio di pseudoistruzione e chiarire la differenza tra label e symbol, grazie
- Stefano SALVI
- Rossato: tutti i metodi relativi alla particolare istruzione.
- Emanuele ROSSATO
- ok grazie
- Stefano SALVI
- Da Silva: parto dalla seconda: Simbolo è un nome a cui viene associato un valore. Label è un modo per generare un simbolo - il simbolo è il nome della label e il suo valore è la posizione in memoria del punto in cui l\'ho scritta.
- Tommaso PARALUPPI
- Come faccio a riconoscere che bisogna usare il metodo di indirizzamento indicizzato?
- Stefano SALVI
- Da Silva: possibili pseudoistruzioni sono \'org\' che indica il punto di partenza del pezzo di codice che segue, DB che inserisce in memoria un valore specificato (db 22 mette in memoria un byte che vale 22); EXTERN che dichiara che una certa label non è presente nel sorgente ma esiste altrove; public che indica che il simbolo indicato va messo nella tabella dei pubblici.
- Francesco DA SILVA
- Grazie
- Stefano SALVI
- Paraluppi: dalla descrizione dlll\'istruzione che ti faccio. Se ad esempio dico "l\'elemento dell\'array" oppure "la cella di memoria che dista xxx byte dall\'indirizzo di memoria ..." tu capisci che è un indicizzato.
- Da Silva: Gli indirizzi relativi sono sempre relativi ad un registro che contienen un indirizzo. Per quello che abbiamo visto finora sono sempre relativi al PC (in altri casi ad SP).
- Tommaso PARALUPPI
- Ok prof, tutto chiaro ora, grazie per la spiegazione.
- Leonardo AFFINI
- prof scusi le istruzioni di jump sono solamente quelle che cabiano valore solamente se si verificano certe condizioni?
- Francesco DA SILVA
- Nell\'IR ci andrà un numero che conterrà tutte le istruzioni che scriviamo con i blocchi blu, per esempio opcode-Alow-Ahi giusto?
- Stefano SALVI
- Affini: esiste anche un\'istruzione di jump che non ha condizioni (ad esempio quella che serve per \'saltare via\' l\'else in un IF)
- Leonardo AFFINI
- Ok prof grazie mille
- Stefano SALVI
- Da Silva: nell\'OR ci va solo il primo byte (visto che l\'abbiamo fatto largo un byte) dell\'istruzione. Quello che di solito chiamo "opc" oppure con il mnemonico dell\'istruzione. Gli altri sono parametri e vanno altrove, a seconda dell\'itruzione.
- Da Silva: quando comincio ad eseguire un\'istruzione per prima cosa prendo l\'opcode dalla memoria e lo copio nell\'IR (instruction fetch).
- La maggioranza silenziosa non ha domande?
- Francesco DA SILVA
- Però nello schema della CPU, per esempio per fare A = B + C, l\'IR legge solo "00" e poi compie tutti i passaggi
- Stefano SALVI
- Da Silva: 00, che è il primo byte dell\'istruzione, è appunto l\'OPCODE, quel numero che per la CPU vuol dire "fai la somma tra queste tre variabili", seguono gli indirizzi delle tre variabili.
- Francesco DA SILVA
- ahh ok ho capito, grazie
- Stefano SALVI
- Da Silva: il fatto poi che negli esempi tutte le istruziuoni che faccio abbiano l\'opcode \'00\' è pura pigrizia. Quando ho implemetato l\'intero set le istruzioni hanno tutte opcode diversi.
- Da Silva: nello schema della CPU completa lo vedi.
- A che punto siamo? Ci sono ancora molte domande? O le avete finite?
- Francesco DA SILVA
- Come scriviamo sottoforma di microcodice una condizione per la quale la CPU deve fare qualcosa? Ho visto che ha scritto esplicitamente "se..." nel powerpoint nella lista delle fasi
- Stefano SALVI
- Da Silva: ci deve essere della logica nell\'ID&T, attivata da un \'filo\' interno nell\'ID&T stesso, che se attivato controlla un bit dei FLAG e termina l\'istruzione (resetta il contatore interno dei cicli) se uno o più bit dei FLAG hanno un certo valore (1 oppure 0).I salti cndizionati si implementano così.
- Francesco DA SILVA
- va bene grazie
- Stefano SALVI
- Da Silva: quel \'se\' con i bit da controllare corrisponde a quel filo.
- Si sta facendo tardi e le domanda cominciano a languire. Proporrei di terminare qui. Sempre se non avetealtri dubbi.
- Francesco DA SILVA
- va bene
- Leonardo AFFINI
- Va bene prof
- Stefano SALVI
- Ok, allora buona cena, buon riposo ed in bocca al lupo.
- Emanuele ROSSATO
- va bene prof, buona serata
|