Assembly Modello x86 1
Il microprocessore Un MICROPROCESSORE è un circuito integrato dotato di una struttura circuitale in grado di attuare un prefissato SET di ISTRUZIONI 2
Caratteristiche del microprocessore Nel mercato ci sono diversi microprocessori tra loro differenti a livello fisico e software; In comune hanno: La dimensione delle celle di memoria: 1, 2, 4, 8 byte; Il numero ed il tipo di registri interni: 8, 16, 32, 64 bit; L ampiezza dei bus (dati ed indirizzi); Il numero di istruzioni: ridotte (RISC) o complesse (CISC); La dimensione delle istruzioni. 3
CPU INTEL 8086 L 8086 è un microprocessore a 16 bit. Le caratteristiche principali sono: Capacità di indirizzamento: 1 MB Bus indirizzi da 20 bit; 14 registri interni da 16 bit; Bus dati da 16 bit; Alimentazione a 5 volt; 48 pin di interconnessione (dual in line); Set di istruzioni esteso (CISC). 4
Architettura della CPU 5
SEGMENT POINTER GENERAL PURPOSE Registri dell 8086 AX (ACCUMULATOR) BX (BASE) CX (COUNTER) DX (DATA) 15 AH BH CH DH 8-7 AL BL CL DL 0 SP (STACK POINTER) BP (BASE POINTER) SI (SOURCE INDEX) DI (DESTINATION INDEX) SP BP SI DI IP (INSTRUCTION POINTER) IP CS (CODE SEGMENT) DS (DATA SEGMENT) SS (STACK SEGMENT) ES (EXTRA SEGMENT) CS DS SS ES FLAGS FLAGS 6
Registri General Purpose AX Accumulatore (diviso in AH e AL) BX Puntatore memoria (diviso in BH e BL) CX Contatore di cicli (diviso in CH e CL) DX Dati (diviso in DH e DL) 7
Registri speciali Instruction Register: contiene il codice operativo dell istruzione prelevata dalla memoria durante il fetch; Instruction pointer: contiene l indirizzo di memoria in cui è contenuta l istruzione immediatamente successiva a quella attuale; Stack Pointer: contiene l indirizzo di una zona di memoria interna chiamata Stack; Flag Register: gruppo di bit che forniscono una serie di informazioni sullo stato dei risultati dell ultima operazione. Address Registers: sono i registri che contengono gli indirizzi dei vari segmenti di memoria: Code Segment Data Segment Stack Segment Extra Segment 8
Registri Segment CS: Code Segment Register Contiene sempre l indirizzo di testa del segmento contenente il codice; viene inizializzato dal Sistema Operativo e non deve essere utilizzato dal programmatore. SS: Stack Segment Register Contiene sempre l indirizzo di testa del segmento contenente lo stack; viene inizializzato dal Sistema Operativo e non deve essere modificato dal programmatore. DS: Data Segment Register di solito contiene l indirizzo di testa del segmento dei dati utilizzati dal programma; deve essere inizializzato dal programmatore all interno del suo programma. ES: Extra Segment Register può essere utilizzato per definire un segmento ausiliario, per esempio per un ulteriore segmento dati; deve essere inizializzato dal programmatore 9 all interno del suo programma.
Registri Pointer SP BP SI DI IP Puntatore alla memoria di Stack (SS:SP) Di solito punta alla memoria di Stack (SS:BP) Puntatore alla memoria del segmento dati (DS:SI) Puntatore alla memoria del segmento dati esteso (ES:DI) Puntatore all indirizzo dell istruzione successiva (CS:IP) 10
Gestione della RAM Per comodità la memoria si può pensare divisa in: Paragrafi: Sono zone di memoria costituite da 16B contigui. Il sistema può gestire fino a 65536 (64K) paragrafi. I paragrafi sono numerati a partire dalla locazione di memoria00000h. I paragrafi non possono sovrapporsi. Segmenti: Sono zone di memoria costituite da 64KB contigui. Il sistema può gestire fino a 65536 (64K) segmenti; Ogni segmento inizia in corrispondenza di un paragrafo, ossia ad un indirizzo multiplo di 16 (10h). I segmenti possono sovrapporsi (Overlapping Segments). 11
Paragrafi e segmenti Indirizzo 00000h 00010h 00020h FFFFFh 12
Calcolo dell indirizzo fisico L indirizzo fisico di una cella di memoria è espresso da 20 bit; non è quindi possibile un indirizzamento mediante un solo registro a 16 bit. Esso è infatti ottenuto mediante la somma di due contributi: Segment Address: è l indirizzo di testa del segmento e viene ottenuto moltiplicando per 16 il numero del segmento (shift di 4 bit a sinistra). Offset: è l indirizzo relativo all interno del segmento. 13
Esempio di indirizzamento INDIRIZZO [SEGMENT:OFFSET] A100:0200 OFFSET 0 2 0 0 SEGMENT A 1 0 0 PHYSICAL ADDRESS A 1 2 0 0 14
Organizzazione della memoria RAM Segmenti Puntatori STACK SEGMENT Stack Segment Stack Offset CODE SEGMENT DATA SEGMENT EXTRA SEGMENT Code Segment Data Segment Extra Segment Code Offset Data Offset Extra Offset 15
La memoria di Stack Indirizzo SS:SP 0 1 0 5 0 0 1 2 0 1 0 6 2 0 1 0 5 0 0 1 0 0 1 0 6 0 0 1 0 5 0 0 0 E 0 1 0 5 E 0 1 0 5 0 0 1 0 0 1 0 6 0 16
Flag 17
Flag di stato Forniscono indicazioni relative al risultato dell ultima istruzione eseguita. Vengono automaticamente aggiornati dal processore ed il loro valore può essere testato dall utente tramite opportune istruzioni. I principali sono: Carry Flag (CF) indica se un istruzione di somma (o sottrazione) produce un riporto (o un prestito); Parity Flag (PF) indica se il risultato di una operazione contiene un numero pari di 1; usato principalmente per trasmissione dati. Zero Flag (ZF) indica se il risultato di una operazione è un valore nullo; Sign Flag (SF) ripete il valore del bit più significativo del risultato di una operazione; Overflow Flag (OF) indica se un operazione aritmetica dà origine ad una condizione di overflow. 18
Flag di controllo Il loro valore può essere forzato dall utente attraverso apposite istruzioni. In determinate situazioni sono testati dal processore che, a seconda del loro valore, si comporta in modi diversi. Trap Flag (TF) usato in ambiente di debug, causa l esecuzione single-step dei programmi Interrupt Enable Flag (IF) usato per disabilitare (quando uguale a 0) eventuali richieste di interruzioni esterne (interrupt) Direction Flag (DF) usato nelle operazioni sulle stringhe per regolare l incremento (DF=0) o il decremento (DF=1) dei Registri Indice 19
Modello di programmazione x86 Un modello di programmazione è la parte dell architettura di un microprocessore accessibile al programmatore: registri ed istruzioni L architettura x86 rappresenta il modello di programmazione dei processori 8086 e successivi (80286, 80386, 80486, Pentium, ) detti anche PC compatibili 20
Evoluzione dell 8086 21
SEGMENT POINTER GENERAL PURPOSE Registri dell x86 EAX (ACCUMULATOR) EBX (BASE) ECX (COUNTER) EDX (DATA) 31 EAX EBX ECX EDX 15 AH BH CH DH 8-7 AL BL CL DL 0 ESP (STACK POINTER) ESP SP EBP (BASE POINTER) ESI (SOURCE INDEX) EDI (DESTINATION INDEX) EBP ESI EDI BP SI DI EIP (INSTRUCTION PTR) EIP IP CS (CODE SEGMENT) CS DS (DATA SEGMENT) DS SS (STACK SEGMENT) SS ES (EXTRA SEGMENT) ES EFLAGS EFLAGS FLAGS 22