Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
RET
Scrivere un programma in Assembly GAS che conti il numero di occorrenze ad uno in una doppia parola
GLOBAL _main
DATA
dato: LONG 0X0F0F0101
conteggio: BYTE0X00
TEXT
main: NOP
MOVB $0x00,%CL
MOVL dato, %EAX
comp: CMPL $0X00, %EAX
JE fine
SHRL %EAX
ADCB $0x0, %CL
JMP comp
fine: MOVB %CL, conteggio
RET
Si scriva un programma in Assembly GAS che calcola il fattoriale di un numero naturale (da 1 a 9)
Scrivere un programma Assembly GAS che conta il numero di occorrenze della lettera "e" in una stringa
specificata come parametro
Disegnare e discutere il diagramma temporale di un ciclo di scrittura in memoria (oppure in I/O) di un
semplice processore a 8 bit.
La scrittura dalla memoria, in questo caso, il processore specifica attraversoA31-A0 l’indirizzo della locazione
interessata. Contemporaneamente mettere a disposizione il byte da scrivere sui piedini D7-D0.
Successivamente viene generato un impulso di scrittura, di una durata di alcune decide di nano secondi,
attraverso il piedino /MWR. Sul fronte in salita dell’impulso, viene il banco di memoria interessato deve
prelevare il byte a disposizione su D7-D0. Durante il ciclo di lettura, i piedini /MRD, /IORD e /IOWR restano
inattivi. Per scrivere su una porta di I/O, avviene in maniera analoga alla precedente, con l’unica differenza
che l’indirizzo va specificato su 16 bit e quindi si utilizza solo la parte meno significativa dei bit di indirizzo
(A15-A0, mentre gli altri restano a zero). Ovviamente, l’impulso di scrittura viene mandato sul piedino
/IOWR
Disegnare e discutere il diagramma temporale di un ciclo di lettura in memoria (oppure in I/O) di un
semplice processore a 8 bit
La lettura può avvenire in memoria, in questo caso il processore, sui piedini A31-A0 specifica l’indirizzo della
locazione di memoria. Si genera quindi un impulso di lettura attraverso il piedino /MRD sul fronte di salita si
memorizza il byte depositato dal banco di memoria sui piedini D7-D0. Durante la lettura, i piedini /MWR,
/IORD e /IOWR restano inattivi. È possibile leggere anche da una periferica (sullo spazio di I/O). In questo
caso, del tutto analogo al precedente, l’indirizzo va specificato su 16 bit e quindi si utilizza la parte meno
significativa dei bit di indirizzo. Ovviamente la lettura è fatta tramite il piedino /IORD.
Discutere come un banco di memoria da 1Mx8 può essere montato nello spazio di memoria. Disegnare lo
schema corretto di montaggio.
Una interfaccia appare al programmatore come una piccola memoria costituita da registri di un byte. Per
indirizzare lo spazio di I/O si utilizzerà l’indirizzo interno del registro cui si somma l’indirizzo base
riconosciuto dalla maschera con i 14 bit più significativi.
Perchè il processore PC ha solo 30 piedini di indirizzo (A31-A2) pur indirizzando uno spazio di memoria da
4GB?
Oltre ai 30 (A31-A2) piedini del bus di indirizzo, sono utilizzati i 4 (/BE3-/BE0) piedini di bus-enable; i primi
indirizzano alla riga, i secondi selezionano la locazione o le locazioni da prendere in considerazione
Come viene vista una interfaccia nello spazio di I/O organizzato a linee a 32 bit. C'è differenza nel
montaggio e nella visione logica al variare della dimensione dei registri interni?
Le interfacce sono viste come delle piccole memorie con registri. I registri possono essere a 8, 16 o 32 bit. In
base alla dimensione dei registri, una interfaccia è collegata a tutto il bus (registro 32 bit), ai 16 bit (registro
a 16 bit) o agli 8 bit (registro a 8 bit) meno significativi. I registri delle interfacce stanno su parti
corrispondenti a linee consecutive. Quanto detto significa che una interfaccia con registro a 32 bit occupa
una intera linea, un registro a 16 bit occupa le prime due locazioni meno significative di una linea e un
registro a 8 bit la locazione meno significativa di una linea. Gli indirizzi di tali registri sono sempre multipli di
4.
Disegnare come il controllore del bus locale si collega al processore. Specificare quali sono i piedini che
formano effettivamente il bus.
Il latch per il pilotaggio degli indirizzi, il transceiver per il pilotaggio dei dati, il circuito di abilitazione che
produce l’abilitazione per i circuiti precedenti ed il circuito di comando che invia i comandi veri e propri
costituiscono il controllore del bus. A sinistra abbiamo i collegamenti con i piedini del processore ed a destra
il bus vero e proprio.
Come si può progettare il bus locale di un calcolatore che debba gestire uno spazio di memoria a 32 bit e
uno spazio di I/O a 32, 16 e 8 bit?
Il bus indirizzi può essere unico, deve comprendere una rete in grado di produrre i valori A1-A0 e di /BHE
partendo da /BE3-/BE0 secondo le tabelle: Anche il bus comandi può funzionare in maniera univoca. Per
quanto riguarda il bus dati, potrebbe essere:
Unico: in questo caso i piedini D31-D0 del processore sono connessi ai tre circuiti di pilotaggio, è
•
necessario un circuito che generi in maniera mutuamente esclusiva i segnali /EN, /E16 o /E8 in modo da
attivare correttamente tutto il bus, i 16 bit meno significativi oppure gli 8 bit meno significativi
Formato da 3 bus fisicamente distinti: con i bus a 16 e 8 bit esistano soltanto per lo spazio di I/O ed ogni
•
bus è pilotato dal suo specifico circuito. Nell’immagine a fianco il pilotaggio del bus dati unico con il circuito
R che produce i segnali A1, A0 e BHE da /BE3-/BE0 per selezionare correttamente la parte di bus dati da
utilizzare.
Disegnare lo schema dello specifico circuito di pilotaggio di un bus dati a 16 bit.
A sinistra abbiamo i piedini del processore che immagina di avere uno spazio esterno a 32 bit. In questo
spazio ogni linea è vista come due sotto linea individuate dal valore del bit A1: per A1=1 si individua la
semilinea alta, per A1=0 si individua la semilinea bassa. Le porte OR abilitano in modo mutuamente
esclusivo uno dei due transceiver in base al bit A1 ed al segnale /E16 (abilitazione del bus a 16 bit).Se si
abilita il transceiver superiore il contenuto del bus a 16 bit viene trasferito al processore tramite la semilinea
alta (A1=1), altrimenti il contenuto trasferito tramite la semilinea bassa (A1=0).Per selezionare il singolo
byte dal bus a 16 bit si utilizzano i segnali /BHE (Bus High Enable) e /BLE (Bus Low Enable) generati dalla
tabella:
Mostrare il codice Assembly del sottoprogramma di lettura (di scrittura) di un byte da una interfaccia e
come esso potrebbe essere richiamato da un main() scritto in C/C++.
.global inputb
inputb :
pushl %EAX
pushl %EDX
movl 12(%ESP),%EAX
inb %DX , %AL
movb %AL , (%EDX)
popl %EDX
popl %EAX
ret
Cosa si intende per programmazione mista? Discutere brevemente il paradigma di programmazione ad
essa associato.
I programmi scritti in linguaggi più ad alto livello, non possono accedere direttamente allo spazio di I/O. per
questo motivo si scrivono sottoprogrammi in assembly che possono essere richiamate da funzioni scritte in
linguaggi evoluti.
Discutere la differenza fra modalità testo e modalità grafica nella gestione dello schermo
Lo schermo appare suddiviso in righe e colonne, quelle di indice zero sono in alto a sinistra. Il punto di
incrocio è la posizione sullo schermo. In modalità testo ogni posizione è un carattere, in modalità grafica ad
ogni posizione si associa un pixel. Il numero di righe e colonne dipende dalla modalità di funzionamento.
Descrivere la tabella delle interruzioni e la struttura dei gate (o descrittori).
La tabella delle interruzioni è una porzione di memoria che contiene 256 entrate che prendono il nome di
descrittore o gate. L’indirizzo base è contenuto nel registro IDTR (Interrupt Descriptor Table Register). È
formato da 8 byte che contengono l’indirizzo della routine di interruzione e da un byte di accesso
(importanti i bit P e TI)
Perchè il meccanismo delle interruzioni si dice vettorizzato?
Si dice vettorizzato perchè ci sono 256 tipi dio interruzione,ogni interruzione ha associato un tipo che
determina l’accesso ad una specifica entrata della tabella delle interruzioni, l’esecuzione di una routine
dipende dal tipo dell’interruzione.
Le eccezioni e gli altri tipo di interruzioni vengono gestite alla stessa maniera?
No, per tutte le interruzioni, tranne le eccezione del processore, il valore di EIP salvato nella pila è
l’indirizzo della prossima istruzione da eseguire; l’istruzione corrente non è mai bloccata, si aspetta alla fine
l’aggiornamento di EIP. Le eccezioni del processore bloccano l’esecuzione dell’istruzione corrente, possono
essere di tre tipi:
Trap: vengono gestiti come le altre interruzioni alla fine dell’esecuzione dell’istruzione corrente. Un
•
esempio di trap è l’overflow durante l’istruzione INTO
Fault: si ha quando si incontrano anomalie nella fase di esecuzione di un’istruzione. Questa viene bloccata.
•
Nella pila si memorizza l’indirizzo dell’istruzione che ha sollevato l’eccezione. Anche quando un gate non è
presente il programma viene terminato
Abort: comporta la terminazione forzata dell’istruzione. In genere un abort si utilizza per problemi nelle
•
circuiterie.
Elencare i passi che il controllore APIC effettua per la gestione del meccanismo delle interruzioni
Il controllore APIC ad ogni nuova richiesta sui piedini di ingresso pone a 1 il bit di IRR corrispondente al tipo.
Per la gestione delle interruzioni, il controllore ripete ciclicamente:
Attende che il bit più significativo di IRR con valore 1 abbia una priorità maggiore del bit più significativo di
•
ISR con valore 1
Attiva il piedino /INTR
• Attende la risposta sul piedino /INTA e quando la riceve o Considera il bit più significativo di IRR (j-mo)o
•
Pone a 0 il j-mo bit più significativo di IRR ed a 1 il j-mo bit più significativo di ISRo Invia j (tipo
dell’interruzione) al processore sul piedino TP o Rimuove la richiesta di interruzione al processore
disattivando /INTR Ogni volta che via software riceve End Of Interrupt, azzera il bit più significativo di ISR di
valore 1. In sostanza il controllore permette la gestione delle richieste di interruzione annidate, un driver
può essere interrotto da una richiesta con priorità maggiore ma non da richieste di stessa o minore priorità.
Disegnare lo schema della circuiteria del controllore di interruzione APIC.
Un controllore APIC (Advanced Programmabile Interrupt Controller) consente la gestione avanza di richieste
multiple di interrupt da diverse interfacce nel calcolatore. Sui 24 piedini (IR0-IR23) di ingresso riceve le
richieste dalle interfacce e le comunica al processore tramite /INTR. Ogni piedino IR supporta più sorgenti di
interruzion