Formato istruzioni e direttive 8086

1,260 views
1,155 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,260
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
48
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Formato istruzioni e direttive 8086

  1. 1. Sistemi a Microprocessore Formato istruzioni e direttive Sistemi a Microprocessore ASSEMBLER 8086: FORMATO ISTRUZIONI E DIRETTIVE 1 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 2Sergio PORCU 1
  2. 2. Sistemi a Microprocessore Formato istruzioni e direttive 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 sorgente ad esempio, MOV AX, CX copia il contenuto del registro CX nel registro AX • commento consente di rendere più leggibile il programma 3 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. 4Sergio PORCU 2
  3. 3. Sistemi a Microprocessore Formato istruzioni e direttive 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) 5 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 6Sergio PORCU 3
  4. 4. Sistemi a Microprocessore Formato istruzioni e direttive Costanti numeriche Ad esempio: 00FFh 0h 777O 11001B FFh errata! 778O errata! 7 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. 8Sergio PORCU 4
  5. 5. Sistemi a Microprocessore Formato istruzioni e direttive Direttive semplificate per la gestione dei segmenti • Modelli di memoria • Creazione dello stack • Creazione del segmento di dato • Creazione del segmento di codice 9 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 ...} 10Sergio PORCU 5
  6. 6. Sistemi a Microprocessore Formato istruzioni e direttive 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 11 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 12Sergio PORCU 6
  7. 7. Sistemi a Microprocessore Formato istruzioni e direttive 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. 13 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? 14Sergio PORCU 7
  8. 8. Sistemi a Microprocessore Formato istruzioni e direttive 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. 15 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:NOTHING ASSUME NOTHING 16Sergio PORCU 8
  9. 9. Sistemi a Microprocessore Formato istruzioni e direttive 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 17 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 18Sergio PORCU 9
  10. 10. Sistemi a Microprocessore Formato istruzioni e direttive 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] 19 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 20Sergio PORCU 10
  11. 11. Sistemi a Microprocessore Formato istruzioni e direttive Direttive per la definizione di procedure La direttiva ENDP indica la fine di una procedura: nome ENDP • nome è il nome simbolico della procedura 21 Direttive per la definizione dei dati Tali direttive permettono di definire: • il nome • il tipo • il contenuto delle variabili in memoria. Il formato è il seguente: [nome] tipo espressione [, espressione] 22Sergio PORCU 11
  12. 12. Sistemi a Microprocessore Formato istruzioni e direttive 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) 23 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) 24Sergio PORCU 12
  13. 13. Sistemi a Microprocessore Formato istruzioni e direttive Direttive per la definizione dei dati - Esempi ByteVar DB 0 ;1 byte inizializzato a 0 ByteArray DB 1,2,3,4 ;array di 4 byte String DB ‘8’,’0’,’8’,’6’ ;array di 4 caratteri String DB ‘8086’ ;equivalente al ;precedente Titolo DB ‘Titolo’,0dh,0ah ;stringa che contiene ;anche una coppia di ;caratteri CR/LF 25 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 26Sergio PORCU 13
  14. 14. Sistemi a Microprocessore Formato istruzioni e direttive 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 27 Direttive per la definizione dei dati - Esempi DoubleVar DD ? ;scalare di una doubleword FarPointer DD Matrix ;contiene l’offset e l’indirizzo ;del segmento di Matrix 28Sergio PORCU 14
  15. 15. Sistemi a Microprocessore Formato istruzioni e direttive 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 29 La direttiva EQU CR EQU 0dh ;carattere Carriage Return LF EQU 0ah ;carattere Line Feed ... ... Titolo DB ‘Titolo’,CR,LF ;stringa che contiene ;anche una coppia di ;caratteri CR/LF 30Sergio PORCU 15
  16. 16. Sistemi a Microprocessore Formato istruzioni e direttive La direttiva LABEL La direttiva LABEL forza un simbolo ad un tipo specificato: nome LABEL tipo Esempio: words LABEL WORD ;struttura come word bytes db howmany DUP (?) ... MOV AX, words ;prima word 31 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 32Sergio PORCU 16
  17. 17. Sistemi a Microprocessore Formato istruzioni e direttive 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, ... 33 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 34Sergio PORCU 17
  18. 18. Sistemi a Microprocessore Formato istruzioni e direttive 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 35 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 36Sergio PORCU 18
  19. 19. Sistemi a Microprocessore Formato istruzioni e direttive 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 37 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 38Sergio PORCU 19
  20. 20. Sistemi a Microprocessore Formato istruzioni e direttive 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, ... 39 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 40Sergio PORCU 20

×