La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Introduzione al linguaggio assembly del microprocessore 8086 2 a parte.

Presentazioni simili


Presentazione sul tema: "Introduzione al linguaggio assembly del microprocessore 8086 2 a parte."— Transcript della presentazione:

1 Introduzione al linguaggio assembly del microprocessore a parte

2 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 lunica possibile, allinizio dellepoca del calcolo elettronico, prima dellintroduzione degli assemblatori e dei compilatori. Il linguaggio macchina non è altro che linsieme delle istruzioni definite per un particolare processore. Ogni istruzione è identificata dal suo codice, di solito riportato in binario o esadecimale. 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 lunica possibile, allinizio dellepoca del calcolo elettronico, prima dellintroduzione degli assemblatori e dei compilatori. Il linguaggio macchina non è altro che linsieme delle istruzioni definite per un particolare processore. Ogni istruzione è identificata dal suo codice, di solito riportato in binario o esadecimale.

3 Il linguaggio macchina Per facilitare la descrizione delle istruzioni e degli operandi, si fa uso della notazione esadecimale in alternativa a quella binaria. Lesempio precedente assume in esadecimale questo aspetto: Per facilitare la descrizione delle istruzioni e degli operandi, si fa uso della notazione esadecimale in alternativa a quella binaria. Lesempio precedente assume in esadecimale questo aspetto: D1208 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 dellaccumulatore AX con la costante 812 h : 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 dellaccumulatore AX con la costante 812 h :

4 Con debug Con luso della calcolatrice scientifica potremo verificare che il valore binario corrispondente è proprio:

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

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

7 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. 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.

8 Un esempio #include main() { printf(ciao \n); } DSEG SEGMENT ;segmento dati Outstr db ciao,13,10,$ DSEG ENDS SSEG SEGMENT stack;segmento catasta dw32 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 In Linguaggio Assembly

9 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. 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.

10 Nel programma assembler è necessario tenere esplicitamente conto di tutti questi aspetti. Le chiamate al sistema operativo hanno luogo per mezzo dellistruzione INT 21h. La stringa di uscita è definita nellarea dati; con essa devono essere indicati esplicitamente i codici di a capo (ASCII 10),ritorno carrello (ASCII 13) e termine stringa $. Nel programma assembler è necessario tenere esplicitamente conto di tutti questi aspetti. Le chiamate al sistema operativo hanno luogo per mezzo dellistruzione INT 21h. La stringa di uscita è definita nellarea dati; con essa devono essere indicati esplicitamente i codici di a capo (ASCII 10),ritorno carrello (ASCII 13) e termine stringa $. Nel programma in linguaggio C i dettagli di questa chiamata sono nascosti al programmatore al quale è sufficiente scrivere listruzione 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 in linguaggio C i dettagli di questa chiamata sono nascosti al programmatore al quale è sufficiente scrivere listruzione printf. Spetta al compilatore generare la chiamata al sistema operativo, aggiungere alla stringa i codici di controllo a capo e ritorno carrello, ecc.

11 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: 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 CProgramma Assembler Sorgente57 byte682 byte Oggetto578 byte194 byte Eseguibile15 Kbyte610 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 questultimo.

12 Concludendo.. Non esistono criteri assoluti per optare per un linguaggio ad alto livello oppure assembler. Se con lassembler è 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. 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. Lassembler aiuta quindi a comprendere meglio i meccanismi di funzionamento della macchina.


Scaricare ppt "Introduzione al linguaggio assembly del microprocessore 8086 2 a parte."

Presentazioni simili


Annunci Google