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
Von Neumann
Bus: strumento di trasmissione su cui vengono trasmessi dati in un sistema di calcolo
Word (parola): unità di trasferimento dati (es. 32 bit, 64 bit)
Linguaggio Macchina = linguaggio nativo della CPU (microprocessore) è specificato da un set di istruzioni eseguibili dalla CPU
Una CPU esegue istruzioni caricandole dalla memoria ed eseguendole sequenzialmente
È in realtà possibile eseguire simultaneamente alcune istruzioni, ma l'effetto dal punto di vista di un osservatore esterno è come se le istruzioni fossere eseguite in sequenza
N.B.: Una CPU può essere costituita da più "CORE" che sono a loro volta dei microprocessori sequenziali
Gli eventi in una CPU sono regolati da un CLOCK, che temporizza gli eventi stessi.
Unità minima: ciclo di clock che descrive il tempo minimo fra due eventi.
I cicli di clock sono una misura indiretta del tempo di esecuzione.
Es.: L'addizione intera richiede generalmente 1 ciclo di clock. La divisione intera richiede spesso 8-10 cicli di clock
La velocità di una CPU è determinata dalla frequenza di clock
Anno: Microprocessore Frequenza
- 1980: 780 1,5 MHz = 1,5 milioni di cicli al secondo
- 2004: Intel Core 2 3,5 GHz = 3,5 miliardi
Memoria: RAM memoria volatili
(Tecnologia: DRAM)
Serve corrente elettrica per "rinfrescarsi" periodicamente
Regola Generale: Più una memoria è grande più è lenta ed economica.
Dimensioni: numero di byte (o suoi multipli di 10) memorizzabili.
Hard Disk: memoria non volatile; presente della scheda madre.
- 1980: 20 MB — MB = milioni di byte
- 2015: 2 TB
1 byte
1 KB = 103 byte ≈ migliaia
1 MB = 220 byte ≈ milioni
1 GB = 230 byte ≈ miliardi
1 TB = 240 byte ≈ migliaia di miliardi
KiB = 210 byte
MiB = 220 byte
Memoria RAM:
- 1980: ZX Spectrum 48 KB, C64 64 KB
- 2015: 8 GB
All'avvio di un programma, il Sistema Operativo allocca un certo numero di "risorse" che vengono riservate al programma.
Termine PROCESSO = Programma in esecuzione.
Il Sistema Operativo associa ad ogni processo uno spazio di memoria privato, cioè accessibile solo da quel processo (e da SO).
Lo SPAZIO di MEMORIA viene detto anche IMMAGINE DI MEMORIA.
Un processo può più e non deve interferire con le attività di un altro processo.
Autonomia dello spazio di memoria di un processo
- Indirizzi Virtuali: Quelli usati dal processo (puntatori).
- Indirizzo Fisico: Vissible solo da S.O.
- Gli indirizzi logici vengono "mappati" dal S.O. sugli indirizzi fisici.
Prime Istruzioni:
ASSEGNAME NTO
C I A32
int x;x=10;x è in A
movl $10, %eax
istruzione operando destinazione operando sorgentesuffisso: specifica il tipo del valore scritto
Es.
minimo.s
globl ff: movl $10, %eaxret
ret è un'istruzione che ritorna al chiamante
N.B. per convenzione, il valore restituito quello nel registro A quando ret viene eseguito
N.B. Quando compilo i programmi sulla riga di comando deve inserire -m32
per lavorare con I A32
Es: gcc minimo.s -c -m32
C I A32
short x;X=30;x è in Amovw $30, %ax
char x;X=30;x è in Amovb $30, %al
int somma (int x, int y) {
- int a = x ;
- a = a + y ;
- return y ;
Es.
void incrementa (int *xp) {
- *xp = *xp + 1 ;
N.B. Sorgente e destinazione NON possono essere contemporaneamente operandi memoria!
NON SI PUÒ FARE: movl (%eax), (%ecx)
Salti Condizionati
Istruzione JCC etichetta
suffisso → stabilisce la condizione per cui il salto deve essere effettuato
Es.
- JE → test uguaglianza
- JG → test >
Test di Condizioni
Le condizioni sono le seguenti:
suffisso test e == ne != g (greater) > (test con segno) ge >= l (less) = b (below) 0) { if (a[d] == c) return 1; d--; } return 0; }IA32
.globl cerca cerca: movel 4(%esp), %eax movswl 8(%esp), %ecx movl 12(%esp), %edx decl %edx L: cmpl $0, %edx Jle E cmpw %cx,(%eax,%edx,2) Jne F movl $1,%eax ret F: decl %edx Jmp L E: movel $0, %eax xorl %eax,%eax retC pseudo
L: if (d < 0) goTo E if (a[d] != c) goTo F return 1 F: d--; goTo L return 0;N.B.: Si tratta dello stesso ciclo anche se do while
char a;
int c;
c = a; ➔ movsb %al, %ecx
c = a;
movswl %ax, %ecx
unsigned short a;
unsigned c;
void clear (unsigned *v, unsigned u) {
unsigned i=0;
while (i < n) v[i++]=0;
}
void print(unsigned short*v, unsigned u) {
unsigned n,i;
for(i=0; i < n; i++) printf("%hu ", v[i]);
printf("\n");
}
int main() {
unsigned short v[]= {1,5,2,3,6}
unsigned n = (sizeof(v) / sizeof (unsigned short));
clear(v,n);
print(v,n);
return 0;
}
E5
int g (int x, int y) {
int a = 8 (x/y);
return a;
}
QS
int g (int x, int y) {
int a = 8 (y/x);
return a;
}
C. QQ
int d = (x);
int a = g(x);
int b = g();
int c = (a);
int e = (b);
int c = y;
a = g(b);
c = a + c;
SP
- moveq 16(%esp), %eax
- divl 20(%esp)
- movl 12(%esp)
- movl 8(%esp)
- call 16(%esp)
- mov 24, %eax