Chat del 14 Maggio 2021 dalle 18:29:36 alle 19:13:12
- Stefano SALVI
- Eccoci qua...
- Riccardo SEGALA
- Buonasera
- Aurora Maria GUERRERA
- buonasera
- Gabriele MASOTTO
- Salve
- Thomas BADIALI
- Buonasera
- Francesca ROSA
- salve
- Stefano SALVI
- Buona sera. Cominciamo pure con le domande.
- Gabriele MASOTTO
- Partiamo dal presupposto che non ho capito nulla di nulla del nulla of the nulla of the NULL constant
- Gaganpreet SINGH
- Buona sera
- Gabriele MASOTTO
- Ok no scherzo
- Stefano SALVI
- Ma dai, Masotto...!
- Mirko LANA
- Buonasera
- Riccardo SEGALA
- allora, io volevo chiederle, se nel nostro modello lo stack parte dall\'alto e va verso il basso, l\'heap dove parte?
- Aurora Maria GUERRERA
- prof ma dopo i label, quando scriviamo il nome della variabile (VARIABILE: ) dopo i due punti mettiamo l\'indirizzo (es 33) ?
- Ivan BERNARDI
- Buonasera professore
- Diego GRAZIATI
- Buongiorgio
- Stefano SALVI
- Guerrera: Per definire una variabile potresti utilizzare una pseudoistruzione che sposti avanti il puntatore corrente di 1 posizione (se la variabile è di un byte, semplice).
- Mattia CHINAGLIA
- Salve prof
- Aurora Maria GUERRERA
- quindi ad esempio con EQU ?
- Stefano SALVI
- Quidni dopo la label metti la pseudoistruzione e la label prende come valore l\'indirizzo della variabile.
- Gabriele MASOTTO
- Io non ho capito come fa a sapere quale sia l\'indirizzo della variabile però
- Diego GRAZIATI
- Prof, lo stack, prima che possiamo "giocarci" con POPA e PUSHA, dobbiamo inizializzarlo al valore del PC, oppure deve essere caricato un valore dalla memoria, oppure entrambi, a nostra discrezione?
- Riccardo SEGALA
- Io volevo chiederle, se nel nostro modello lo stack parte dall\'alto e va verso il basso, l\'heap, per crescere farà il contrario, cioè va verso l\'alto, ma da dove parte?
- Stefano SALVI
- In altri casi potresti avere deciso la posizione della variabile (ad esempio per le "variabili" di I/O che dicevo in laboratorio stamattina) allora invece di usare una label, la variabile la definisci con un "=" o una "equ", perché l\'indirizzo è prederterminato.
- Gabriele MASOTTO
- Cioè se io scrivo VAR: 33 cosa vuol dire?
- Aurora Maria GUERRERA
- aahh ok va bene, sono due cose circa diverse va bene
- Gabriele MASOTTO
- O non vuol dire nulla?
- Ed è sbagliato?
- Ivan BERNARDI
- quindi var= dice in che cella metto la var, var:.db la inizializza con un valore, var.blkb serve per metterla nella cella corrente?
- Stefano SALVI
- Masotto: ipotizziamo che tu metta le variabili alla fine dle programma. Quindi, la prima variabile è al primo indirizzo libelro dopo le istruzioni assembler. Tu usi la pseudoistruzione che "libera" una cella, quindi meti la nuova label e definsci al scecopnda variabile, e così viia.
- Graziati: prima di PUSH e POP lo stack va inizializzato, am non la valor edel PC, ma alla fine di un\'area libera della memoria. Spesso all\'iultima cella di memoria installata.
- Diego GRAZIATI
- ok
- Gabriele MASOTTO
- Quindi sostanzialmente dopo i : cosa dovrei metterci?
- Stefano SALVI
- Andandf a rispondere un po\' a caso..
- Diego GRAZIATI
- Quindi poi decrementiamo con POPA o incrementiamo con PUSHA a nostro piacere
- Stefano SALVI
- Segala: se lo stack parte dall\'alto, diciamo dalla fine della mmemoria installata, e se le variabili statiche (definite con un nome nel programma, con le label) sono dopo l\'ultima istruzione, l\'heap parte dopo l\'ulitma variabile statica defintta.
- Riccardo SEGALA
- ahhh okok, è automatico, non devo inizializzarlo..
- Diego GRAZIATI
- Mi sfugge l\'effettiva utilità dello stack...
- Riccardo SEGALA
- Prof, poi volevo chiederle, per esercizio, io e dei compagni abbiamo scritto del microcodice che salva il valore di flags nello stack, se lo copio e incollo qui potrebbe dirmi se è giusto..?
- Diego GRAZIATI
- Si tratta di un PC, inizializzato all\'indirizzo dell\'ultima cella di memoria, nel nostro caso, che può sia incrementare che decrementare il proprio valore: questo, effettivamente, a cosa ci è utile?
- Stefano SALVI
- Guerrera: di solito prima della "equ" non ci sono i \':\'; al post della "equ" potrei avere "=" e i : ci starebbero male. Usare una \'=\' per definire lindirizo di ujna variabile è uno dei modi. In questo caso devo decidere l\'indirizzo esatto delle variabili ed ha senso solo per variabili particolari.
- Aurora Maria GUERRERA
- va bene prof, grazie ora ho capito
- Gabriele MASOTTO
- Facciamo così, può farci un esempio dove lei scrive una label e ci dice cosa fa?
- Ivan BERNARDI
- io non ho capito quando devo usare SetCARRY e ClrCARRY
- Stefano SALVI
- Masotto: VAR EQU 33 crea una costante di nome "var" e valore 33. Potei usarla come indirizzo di variabile, ma in questo caso dovrei aver deviso che la variabile la metto nella cella 33 ed essere sicuro che quella cella sia libera.
- Gabriele MASOTTO
- Ahhhh
- Quindi sostanzialmente VAR EQU 33 vuol dire che va nella cella che contiene VAR (che penso a questo punto che sia specificata prima) e ci metto dentro 33?
- Il valore
- *
- Stefano SALVI
- Masotto: no. "VAR EQU 33" potrebbe siginficare (se 33 non è un numeor a caso) che ho deciso di creare una variabile VAR e ho deciso di metterla nella locazione 33 dlela memoria. Il valore ce lo metto o con un\'istruzione (ad esempio STA VAR) oppure con una peudoistruzione (ad esempio DB 33 ; define byte value)
- Gabriele MASOTTO
- Ah ok ora ho capito meglio
- Riccardo SEGALA
- Prof, poi volevo chiederle, per esercizio, io e dei compagni abbiamo scritto del microcodice che salva il valore di flags nello stack, se lo copio e incollo qui potrebbe dirmi se è giusto..?
- Stefano SALVI
- Per definire una variabile tramite una label mi serve una pseudoistuszione che metta un preciso valore in una cella di memporia (la inizializza) come .db oppure una pseudoistruizione che riservi solo lo spazio - ma lasciatemi un attimo che devo trovare il nome giusto dle nostro assembler.
- Riccardo ARTONI
- Tra gli argomenti c\'è "Categorie di istruzioni". Comprende anche le istruzioni di altre categorie?
- Stefano SALVI
- Le categorie di sitruzioni sono sempre quelle 5: trasferimento dati; aritmetico/logiche; Inpiut/otput; trasferimentod el controlle e controllo CPU
- Ivan BERNARDI
- io non ho capito quando devo usare SetCARRY e ClrCARRY
- Stefano SALVI
- La mpseudoistruzione che serve per "allocare" la variabile è .blkb <n> che sta per "blocco di byte" dove <n> è il numeor di byte da allocare
- Gabriele MASOTTO
- Ma io non ho capito, ci da da fare un esercizio dove dobbiamo scrivere istruzioni in assembly O NO?
- La prego
- Non faccia follie
- Riccardo SEGALA
- ha detto di no tipo 6 volte ahah
- Gabriele MASOTTO
- Ok
- Non abbiamo un terrorista come prof
- Grazie prof
- Stefano SALVI
- Bernardi: ad esempio potrebbe servirti una ClrCARRY priam di una somma dove vuoi essere sicuro che non i sia ujn riporto precedente (almeno ti servirebbe se non ci fosse una somma che già non lo considera) oppure nele oprazioni di shift con il carry, per decidrere che bit vuoi fare entreare (ma questa non so se la capisci senza spiegartela megio).
- Riccardo SEGALA
- Prof, poi volevo chiederle, per esercizio, io e dei compagni abbiamo scritto del microcodice che salva il valore di flags nello stack, se lo copio e incollo qui potrebbe dirmi se è giusto..?
- Edoardo POLTRONIERI
- prof quanti sono i metodi di indirizzamnto ?
- Ivan BERNARDI
- ok penso di aver capito grazie
- Stefano SALVI
- Masotto: non metto un esercizio di programmazione assemble, dove devi tradurre un algoritmi in instruzioni assembli (opcodes). C\'è un esercizio dove devi scriver il microcodice di un\'istruzione che ti descriverò, come abbiamo già fatto più volt ein classe e come ti ho fatto anche fare per casa.
- Gabriele MASOTTO
- Quindi non ci chiederà di scaldare il caffè in assembly
- Buono
- Stefano SALVI
- Segala: cosa intendi per "non la salva"?
- Poltornieri: dipende dal processore; intinseco, immediato, diretto, indiretto, indicizzato, registro e stack sono i più comuni; relativo e (da stamattina) pagina zero sono altri meno cimuni.
- Masotto: direi proprio di no. Quello lo lacio per le prossime lezioni di laboratorio.
- Edoardo POLTRONIERI
- grazie prof
- Riccardo SEGALA
- Prof, poi volevo chiederle, per esercizio, io e dei compagni abbiamo scritto del microcodice che salva il valore di flags nello stack, se lo copio e incollo qui potrebbe dirmi se è giusto..?
- Stefano SALVI
- Tu prova...
- Riccardo SEGALA
- ok, allora per piacere non scrivete per 1 secondo
- //Instruction fetch
- PC=>AB
- RD
- WR(IR) INC(PC)
- PC/=>AB /RD /WR(IR) /INC(PC)
- SP=>AB FLAGS=>DB
- WR
- SP/=>AB FLAGS/=>DB /WR DEC(SP)
- /DEC(SP)
- non ho scritto dove finisce la instruction fetch, ma finisce al quarto ciclo..
- comunque ho finito
- Stefano SALVI
- Quasi giusta. Dato che DEC(SP) lavora sul fronte di disccesa, lo puoi anticipare al ciclo prima (ma non è proprio un erore, è un warning...)
- Riccardo SEGALA
- aah va bene, grazie
- Mirko LANA
- Prof, se non ricordo male lo stack e l\'heap hanno uno spazio dedicato a loro diviso tra i due. Ma se lo stack cresce (quindi l\'indirizzo della cella viene decrementato) lo spazio dedicato all\'heap diminuisce o rimane lo stesso? La risposta che ha dato prima a Segala mi ha confuso e non poco visto che io avevo capito che la memoria affidata allo stack e all\'heap veniva spartito all\'inizio e non più modificato
- Stefano SALVI
- Lana: la memoria di stack e heap è condivisa. All\'inizio viene allocata e mai più modificata, ma non è DIVISA tra i due, benì CONDIVISA, qundi ognuno la usa partendo dalla sua parte e si deve stare attenti che non si incontrino...
- Mirko LANA
- Ah ok, grazie prof
- Riccardo SEGALA
- gg per me che confondo
- Gabriele MASOTTO
- Quindi sostanzialmente se lo Stack Pointer ciuccia più memoria rispetto all\'heap l\'heap ne avrà di meno mentre l\'altro tizio di più?
- Stefano SALVI
- Masotto: esattamente!!!
- Gabriele MASOTTO
- Sono forte :D
- Stefano SALVI
- Proviamo con l\'esempio di definizione di variabili?
- Aurora Maria GUERRERA
- in che senso?
- Riccardo SEGALA
- esatto ahah
- Stefano SALVI
- variabile1 = 3 ; variabile 1 "abita" nella cella 3 (probabilemnte è una cella di I/O mappato)
- Aurora Maria GUERRERA
- ah ok, quello che aveva detto prima giusto?
- Stefano SALVI
- variabile2: .db 33 ; variabile2 sta nella posizione corrente, è stata inizializzata a 33
- Riccardo SEGALA
- .db?
- Aurora Maria GUERRERA
- define byte value
- Stefano SALVI
- variabile3: .blkb 1 ; variabile3 sta alla posizione corrente (quella dopo variabile 2, se le ho scrite coì) enon è inizializzata
- Gabriele MASOTTO
- E 33 (variabile2: .db 33;) è Hex o Dec?
- Stefano SALVI
- array1: .blkb 4 ; array1 è un array non inizializzato di quattor celle, che comincia all\'insdirizzo corrente.
- Riccardo SEGALA
- ahhhh
- io dico .blkb e un numero, che dice all\'assebler salta n celle?
- quindi ho una label che punta a n spazi vuoti?
- Gabriele MASOTTO
- Quindi blkb serve a definire quante celle di fila prende una variabile ? (array di 4 celle consecutive)
- Stefano SALVI
- Masotto: probabilmente dec. L\'assemblatore ha le sue convenzioni per le basi dei numero, ma se metto un numero e vasta, è decimale per tutti.
- Masotto: esattamente. Le celle sono "riservate" (allocate) ma non inizializzate.
- Gabriele MASOTTO
- ah ora ho capito
- Stefano SALVI
- Segala: certo, una label che punta an N spazi vuoti, come il nome diu un array in C, mi dicono...
- Riccardo SEGALA
- e .db a cosa serve?
- Gabriele MASOTTO
- Serve per mettere dentro alla var il valore
- variabile: .db 33 -> dentro a variabile ci va 33?
- Stefano SALVI
- Segala: .db serve per inserire in memoria (nel programma) un byte con un certo valore, potrebbe essere ad esempio quello di una variabile inizializzata.
- Gabriele MASOTTO
- Alla cella allocata a variabile
- Riccardo SEGALA
- ahh
- però prof
- se faccio variabile: .db 33, l\'assembler salta quella parte?
- Stefano SALVI
- Segala:no, l\'assembler mette nell\'eseguibile il numero 33 in quella cella (variabile inzializzata) e si segna la label "variabile" con l\'indirizzo di quella cella.
- Riccardo SEGALA
- quindi non è un problema se poi arrivato lì non la salva?
- Stefano SALVI
- Seguardate il mio "programmone" trovate alla fine una serie di ".db" (anche se forse ho scritto solo i vvalori) che inseriscono uìin memopria una tabella costante di conversione tra numero e sua rappresentazione sul display.
- Riccardo SEGALA
- ahhh okok
- quindi semplicemente non arriverò mai alla parte del programma con.db, a meno che non lo voglio?
- Stefano SALVI
- Bernardi: direi che è un buon riassunto.
- Riccardo SEGALA
- c\'è intendoi
- se faccio var: .db
- quando arrivo con il pc a quel punto
- Stefano SALVI
- Che, si è piantata?
- Riccardo SEGALA
- non è un problema se l\'assembler non fa in modo che salvi?
|