Formato istruzioni e direttive 8086

20

Click here to load reader

Transcript of Formato istruzioni e direttive 8086

Page 1: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 1

1

Sistemi a Microprocessore

ASSEMBLER 8086: FORMATO ISTRUZIONI E

DIRETTIVE

2

Formato delle istruzioni

Il formato delle istruzioni è il seguente:[label] istruzione/direttiva [operando/i] [; commento]• label consente di dare un nome simbolico (da

utilizzare come operando in altre istruzioni) a variabili di memoria, valori, singole istruzioni, procedure

• istruzione/direttiva è il mnemonico per un’istruzione eseguibile o una direttiva; individua il tipo di operazione da eseguire e il numero e il tipo degli operandi

Page 2: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 2

3

Formato delle istruzioni

• operando/i è una combinazione di nessuna, una o più costanti, riferimenti a registri o riferimenti alla memoria; se un’istruzione ammette due operandi:� il primo è l’operando destinazione� il secondo è l’operando sorgentead esempio, MOV AX, CX copia il contenuto

del registro CX nel registro AX• commento consente di rendere più

leggibile il programma

4

Formato delle istruzioni

È indifferente l’uso di lettere maiuscole o minuscole. Il tipo di operandi ammessi varia da istruzione a istruzione. Esistono istruzioni che ammettono come operando solo una costante o solo un particolare registro generale.

Page 3: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 3

5

Nomi simbolici

• Caratteri ammessi per i nomi simbolici:• A-Z a-z 0-9 _ $ ? @

• Il primo carattere di un nome non può essere digit (0-9)

• Ogni nome deve essere univoco (in genere, all’interno del modulo in cui viene definito)

• Non deve coincidere con una parola riservata (ad esempio, il nome di un registro o di un operatore)

6

Costanti numeriche

• Di default, tutti i valori numerici sono espressi in base dieci

• È possibile esprimere le costanti numeriche:• in base 16 (esadecimale) mediante il

suffisso H (il primo digit deve essere numerico)

• in base 8 (ottale) mediante il suffisso O• in base 2 (binario) mediante il suffisso B

Page 4: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 4

7

Costanti numeriche

Ad esempio:00FFh0h777O11001BFFh errata!778O errata!

8

Direttive

Le direttive sono istruzioni di tipo dichiarativo che forniscono informazioni agli strumenti di sviluppo dei programmi. In particolare, alcune di queste direttive fanno sì che l’assemblatore generi al loro posto una serie opportuna di istruzioni; in questo caso tali direttive sono assimilabili a macro predefinite.

Page 5: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 5

9

Direttive semplificate per la gestione dei segmenti

• Modelli di memoria• Creazione dello stack• Creazione del segmento di dato• Creazione del segmento di codice

10

Modelli di memoria

La direttiva .MODEL definisce alcuni attributi che condizionano l’intero modulo ed è necessaria per abilitare la gestione semplificata dei segmenti. Deve essere posta nel file sorgente prima di ogni altra direttiva di segmento.

Sintassi:.MODEL modello {, opzione ...}

Page 6: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 6

11

Modelli di memoria

I modelli possono essere:• TINY: il codice e i dati sono in un unico

segmento di 64k byte. Usato nei file COM• SMALL: un segmento per il codice ed uno

per i dati e lo stack. Entrambi non oltre i 64k byte

• MEDIUM: il codice usa più segmenti (superata barriera dei 64k byte). I dati e lo stack come SMALL

12

Modelli di memoria

• COMPACT: è come SMALL, ma per accedere ai dati si usano i puntatori FAR che superano i 64k byte

• LARGE: è come MEDIUM, ma per accedere ai dati si usano i puntatori FAR che superano i 64k byte

• FLAT: modalità a 32 bit dei processori 386+. Abolito il metodo SEG:OFFSET, l’indirizzo è dato da un unico numero a 32 bit

Page 7: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 7

13

Creazione dello stack

La direttiva .STACK permette di riservare uno spazio di memoria per lo stack; il formato di tale direttiva è il seguente:

.STACK {mem}Tale direttiva riserva uno spazio di

memoria pari a mem byte. Per default lo spazio riservato per lo stack è di 1k byte.

14

Creazione del segmento di dato

Le direttive .DATA, .DATA?, CONST, FARDATA, FARDATA? permettono di creare un segmento di dato. Il loro formato è il seguente:

.DATA.DATA?.CONST

.FARDATA.FARDATA?

Page 8: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 8

15

Creazione del segmento di codice

La direttiva .CODE permette di definire un segmento in cui specificare le istruzioni; il suo formato è il seguente:

.CODE {nome}La direttiva .CODE definisce un segmento di

codice. Il campo opzionale nome definisce un eventuale nome da assegnare al segmento di codice in alternativa a quello di default.

16

La direttiva ASSUME

La direttiva ASSUME ha il compito di indicare all’assemblatore a quale segmento un determinato registro di segmento sta puntando:ASSUME segReg:nome [segReg:nome] ...

ASSUME segReg:NOTHINGASSUME NOTHING

Page 9: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 9

17

La direttiva ASSUME

• segReg è il nome di un registro di segmento (CS, SS, DS, ES)

• nome è il segmento al quale l’assemblatore assume che segReg punti da questo momento in poi (sino a una nuova ASSUME che coinvolga lo stesso registro)

• NOTHING cancella l’associazione tra registri e segmenti

18

La direttiva ASSUME

L’uso di ASSUME non equivale al caricamento di un registro di segmento, ma permette di:

• controllare la validità dei riferimenti alla memoria

• inserire automaticamente eventuali prefissi di segmentazione diversi da quelli di default

Page 10: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 10

19

Direttive per la definizione di procedure

La definizione di ogni procedura deve iniziare con una direttiva PROC e deve terminare con una direttiva ENDP. La direttiva PROC definisce l’inizio di una procedura:

nome PROC [distanza]

20

Direttive per la definizione di procedure

• nome è il nome simbolico della procedura (da utilizzare nelle chiamate a procedura)

• distanza è:� NEAR – la procedura può essere

chiamata solo all’interno del segmento in cui è stata definita (default)

� FAR – la procedura può essere chiamata da qualsiasi segmento

Page 11: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 11

21

Direttive per la definizione di procedure

La direttiva ENDP indica la fine di una procedura:

nome ENDP• nome è il nome simbolico della

procedura

22

Direttive per la definizione dei dati

Tali direttive permettono di definire:• il nome• il tipo• il contenutodelle variabili in memoria.Il formato è il seguente:[nome] tipo espressione [, espressione]

Page 12: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 12

23

Direttive per la definizione dei dati

• nome è il nome simbolico del dato• tipo è la lunghezza del dato (se

scalare) o di ogni elemento del dato (se array). I tipi più utilizzati sono:• DB riserva uno o più byte (8 bit)• DW riserva una o più word (16 bit)• DD riserva una o più doubleword (32 bit)

24

Direttive per la definizione dei dati

• espressione è il contenuto iniziale del dato:• un’espressione costante• una stringa di caratteri (solo DB)• un punto di domanda (nessuna

inizializzazione)• un’espressione che fornisce un indirizzo

(solo DW e DD)• un’espressione DUP (duplicata)

Page 13: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 13

25

Direttive per la definizione dei dati - Esempi

ByteVar DB 0 ;1 byte inizializzato a 0ByteArray DB 1,2,3,4 ;array di 4 byteString DB ‘8’,’0’,’8’,’6’ ;array di 4 caratteriString DB ‘8086’ ;equivalente al

;precedenteTitolo DB ‘Titolo’,0dh,0ah

;stringa che contiene ;anche una coppia di ;caratteri CR/LF

26

Direttive per la definizione dei dati - Esempi

Zeros DB 256 dup (0);array di 256 byte ;inizializzati a 0

Tabella DB 50 dup (?);array di 50 byte ;non inizializzati

WordVar DW 100*50;scalare di una ;word

Page 14: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 14

27

Direttive per la definizione dei dati - Esempi

Matrix DW 1,0,0,0,10,0,0,1,0,0,0,1,0,0,0;array di 16 word

Matrix DW 4 dup(1,3 dup(0));equivale al precedente

NearPointer DW Matrix;contiene l’offset di ;Matrix

28

Direttive per la definizione dei dati - Esempi

DoubleVar DD ? ;scalare di una doublewordFarPointer DD Matrix

;contiene l’offset e l’indirizzo ;del segmento di Matrix

Page 15: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 15

29

La direttiva EQU

Permette di assegnare un nome simbolico a una costante:

nome EQU espressione• nome è il nome simbolico associato alla

costante. Può essere utilizzato ovunque al posto della costante stessa. Occorre usare le lettere maiuscole per distinguere le costanti dalle variabili

• espressione deve fornire un valore costante

30

La direttiva EQU

CR EQU 0dh ;carattere Carriage ReturnLF EQU 0ah ;carattere Line Feed

...

...Titolo DB ‘Titolo’,CR,LF

;stringa che contiene ;anche una coppia di ;caratteri CR/LF

Page 16: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 16

31

La direttiva LABELLa direttiva LABEL forza un simbolo ad un tipo

specificato:nome LABEL tipo

Esempio:words LABEL WORD ;struttura come wordbytes db howmany DUP (?)

...MOV AX, words ;prima word

32

La direttiva PUBLIC

La direttiva PUBLIC rende accessibili da altri moduli uno o più simboli:

PUBLIC symbol [, symbol ...]• symbol è il nome di una variabile o di

una procedura

Page 17: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 17

33

La direttiva EXTRN

La direttiva EXTRN rende accessibili uno o più simboli definiti in un altro modulo:

EXTRN nome:tipo [, nome:tipo ...]• nome è il nome di un simbolo definiti

PUBLIC in un altro modulo• tipo è il tipo del simbolo:

� BYTE, WORD, ...� NEAR, FAR, ...

34

Operatori

Permettono di formare espressioni complesse da utilizzare come operandi di istruzioni e direttive.

L’assemblatore:• valuta ogni espressione al momento della

traduzione del programma sorgente• sostituisce il risultato dell’espressione, che

deve essere una costante, all’espressione stessa

Page 18: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 18

35

Priorità degli operatori

• Gli operatori di priorità maggiore vengono calcolati prima di quelli con priorità inferiore

• Gli operatori con uguale priorità vengono calcolati da sinistra a destra

• Eventuali sottoespressioni tra parentesi vengono calcolate per prime

36

Operatore :

Permette di utilizzare un segmento diverso da quello di default:

segName:espressione• segName è il nome di un registro

segmento o di un segmento definito con la direttiva SEGMENT

• espressione fornisce un offset relativo al segmento segName

Page 19: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 19

37

Operatore SEG

Fornisce l’indirizzo del segmento di un’espressione:

SEG espressione• espressione è un riferimento alla

memoria (una label o una variabile)• SEG restituisce l’indirizzo del

segmento che contiene il riferimento alla memoria

38

Operatore OFFSET

Fornisce l’offset di un’espressione all’interno di un segmento:

OFFSET espressione• espressione è un riferimento alla memoria

(una label o una variabile)• OFFSET restituisce il numero di byte

dall’inizio del segmento alla locazione della memoria a cui si riferisce espressione

Page 20: Formato istruzioni e direttive 8086

Sistemi a Microprocessore Formato istruzioni e direttive

Sergio PORCU 20

39

Operatore PTR

Cast di un’espressione ad un dato tipo:tipo PTR espressione

• espressione è un riferimento alla memoria

• tipo è:� se dati: byte, word, ...� se codice: near, far, ...

40

Operatore SHORT

Informa l’assemblatore che espressione è distante dalla locazione corrente da -128 a +127 byte (indirizzo di un byte):

SHORT espressione• espressione è un riferimento a una

label nel segmento codice corrente