Istituto Tecnico Industriale "Enrico Fermi"

Help On Chat

[Ritorna all'elenco sessioni]

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

[Ritorna all'elenco sessioni]