uni

graph TD
    A[Rete di Interconnessione - BUS] ==Media==> B[Interfacce]
    A ==Dati e Programmi==> C[Memoria Principale]
    A ==> D[Processore]
    D --> E[ALU]
    D --> F[FPU]

Processore

Il processore contiene i seguenti due blocchi:
ALU
La Arithmetic Logic Unit esegue operazioni logiche (AND, OR, NOT) e lavora con numeri naturali in base 2 oppure con numeri interi in Rappresentazione in Complemento a 2.
FPU
Floating Point Unit.
Il processore ciclicamente:

  1. preleva dal registro EIP_ la prossima istruzione da eseguire
  2. incrementa EIP del numero di byte dell’istruzione prelevata
  3. esegue l’istruzione
    Le istruzioni vengono quindi eseguite nell’ordine in cui sono scritte nella memoria centrale, a meno di salti, istruzioni che modificano il registro EIP.

Registri

I registri sono locazioni di memoria interne, a 32bit, e sono generali o di Stato. Di alcuni registri si possono riferire parti ad 8bit. Ogni registro generale ha una parte a 16bit. Questi sono i registri che ci interessano:

GeneralStatus
EAX - ah, ax, alEIP
EBX - bh, bx, blEF
ECX - ch, cx, cl
EDX - dh, dx, dl
EBP - bp
ESI - si
EDI - di
ESP - sp
dove , , ed infine
General:
EAX = accumulatore = serve per memorizzare operandi di operazioni aritmetiche
EBX = base = indirizzo di base per accesso in memoria
ECX = counter = contatore per cicli (for ecc)
EDX = data = operandi per istruzioni aritmetiche
EBP = base pointer = utilizzato come registro base per accessi in memoria
ESI = source index = registro indice per accessi in memoria
EDI = destination index
ESP = stack pointer = usato per indirizzare la pila/stack, serve per gestire sottoprogrammi ed è una memoria soggetta a disciplina LIFO
Status:
EIP = instruction pointer/program counter = indirizzo della prossima istruzione, il suo contenuto è fissato al reset iniziale. Questa istruzione deve essere in ROM.
EF = extended flag register = ha 32 elementi detti flag, queste flagservono per indicare lo status del sistema:
OF = overflow flag = se 1, durante l'esecuzione dell'ultima istruizione si ha avuto un overflow/traboccamento
SF = sign flag = ultima istruzione ha generato un risultato con $MSB = 1$: se l'istruzione operava su numeri interi, il risultato è un numero negativo.
ZF = zero flag = ultima istruzione ha generato risultato con tutti $0$ 
CF = carry flag = ultima istruzione ha generato un ___riporto___/prestito: se ultima istruzione operava sui naturali, il risultato non è rappresentabile.
Riassunto:
1. operazione su interi: guardare OF, SF, ZF (CF non significativo)
2. operazione su naturali: guardare CF, ZF (OF e SF non significativi)
DF = direction flag, STD set direction flag mette 1 (copia indietro), CDL clear direction flag mette 0 (copia in avanti).

E sta per extended, infatti prima i registri erano a 16bit, poi siamo passati a 32bit.

Condizioni al reset

I registri generali non sono rilevanti

  1. EIP vale
    1. vale la prima istruzione che si trova a quell’indirizzo
    2. un po’ di celle da quell’indirizzo in poi devono essere implementate in ROM (bootstrap)
  2. In EF i flag che ci interessano valgono 0.

Spazio di Memoria

Rappresentato da celle contigue, dalla capacità di un byte ciascuna, ogni cella è identificata da un numero a 32 bit (Informazione), detto indirizzo.
In Assembly gli indirizzi sono simbolici e vengono tradotti in parte dall’assemblatore, in parte a runtime, non è quindi cura del programmatore.
Questo spazio di memoria viene implementato nella Memoria, per cui il contenuto è casuale dopo un reset. Solo una parte, la ROM, conserva le informazioni dopo un reset, e possiede le istruzioni per il processore da eseguire dopo appunto un reset.
Il Processore accede, nel senso di leggere/scrivere, a locazioni che possono essere:

  1. singola (byte), a 8 bit
  2. doppia (word), a 16 bit
  3. quadrupla (long/doubleword), a 32 bit
    Per l’accesso a locazioni doppie o quadruple, viene utilizzato l’indirizzo più piccolo delle 2 o 4 locazioni, l’indirizzo più grande contiene il bit più significativo.

Spazio di I/O

Questo ha porte, ognuna della capacità di un byte e con indirizzo a 16bit.
Raramente una singola porta svolge sia scrittura che lettura.
Il processore accede a lettura o scrittura tramite 2 istruzioni: IN e OUT.
È necessario conoscere gli indirizzi delle interfacce che si vogliono usare per accedervi.