Introduzione al linguaggio assemby del microprocessore 8086 1 a parte

14
Introduzione al linguaggio assemby del microprocessore 8086 1 a parte

description

Assemblatori. Introduzione al linguaggio assemby del microprocessore 8086 1 a parte. …ripartiamo da qui. LINGUAGGIO AD ALTO LIVELLO. c := a. 1 : n. c := c + 1. istruzioni. LINGUAGGIO ASSEMBLY. 1 : 1. mov ax,bx add ax,1. LINGUAGGIO MACCHINA. 0101011100. 0111110100. - PowerPoint PPT Presentation

Transcript of Introduzione al linguaggio assemby del microprocessore 8086 1 a parte

Page 1: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

Introduzione al linguaggio assemby del microprocessore 8086

1a parte

Page 2: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

…ripartiamo da quiLINGUAGGIO AD ALTO LIVELLO

LINGUAGGIO ASSEMBLY

LINGUAGGIO MACCHINA

Page 3: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

Definizione di assemblatoreUn assemblatore è un programma che legge un file di testo che si compone di codici mnemonici, cioè di comandi espressi come parole abbreviate in lingua inglese e li traduce in sequenze binarie di 0 e 1, generando il codice macchina del microprocessore.

L’insieme dei codici mnemonici e delle convenzioni sintattiche di un assembler costituisce un vero e proprio linguaggio di programmazione, il linguaggio assembly.

Page 4: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

Una istruzione assembly una istruzione macchina

La rappresentazione delle istruzioni nella codifica mnemonica permette al programmatore di scrivere un codice sorgente sufficientemente leggibile, mentre la corrispondenza biunivoca esistente tra i codici mnemonici e il codice macchina permette all’assembler di realizzare una traduzione efficiente, accurata e particolarmente rapida.

Anche i compilatori partono da codice sorgente e restituiscono codice macchina però differiscono dagli assembler perché si basano su una corrispondenza non più biunivoca.

Page 5: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

Linguaggi ad alto e basso livello

Un linguaggio ad alto livello garantisce al programmatore una indipendenza quasi completa dall’architettura interna della macchina, a differenza del linguaggio assembly, le cui istruzioni contengono quasi sempre riferimenti espliciti ai registri, alle locazioni di memoria, alle porte di ingresso e uscita del calcolatore. In definitiva, mentre un linguaggio ad alto livello può avere caratteristiche di ‘portabilità’ da una macchina ad un'altra diversa che usa lo stesso linguaggio, il linguaggio assembly è ‘specializzato’ per un tipo o unafamiglia di tipi di macchina perché ne usa direttamente le risorse specifiche.

Page 6: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

Utilizzo dei linguaggi a basso livelloUn particolare campo di applicazioni da sviluppare in assembly è quello relativo allo sviluppo di routine per la gestione o il colloquio con le periferiche (drivers).

Tale compito è molto delicato e richiede attenzione a tutti i dettagli, poiché una periferica di per sè impone dei tempi di azione lunghi rispetto ai tempi di calcolo e il relativo software di gestione è piuttosto specifico rispetto alla periferica stessa.

Page 7: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

Il linguaggio assembly per il processore 8086

In virtù della specializzazione che caratterizza l’assembler è necessario conoscere la macchina target per cui deve essere prodotto il codice macchina, in particolare il processore di cui si deve adottare il set di istruzioni.

Si tratta di un processore conarchitettura a 16 bit ed è piuttosto datato, è nato infatti nel 1978. Da allora ad oggi ci sono state grandissime evoluzioni nello sviluppo dei microprocessori e nella stessa casa intel si è susseguita una famiglia di microprocessori che ha per capostipite proprio l’8086.

Intel 8086

Page 8: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

L’evoluzione dei processori

i8086(16bit) i80286(16bit)

i80386(32bit) i80486

Pentium, II, III e IV.

Questi processori, nell’ordine, sono ciascuno l’evoluzione del precedente e la base per il successivo anche se quest’ultimo introduce degli stravolgimenti nell’architettura.L’intel ha adottato una politica di compatibilità all’indietro. Un programma funzionante su un dato processore doveva funzionare, in un modo o nell’altro, con i processori che sarebbero successivamente stati sviluppati. Ciò ha comportato delle notevoli complicazioni ma ha degli indubbi vantaggi, intanto il software (che ha un costo) era riciclabile con l’aggiornamento della macchina.

Page 9: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

Qualche caratteristica ..L’8086 può indirizzare 220 byte, numerati in maniera sequenziale a partire da 0.

Le istruzioni possono operare sia su byte(8bit) che su parole di 16bit. Con 220 byte di memoria l’8086 ha bisogno di 20 bit per indirizzare la memoria.

Poiché sia i registri che tutti gli altri elementi usano parole di 16bit i numeri di 20 bit non sono convenienti.

Per risolvere questo problema i progettisti hanno introdotto quattro registri di segmento da 16 bit che possono puntare esclusivamente ad indirizzi multipli di 16 byte, ciò equivale ad avere un indirizzo di 20 bit in cui i 4 bit meno significativi sono tenuti sempre a 0.

Dunque ciascun registro contiene un indirizzo di memoria che punta alla base di un segmento (porzione continua di memoria) di 64K(216). Ciò significa che in ogni momento si può accedere al massimo a 64K di memoria senza cambiare il registro di segmento.

Page 10: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

I segmenti

segmento reg. di segmento utilizzo

code CS contiene le istruzioni da eseguire data DS contiene le variabili del programma stack SS usato per tutte le operazioni di stack extra ES usato per immagazzinamento dati

64 K RAM

Page 11: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

Modalità di indirizzamento L’8086 accede agli operandi delle istruzioni in diversi modi.

Gli operandi possono essere contenuti nei registri, nelle istruzioni stesse, nella memoria oppure acquisiti dalle porte di I/O.

Gli operandi indirizzi di memoria possono essere calcolati in diversi modi.

• INDIRIZZAMENTO IMMEDIATOINDIRIZZAMENTO IMMEDIATO

• INDIRIZZAMENTO A REGISTROINDIRIZZAMENTO A REGISTRO

• INDIRIZZAMENTO DIRETTOINDIRIZZAMENTO DIRETTO

• INDIRIZZAMENTO INDIRETTO CON REGISTROINDIRIZZAMENTO INDIRETTO CON REGISTRO

• INDIRIZZAMENTO CON REGISTRO DI BASEINDIRIZZAMENTO CON REGISTRO DI BASE

• INDIRIZZAMENTO CON REGISTRO INDICEINDIRIZZAMENTO CON REGISTRO INDICE

• INDIRIZZAMENTO CON REGISTRI BASE E INDICEINDIRIZZAMENTO CON REGISTRI BASE E INDICE

Page 12: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

INDIRIZZAMENTO IMMEDIATOGli operandi immediati sono dati costanti contenuti in un istruzione.

Possono essere lunghi 8 o 16 bit.

Sono accessibili rapidamente perché disponibili direttamente dall’istruzione.

MOV AH,00

MOV AL,04

MOV AX,0FFFFh

MOV AX,302

MOV AX,23o

MOV AL,-40

MOV DL,’w’

MOV AH,00

MOV AL,04

MOV AX,0FFFFh

MOV AX,302

MOV AX,23o

MOV AL,-40

MOV DL,’w’

AX

302

Page 13: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

INDIRIZZAMENTO A REGISTRO

Il valore dell’operando sorgente è contenuto in uno dei registri interni dell’8086.

La sua dimensione può essere 8 o 16 bit.

MOV DL,AL

MOV DS,AX

MOV DL,AL

MOV DS,AX

AB

DL

AL

Page 14: Introduzione al linguaggio assemby del  microprocessore  8086  1 a  parte

INDIRIZZAMENTO INDIRETTO CON REGISTRO

L’indirizzo dell’operando sorgente è contenuto in uno dei registri interni dell’8086.

MOV AX,[ BX ]MOV AX,[ BX ]

BX96000

AX

RAM

FF

96000