Introduzione al linguaggio assembly del microprocessore a parte

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

I Linguaggi di programmazione
Traduzione ed Interpretazione
Informatica Generale Marzia Buscemi
LINGUAGGIO DI PROGRAMMAZIONE C
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
1 Introduzione ai calcolatori Parte II Software di base.
Il Software.
Introduzione al linguaggio C
Software di base: Linguaggi di Programmazione
Programmazione assembler
in un programma Assembler
Classe III A A.s – 2011 Sistemi di Elaborazione e Trasmissione dell’Informazione 4 ore settimanali (2 laboratorio) Docenti Prof. Alberto Ferrari.
Dalla scrittura all’esecuzione
Evoluzione dei linguaggi di programmazione
Procedure In assembler.
Organizzazione della memoria
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
I linguaggi di programmazione
Massa Laura Mela Enrica
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)
Programmazione Procedurale in Linguaggio C++
Introduzione alla programmazione
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
FUNZIONI DI BIBLIOTECA
Caratteri e stringhe di caratteri
TRADUZIONE DEL PROGRAMMA Una volta che un programma sia stato scritto in C, esso non può essere eseguito senza unulteriore traduzione. Ciò perché qualsiasi.
Laboratorio di informatica: ASSEMBLER
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Funzioni.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Corso di Informatica Applicata - Lezione 3 - © 2005 Saverio De Vito Corso di Informatica Applicata Lezione 3 Università degli studi di Cassino Corso di.
Unità Didattica 2 I Linguaggi di Programmazione
Fondamenti di Informatica1 Software di base Tra il linguaggio macchina (basso livello) e i linguaggi evoluti (alto livello) esiste uno strato di software.
Il Linguaggio C.
Espressioni condizionali
Istruzioni per il Controllo del Processore
Claudia Raibulet Algebra Booleana Claudia Raibulet
Programmazione in Java
Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli
Introduzione al linguaggio assemby del microprocessore a parte
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
Istruzioni per la Manipolazione dei Bit
Lo sviluppo del software e i linguaggi di programmazione
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione VII Il compilatore e le sue opzioni Programmazione di Calcolatori: il compilatore e le sue.
Un esempio: Calcolo della potenza n-esima di un numero reale
INTERFACCIAMENTO ASSEMBLY - C++
Introduzione al linguaggio assembly del microprocessore a parte
CONCETTI DI BASE 1.0 FONDAMENTI 1.1 HARDWARE 1.2 SOFTWARE 1.3 RETI
Complessità di un algoritmo
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Architettura di una CPU
Il µP Intel 8086 Marco Lettieri 3 C Informatica A.S. 2009/2010 All’attenzione del Professor Claudio Gatto.
Elettronica Digitale (II Parte) 10-11_5 1 ELETTRONICA DIGITALE II (5) 6/12 Il processo di assemblaggio.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Programmazione Assembly
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Architettura di un calcolatore e linguaggio macchina.
L’esecuzione dei programmi
1 Macchine astratte, linguaggi, interpretazione, compilazione.
Fondamenti di Informatica1 Linguaggi Diversi tipi di linguaggi: –Imperativi –Funzionali –Dichiarativi Tutti basati sulla traduzione nell'unico linguaggio.
Il software Claudia Raibulet
FI - Algoritmi e Programmazione 1 Variabili Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da:  Un nome 
 Ogni processo che deve essere eseguito da un sistema di elaborazione, deve essere caricato e risiedere almeno parzialmente nella memoria centrale 
Unità di apprendimento 6
Transcript della presentazione:

Introduzione al linguaggio assembly del microprocessore 8086 2a parte Assembler Introduzione al linguaggio assembly del microprocessore 8086 2a parte

Il linguaggio macchina Il linguaggio naturale di un microprocessore è il linguaggio macchina. Nel linguaggio macchina non esistono riferimenti astratti o simbolici e tutte le operazioni sono eseguite direttamente sui registri o in locazioni assolute di memoria. La programmazione in linguaggio macchina è stata a lungo l’unica possibile, all’inizio dell’epoca del calcolo elettronico, prima dell’introduzione degli assemblatori e dei compilatori. Il linguaggio macchina non è altro che l’insieme delle istruzioni definite per un particolare processore. Ogni istruzione è identificata dal suo codice, di solito riportato in binario o esadecimale.

Il linguaggio macchina Il linguaggio macchina si compone di istruzioni alle quali fanno immediatamente seguito i relativi operandi. Un esempio di linguaggio macchina per il processore Intel 8086 è il seguente codice per il confronto del contenuto dell’accumulatore AX con la costante 812h: 001111010001001000001000 Per facilitare la descrizione delle istruzioni e degli operandi, si fa uso della notazione esadecimale in alternativa a quella binaria. L’esempio precedente assume in esadecimale questo aspetto: 3D1208

Con debug Con l’uso della calcolatrice scientifica potremo verificare che il valore binario corrispondente è proprio: 001111010001001000001000

Difficile? Resta però difficile lavorare anche con questa notazione. Il codice rimane indistinguibile dagli operandi e solo a fatica, con l’aiuto di una tabella di conversione si riconosce in 3D l’istruzione di confronto. Un certo impegno è anche necessario per la traduzione di 08 12 in 12 08. Infatti viene memorizzato prima il byte della parte bassa e poi il byte della parte alta del numero considerato a 16 bit.

Molto !!! Il codice binario (o la sua rappresentazione equivalente esadecimale) usato nel linguaggio macchina è molto scomodo; per l’uomo è molto più facile raffigurare e lavorare con simboli e messaggi piuttosto che con cifre.

ADD significa ad esempio addizione. Una soluzione: I linguaggi assembler o assembly sono stati introdotti proprio per eliminare i problemi di uso del linguaggio macchina. Le caratteristiche principali dei linguaggi assembler sono le seguenti: In assembler le istruzioni non sono identificate da codici astratti ma da simboli letterali con significato mnemonico. ADD significa ad esempio addizione. Alle variabili viene fatto riferimento per nome e non per locazione assoluta di memoria (indirizzo). E’ possibile definire istruzioni macro assembler, composte a loro volta da altre istruzioni, e richiamarle nel programma. CMP AX, 1208

In Linguaggio Assembly Un esempio In Linguaggio Assembly #include <stdio.h> main() { printf(“ciao \n”); } DSEG SEGMENT ;segmento dati Outstr db “ciao”,13,10,”$” DSEG ENDS SSEG SEGMENT stack ;segmento catasta dw 32 dup (?) SSEG ENDS CSEG SEGMENT ;segmento codice assume cs:cseg, ds:dseg, ss:sseg start: mov bx,dseg mov ds,bx ;DS=DSEG via bx mov dx,offset outstr ;puntatore a “ciao” mov ah,09h ;uscita su schermo int 21h ;richiamo MS-DOS mov ah,4Ch ;termine programma int 21h ;richiamo MS-DOS CSEG ENDS END start ; termine programma ; inizio a start In Linguaggio C

Complicato? Il primo programma è molto più compatto del secondo, oltre che più facile da leggere e capire. Il programma assembler è a prima vista certamente molto più complicato ed è necessario un certo tempo per analizzarne e comprenderne le funzioni, che in questo caso sono comunque molto semplici. Entrambi i programmi funzionano secondo lo stesso principio, richiamando un modulo del sistema operativo per la presentazione di una stringa sullo schermo.

Nel programma in linguaggio C i dettagli di questa chiamata sono nascosti al programmatore al quale è sufficiente scrivere l’istruzione printf . Spetta al compilatore generare la chiamata al sistema operativo, aggiungere alla stringa i codici di controllo “a capo” e “ritorno carrello”, ecc. Nel programma assembler è necessario tenere esplicitamente conto di tutti questi aspetti. Le chiamate al sistema operativo hanno luogo per mezzo dell’istruzione INT 21h. La stringa di uscita è definita nell’area dati; con essa devono essere indicati esplicitamente i codici di “a capo” (ASCII 10) , “ritorno carrello” (ASCII 13) e termine stringa “$”.

Facciamo qualche valutazione.. La differenza nello spazio occupato in memoria dai due programmi è evidente quando si passa a compilarli e collegarli. Le dimensioni in byte dei codici sorgente, oggetto (compilato) e eseguibile (collegato) dei due programmi sono qui confrontate: Programma C Programma Assembler Sorgente 57 byte 682 byte Oggetto 578 byte 194 byte Eseguibile 15 Kbyte 610 byte La differenza nelle dimensioni del programma sorgente assembler è dovuta al maggior spazio richiesto per le istruzioni e per i commenti necessari. Il codice compilato è però già più compatto per il programma assembler. La differenza più rilevante si nota dopo che i programmi sono stati collegati alle rispettive biblioteche e routine di servizio: il programma in assembler manca quasi completamente di overhead, che invece caratterizza il programma in C. Il programma scritto in assembler è più rapido a caricarsi e eseguirsi; entrambi i programmi producono lo stesso risultato e non sono distinguibili solo sulla base di quest’ultimo.

Concludendo.. Non esistono criteri assoluti per optare per un linguaggio ad alto livello oppure assembler. Se con l’assembler è possibile scrivere programmi più efficienti, è anche vero che la loro stesura prende molto più tempo rispetto allo scrivere programmi in un linguaggio avanzato. Anche la documentazione e la manutenzione di programmi assembler sono più difficili e dispendiosi. La programmazione in assembler resta comunque di attualità in tutti i casi dove con la programmazione ad alto livello si raggiungono i limiti di capacità di memoria o velocità di esecuzione di una macchina. Alcune funzioni, in particolare quelle che agiscono direttamente sulle risorse del sistema, non sono realizzabili se non in assembler. Aspetto non trascurabile della programmazione assembler è il suo carattere didattico. Indipendentemente dal numero e tipo di prodotti software installati in un sistema, il processore, almeno con le architetture attuali, opera su istruzioni di macchina assimilabili a quelle di un programma assembler. L’assembler aiuta quindi a comprendere meglio i meccanismi di funzionamento della macchina.