Você está na página 1de 10

Architettura degli Elaboratori

Corso di Laurea Triennale in Informatica Universit degli Studi di Bari

Laboratorio lez1: La programmazione Assembly

Valeria Carofiglio e Berardina Nadja De Carolis

Il Linguaggio Macchina
l Un processore, durante il suo funzionamento, esegue senza sosta le fasi di fetch, operand assembly ed execute. La fase di fetch consiste nel prelevare dalla memoria l istruzione correntemente indirizzata dal registro Program Counter (PC). Quest ultima, rappresentata concretamente da una sequenza di bit, un istruzione del linguaggio macchina. In seguito alla operazione di fetch, l istruzione che deve essere eseguita viene ricopiata nel registro IR. L unit di controllo ha quindi il compito di riconoscerla ed avviare la corrispondente serie di azioni che conduce all esecuzione della particolare istruzione.

Il Linguaggio Macchina
l Tali azioni sono dette micro-operazioni e possono concretizzarsi, ad esempio, in:
abilitazione di un registro alla scrittura sul bus interno; abilitazione di un registro alla lettura dal bus interno; abilitazione della memoria alla scrittura nel registro MDR; invocazione di una funzionalit dell ALU.

l Una diversa serie di micro-operazioni abbinata all esecuzione di ciascuna istruzione. l Il programmatore non ha accesso alle micro-operazioni ma, dal suo punto di vista, un istruzione in linguaggio macchina vista come atomica.

Il Linguaggio Macchina
l Un insieme di istruzioni in linguaggio macchina
strettamente dipendente dal particolare processore e varia da processore a processore; ha cardinalit finita; completamente definito nella fase di progetto del processore; non pu essere esteso in seguito.

l Esso indicativo di cosa il processore sa fare . l La opportuna composizione di una serie di istruzioni in linguaggio macchina finalizzate alla realizzazione di una elaborazione, insieme con i dati su cui le istruzioni operano, costituisce un programma.

Perch il Linguaggio Assembly


l Programmare un processore, quando questi nacquero,
consisteva nel riempire direttamente la memoria con le istruzioni in linguaggio macchina (codici operativi) e con i dati. l Aumento complessit problemi -> sforzo proibitivo. l Un primo passo verso la semplificazione del compito di un programmatore -> nascita del linguaggio Assembly. l L idea alla base quella di sollevare il programmatore dal dover lavorare direttamente con sequenze di bit dandogli la possibilit di:
identificare ciascun comando in linguaggio macchina (codice operativo) con una parola chiave pi facile da ricordare (codice mnemonico); indirizzare le locazioni di memoria ed i registri attraverso degli identificatori testuali, anzich attraverso i loro indirizzi binari.

TERMINOLOGIA
l Assembly (definizione tratta dal sito di Wikipedia): il linguaggio di programmazione pi vicino al linguaggio macchina vero e proprio. Infatti, esiste una corrispondenza pressoch biunivoca tra gli mnemonici del linguaggio assembly ed i corrispondenti codici macchina corrispondenti ai bitfields (campi di bit) che compongono le istruzioni direttamente eseguibili dal dispositivo elettronico (in genere una CPU) che si sta programmando. l Assembler (definizione tratta dal sito di Wikipedia): un programma compilatore che si occupa di tradurre in linguaggio macchina (ossia una serie di bit 0 e 1 che costituiscono l'unico modo per comunicare con dispositivi elettronici), una serie di comandi scritti in linguaggio Assembly. Oltre a questo compito base, un Assembler si occupa spesso di ausiliare il programmatore, ad esempio consentendo l'utilizzo nel codice sorgente del programma di nomi mnemonici al posto di indirizzi esadecimali che costituiscono l'esatta collocazione di una variabile o di una porzione di programma nella memoria centrale del computer.

Il Linguaggio Assembly e la programmazione di basso livello


l Linguaggio Macchina:
Una istruzione corrisponde alla stringa di bit che viene eseguita dalla CPU. Esempio di istruzione: 00000011 11000011

l Linguaggi Assembly:
Una istruzione una stringa alfanumerica che corrisponde ad una istruzione di linguaggio macchina (1:1). Esempio di istruzione: ADD AX, BX

Il Linguaggio Assembly e la programmazione di basso livello


l Scrivere programmi utilizzando un set di istruzioni in cui:
vi corrispondenza 1 a 1 con le istruzioni del linguaggio macchina simboli mnemonici invece che codice binario associati a:
l istruzioni l sequenze di istruzioni l indirizzi di memoria l aree di memoria l dispositivi di I/O

l Motivazioni
Possibilit di utilizzare al meglio la macchina hardware Elevato controllo sulla struttura dei programmi

l Nota: l assembly non un linguaggio portabile, essendo strettamente legato all architettura sulla quale opera.

Il Linguaggio Assembly e la programmazione di basso livello


l Vantaggi:
Performance Elevata (embedded computers) Occupazione Memoria Programmi Compatti Sfruttamento Ottimale delle caratteristiche della macchina Collegabile a programmi ad alto livello

l Svantaggi:
Programmi difficili da scrivere e leggere Error-Prone Impossibile scrivere grandi programmi Minore portabilit

l Usi Attuali:
Piccoli moduli altamente efficienti (i.e. sistemi operativi) Sistemi real-time, embedded

Esecuzione Programma Assembly

ESECUZIONE
RAM

LOADER

Il Linguaggio Assembly e la programmazione di basso livello


l Stand-alone: intero programma scritto in Assembly
TASM : Borland Turbo Assembler MASM: Microsoft Assembler Altri prodotti

l Integrato: all interno di un programma scritto in un linguaggio ad alto livello si inseriscono blocchi di istruzioni Assembly
C. C++ Borland Turbo Pascal, Delphi

Capire l'importanza della programmazione a basso livello


Contro Assenza quasi totale della gestione dei tipi di dato nei compilatori: infatti il programmatore che si deve far carico del corretto utilizzo dei tipi; Portabilit ridotta rispetto ai linguaggi pi moderni; Difficolt nel comprendere programmi gi scritti; Difficolt anche nello scrivere programmi. Non pi utilizzato dalla maggior parte delle aziende che sviluppano software. Pro Si percepisce come effettivamente si riescono a far svolgere delle attivit ad un calcolatore; Si ha la giusta percezione di cosa pu e cosa non pu fare un calcolatore; Si possono ottimizzare particolari routine di un applicativo, specialmente se scritto in C o in C++; Fornisce la possibilit di intuire e ricostruire il codice sorgente a monte di un eseguibile preesistente (Reverse Engineering).

Capire l'importanza della programmazione a basso livello


l Emulatore: un software che ricrea, riproduce, imita il funzionamento di un sistema, solitamente differente da quello di cui si dispone, permettendo di far eseguire programmi come se fossero eseguiti nell'hardware emulato. l Simulatore: un software che riscrive un programma da simulare per consentirne lesecuzione su un altro sistema. E pi veloce ma meno preciso dellemulatore. Differenza tra Emulatore e Simulatore: L'emulazione una imitazione, mentre la simulazione

una finzione.

L emulatore EMU8086
l Durante queste lezioni prenderemo in considerazione un emulatore di CPU i80x86: emu8086, reperibile presso http://www.emu8086.com/.

l L universit di Bari ha acquistato una Site License che permette agli studenti di installare il software sul proprio pc. Per poter usufruire della licenza, lo studente deve: l Compilare una dichiarazione l Consegnare tale dichiarazione accompagnata dalla fotocopia di un documento di identit.

Perch utilizzare un emulatore e non un compilatore (assembler)?

l L'emulatore permette di analizzare le componenti salienti della CPU in modalit real-time: durante l'esecuzione delle istruzioni sono infatti visibili immediatamente le modifiche ai registri e ai flag; l Permette di eseguire il nostro codice su un qualunque calcolatore in grado di eseguire l'emulatore; l Non necessario compilare il programma ad ogni minima modifica al codice.

L emulatore EMU8086: editing dei programmi


Editor di testi sensibile alla sintassi dell' assembly i80x86

L emulatore EMU8086: the output file type


Si possono creare file COM ed EXE (eseguibile su qualunque computer x86 con un sistema compatibile con DOS), file binari puri (.bin) e boot loader (di default estensione boot). Esistono template per ogni formato.

Un semplice programma creato usando il template-exe disponibile. Faremo riferimento a questo tipo di file.

L emulatore EMU8086: strumenti

Dispone di una calcolatrice e di un convertitore

L emulatore EMU8086: errori


Il compilatore riporta gli errori in una finestra separata

L emulatore EMU8086: L ambiente di emulazione

after click "Emulate" button

10