Linguaggi
• Diversi tipi di linguaggi:
– Imperativi – Funzionali – Dichiarativi
• Tutti basati sulla traduzione nell'unico linguaggio eseguibile dal calcolatore:
il Linguaggio Macchina
Linguaggio Macchina
• Insieme di istruzioni eseguibili dalla CPU
• Dipende dalla CPU:
– cablata al suo interno, ogni istruzione
genera una sequenza di segnali di controllo
• Linguaggio di basso livello
– si può accedere direttamente alle funzionalità di base del calcolatore
Linguaggio Macchina
• Complesso da utilizzare:
– ogni istruzione esegue un'operazione semplicissima
– esistono librerie con procedure generali
• Gli altri linguaggi vengono "convertiti"
in sequenze di istruzioni in linguaggio macchina
Linguaggio Macchina
• Il Linguaggio Macchina è estremamente efficiente
• I programmi sono:
– più veloci – più corti
– ma più complessi
Linguaggio Macchina
• La scrittura è complessa:
– istruzioni formate da stringhe di 1 e 0:
quindi è necessario un insieme di simboli (Linguaggio Assembly)
– per referenziare le locazioni di memoria è necessario avere delle etichette
– necessario commentare ogni istruzione
Istruzioni Macchina
• Composte da:
– etichette (per eliminare riferimenti ad indirizzi fisici, facilitano le modifiche)
– codici operativi (non può mai mancare) – operandi (0, 1 o 2)
START: MOV AX, BX CMP AX, 12h JZ EQUAL INT 21h RET
EQUAL: MOV BL, 82h
Commenti
• Servono a rendere il programma più
comprensibile al programmatore e a chi lo analizzerà in futuro
• Vengono ignorati dalla macchina
• Devono essere utili ed esplicativi
Commenti
START: MOV AX, BX ; Carico AX con il valore di BX CMP AX, 24 ; Confronto AX con 24
JZ EQUAL ; Se AX=24 salto a EQUAL INT 21h ; Chiama l'INT 24h
RET ; Ritorna alla proc. Chiamante EQUAL: ...
START: MOV AX, BX ; Carico AX con il numero di riga CMP AX, 24 ; Se sono al termine dello schermo JZ EQUAL ; allora non scrivo nulla
INT 21h ; Scrivi la prossima riga di testo RET ; Ritorna
EQUAL: ...
Tipi di istruzioni
(Intel x86)• Trasferimento dati
• Aritmetiche e logiche
• Manipolazione di bit
• Manipolazione di stringhe
• Trasferimento di controllo
• Manipolazione di interruzioni
• Controllo del processore
Trasferimento dati
• Servono per trasferire dati tra:
– registri – memoria
– unità esterne
• MOV AX, BX - MOV AX, [indirizzo]
• PUSH AX - POP BX
Aritmetiche
• Somme, sottrazioni, confronti, (moltiplicazioni, divisioni)
• Side effect sui flag
• ADD AX, BX
• ADC AX, BX
• MUL BX (macchine "a 0, 1, 2 indirizzi")
• CMP AX, BX
Logiche
• And, Or, Xor, Not, Test
• AND AX, BX
• OR AX, BX
• TEST AX, 01100100b
Manipolazione di bit
• Traslazioni e Rotazioni delle configurazioni binarie
• Traslazioni: SHL, SHR
• Traslazioni aritmetiche: SAL, SAR
• Rotazioni: ROL, ROR
• Rotazioni con carry: RCL, RCR
Manipolazione di stringhe
• Spostamento, confronto, ricerca,…
• Utilizzano due registri puntatori e un registro contatore
• MOVS [ethchetta], [etichetta]
• CMPS [ethchetta], [etichetta]
• SCAS [ethchetta], [etichetta]
Trasferimento del controllo
• Salti condizionati, incondizionati, chiamate e ritorni da procedure
• JZ [etichetta], JC [etichetta], …
– diverse combinazioni
• JMP [etichetta]
• CALL [procedura]
• RET
Manipolazione delle interruzioni
• Concetto di Interrupt
• Interrupt hardware e software
• La Interrupt Service Routine (ISR) è paragonabile ad una procedura ma:
– è attivabile via hardware
– non specifica l'indirizzo della procedura, che è quindi modificabile
– durante l'esecuzione disabilita le interruzioni
Controllo del processore
• Servono a modificare il comportamento della CPU
• Modificano i flag di controllo: CLC, STC, CMC (agiscono sul flag C), …
• Sincronizzazione: NOP, HLT, ESC, LOCK,
…
Accesso alla memoria
• Il metodo di indirizzamento definisce il meccanismo per ottenere i dati:
– in registri
– nell'istruzione stessa – in memoria
– su una porta di I/O
Modi di indirizzamento
• Immediato:
– l'operando copare direttamente nell'istruzione come costante
– è utilizzato solo per operandi 'sorgente' – MOV AX, 2
Modi di indirizzamento
• Assoluto:
– Nell'istruzione compare l'indirizzo effettivo (fisico) di memoria dove si trova l'operando – MOV AX, [3923:2314]
Modi di indirizzamento
• Relativo:
– l'indirizzo di memoria è specificato relativamente al contenuto del PC – vantaggio per programmi rilocabili – MOV AX, [PC+102]
Modi di indirizzamento
• Diretto:
– l'operando è contenuto in un registro
– nell'istruzione è specificato l'identificativo del registro
– MOV AX, BX
Modi di indirizzamento
• Indiretto con registro:
– l'operando è in una cella di memoria il cui indirizzo è contenuto in un registro
– nell'istruzione è specificato l'identificativo del registro
– MOV AX, [BX]
Modi di indirizzamento
• Con autodecremento/incremento:
– analogo all'indiretto con registro, ma il
contenuto del registro viene decrementato di una quantità pari alla dimensione in
bytes dell'operando
– predecremento e postdecremento – preincremento e postincremento
Modi di indirizzamento
• Indiretto con autoincremento:
– l'operando è in memoria; il suo indirizzo è in un'altra posizione della memoria puntata dal contenuto di un registro.
– nell'istruzione è contenuto l'identificativo del registro
– dopo l'uso, il contenuto del registro è
incrementato di una quantità pari alla dimensione in bytes di un indirizzo di memoria
Modi di indirizzamento
• Con spiazzamento:
– nell'istruzione sono specificati un dato in complemento a 2 e l'identificatore di un registro
– il dato viene sommato al contenuto del registro per ottenere l'indirizzo
dell'operando
– MOV AX, [BX+9382]
Modi di indirizzamento
• Indiretto con spiazzamento:
– come il precedente, ma l'indirizzo ottenuto della somma punta ad una posizione di
memoria dove è contenuto l'indirizzo dell'operando
Modi di indirizzamento
• Con registri indice:
– utilizza due registri: uno contiene un indirizzo base e l'altro un numero da moltiplicare per la dimensione
dell'operando e da sommare alla base per ottenere la locazione dell'operando.
– Utile per l'accesso a vettori
Modi di indirizzamento
• Con lo stack pointer:
– SP punta alla sommità dello stack;
– le istruzioni PUSH e POP permettono di inserire e prelevare elementi dallo stack – Passaggio di parametri
Modi di indirizzamento
• Implicito:
– alcune istruzioni non prevedono di
specificare esplicitamente alcuni dei loro operandi
– DIV BL
– Macchine "a 0 e 1 indirizzi"
Descrizione istruzioni
• Il costruttore fornisce delle tabelle che descrivono l'esatto comportamento
delle istruzioni
– operazione effettuata – side effects
– tempo di esecuzione – codifica
Codifica delle istruzioni
• Problema:
– rappresentare l'instruction set con opportune stringhe di bit
– particolare riguardo anche alle prestazioni
• Soluzione:
– codifiche con lunghezza variabile – codifica di Huffman
Il BIOS
• Il BIOS (Basic Input Output System) è uno strato di software utilizzato per
standardizzare l'accesso ai periferici
• Fornisce un insieme di procedure standard di interfaccia
• Permette la gestione a basso livello di:
– video, tastiera, mouse, stampante,…
Visione stratificata
Hardware BIOS
Sistema Operativo
Applicazioni Assembly Livelli superiori