Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Concetti Generali
Sommario
Introduzione Pseudo-Istruzioni Operatori Modi di Indirizzamento Istruzioni
Sommario
Introduzione Pseudo-Istruzioni Operatori Modi di Indirizzamento Istruzioni
Introduzione
I programmi Assembler sono composti di:
direttive o pseudo-istruzioni: sono comandi per pseudo istruzioni: lassemblatore istruzioni: generano unistruzione macchina. un istruzione macchina
VAR1 ADD
DB ? AX, 5 ,
Direttive o Pseudo-Istruzioni
Sono direttive per l'Assemblatore, che non corrispondono a istruzioni macchina nel codice generato Le categorie principali di pseudo istruzioni pseudo-istruzioni sono:
pseudo-istruzioni per la definizione di variabili pseudo-istruzioni per la definizione di costanti pseudo-istruzioni per la gestione dei segmenti.
Istruzioni
label: mnemonico operando, operando ;commento dove label: identifica lindirizzo di partenza di una istruzione operando: in numero variabile da 0 a 2 p mnemonico: identifica una istruzione commento: qualsiasi sequenza di caratteri Esempio lab1: mov ax, 5 ; carico ax
Sommario
Introduzione Pseudo-Istruzioni Operatori Modi di Indirizzamento Istruzioni
Direttiva .MODEL
La direttiva .MODEL definisce gli attributi di base relativi allintero modulo sorgente: all intero
modello di memoria convenzione dei nomi sistema operativo (DOS o WINDOWS) tipo ti di stack. t k
Direttiva .MODEL
Formato .MODEL modello [opzioni, ...] Uso Il modello obbligatorio e definisce le dimensioni dei segmenti di codice e di dato. Le L opzioni possibili sono relative a: i i ibili l ti
convenzioni dei nomi e delle chiamate per procedure proced re e simboli p bblici pubblici tipo di stack.
Modelli di memoria
Il MASM supporta i modelli di memoria standard usati dai linguaggi di alto livello Microsoft. I possibili modelli di memoria sono i seguenti: Default Code Near Near Far Near Far Far Default Data Near Near Near Far Far Far Data e Code Combinati S No No No No No
Segmento di stack
Nel comando.MODEL possibile specificare il tipo di stack:
NEARSTACK (default): il segmento di stack ed il segmento di dato sono allinterno dello stesso all interno segmento fisico (DS ed SS coincidono). FARSTACK: i segmenti di dato e di stack sono distinti
Esempio
.MODEL small .STACK .DATA DATA vett1 DB 100 DUP (?) .CODE .STARTUP ... MOV AX, 0 ... .EXIT END
Esempio
.MODEL small .STACK .DATA segm1 vett1 DB 100 DUP (?) tt1 .DATA segm2 vett2 DB 100 DUP (?) .CODE CODE ASSUME DS:segm1, ES:segm2 .STARTUP MOV AX, segm1 g MOV DS, AX MOV AX, segm2 MOV ES, AX ... .EXIT END
Costanti
binarie: 001101B ottali: 15O, 15Q , Q esadecimali: 72H, 0DH, 0BEACH (devono iniziare con un numero) decimali: 13, 13D stringhe: S, Ciao S Ciao reali in base 10: 2.345925, 715E-3
Variabili
Sono utilizzate per identificare in modo simbolico una zona di memoria contenente dati. All atto Allatto della definizione della variabile si variabile, definiscono
il nome la dimensione il valore di inizializzazione (eventualmente).
Identificatori
Sono i nomi che possono essere assegnati a istruzioni, variabili, procedure, costanti, p segmenti Sono cos composti: p
il primo carattere pu essere una lettera (a-z, AZ), oppure uno dei 4 caratteri @ _ $ ? ) gli altri caratteri possono essere una lettera, un numero, o uno dei 4 caratteri sopra
Direttiva DB
La direttiva L di tti DB permette di d fi i strutture d ti costituite da tt definire t tt dati tit it d byte. utilizzata per la memorizzazione di: p caratteri stringhe numeri interi. interi Esempi: NUM DB ? NUM2 DB 32 CITTA DB "T","o","r","i","n","o" CITTA2 DB "Torino" "T i " STR2 DB 'Programma perfetto !' TAB DB 10 DUP (0) ( ) TAB2 DB 1, 123, 84, 5 DUP (?), -10
Direttiva DW
La direttiva DW permette di definire strutture dati costituite da word (2 byte). utilizzata per la memorizzazione di: 1 o 2 caratteri numeri interi indirizzi di offset. La direttiva DW NON pu essere utilizzata per memorizzare una sequenza di caratteri. q Esempi: TAB DW 1, 350, -4000, 1024 LISTA DB 100 DUP (?) LIST_OFF DW LISTA
Direttiva DD
La direttiva DD permette di definire strutture dati costituite da doubleword (4 byte). utilizzata per la memorizzazione di: 1 o 2 caratteri numeri interi indirizzi interi (registro di segmento e offset). La direttiva DD NON pu essere utilizzata per memorizzare una sequenza di caratteri. q Esempi: TAB DD 125000 LISTA DB 100 DUP (?) LIST_ADD DD LISTA
Direttive DQ e DT
Le direttive DQ e DT permettono di definire dati costituiti da quadword (8 byte) e tenbyte (10 byte). Quadword e tenbyte sono utilizzati per memorizzare numeri di grande precisione per il coprocessore matematico. matematico Una variabile tenbyte pu memorizzare un dato di tipo decimale impaccato secondo il seguente formato:
2 numeri decimali per ogni byte il primo byte memorizza il segno gli altri 9 possono memorizzare fino a 18 cifre decimali.
Sommario
Introduzione Pseudo-Istruzioni Operatori Modi di Indirizzamento Istruzioni
Operatori
Sono direttive per lassemblatore Si distinguono in
operatori per il calcolo degli attributi di una variabile (TYPE, LENGTH, SIZE, SEG, OFFSET) operatori aritmetici p (+, -, *, /, MOD) ope a o che od ca o operatori c e modificano il tipo d u a variabile po di una a ab e (PTR).
Operatore OFFSET
Formato: OFFSET variabile Funzionamento: Loperatore OFFSET restituisce il valore dell'offset di una variabile. Applicazione: Loperatore OFFSET pu essere usato in alternativa allistruzione LEA. LEA Esempio: Le due seguenti istruzioni sono equivalenti: MOV AX, OFFSET VAR LEA AX, VAR
Operatore LENGTH
Loperatore LENGTH ha senso solo per variabili allocate attraverso loperatore DUP. In tutti gli altri casi restituisce infatti il valore 1. Esempio EXP DW 5 DUP (?) EXP2 DW 1, 2, 3, 4, 5 MOV AX, LENGTH EXP MOV BX, TYPE EXP MOV CX, SIZE EXP MOV DX, LENGTH EXP2 Dopo queste istruzioni in AX c 5, in BX c 2, in CX c 10 ed in DX c 1.
Operatore SEG
Formato: SEG variabile Funzionamento: F i t Loperatore SEG restituisce lindirizzo di inizio del segmento a cui appartiene loperando variabile l operando variabile. Esempio: LEA SI, STR MOV AX, SEG STR MOV DS, AX equivalente a: LDS SI, STR
Operatori Aritmetici
aritmetici: +, -, *, /, MOD
Esempio: K EQU .DATA TOT DW .CODE CODE MOV MOV ERRORE GRAVE: MOV
BH, BH AH * K
Operatore PTR
Formato: tipo PTR nome Funzionamento: Loperatore PTR forza lassemblatore a modificare per l'istruzione corrente il tipo del dato avente come identificatore nome. Esempio: .DATA TOT DW ? .CODE MOV BH, BYTE PTR TOT MOV CH, BYTE PTR TOT+1
Operatore PTR
Esempio COPPIA
(segue)
.DATA DB 2 DUP (?) .CODE MOV AX, COPPIA , MOV AX, WORD PTR COPPIA
; ERRORE!
Esempio INC [BX] La cella da incrementare corrisponde ad una word o ad un byte ? Lassemblatore non pu saperlo e genera errore. Soluzione: S l i INC BYTE PTR [BX]
Sommario
Introduzione Pseudo-Istruzioni Operatori Modi di Indirizzamento Istruzioni
Modi di Indirizzamento
Il Modo di Indirizzamento di una istruzione definisce lo spazio indirizzabile ed il metodo da usarsi per il calcolo dellindirizzo stesso. Gli operandi possono essere contenuti:
in registri nellistruzione stessa in memoria su una porta di I/O.
Register Addressing
Nellistruzione specificato il registro da utilizzare come operando.
AX BX
Esempio p
4F02 xxxx
Immediate Addressing
Nellistruzione stessa indicato il dato da usare come operando. Esempio
xxxx
07
Note
Loperando pu anche essere un simbolo definito con una pseudo-istruzione EQU.
Esempio E i
EQU : MOV
1024 CX, K
il dato indicato nellistruzione viene trasformato dallassemblatore in formato binario su 8 o 16 bit, e , scritto nel campo opportuno dellistruzione macchina.
Direct Addressing
Nellistruzione contenuto lidentificatore di una variabile, corrispondente allEffective Address della parola di memoria da utilizzare come operando Alla variabile pu essere sommato o sottratto un displacement attraverso gli operatori + e Una notazione equivalente prevede lutilizzo delle p parentesi q quadre p racchiudere il displacement o per p lidentificatore della variabile Lindirizzo fisico ottenuto sommando lEA con il contenuto del Data Segment Register DS. t t d lD t S t R i t DS
xxxx
VAR+2 VAR
E34F
VAR+2 VAR
Viene detto Indirect perch nellistruzione indicato p dove trovare lindirizzo delloperando. Esempio MOV AX, [BX]
Registri di segmento
Ciascun registro abbinato ad un particolare registro di segmento: DS BX DS SI DS DI SS BP.
Esempio
Codice per il trasferimento di un vettore in un altro usando il Register Indirect Addressing.
: MOV SI, OFFSET SOURCE_VECT MOV DI, OFFSET DEST_VECT MOV CX, LENGTH SOURCE_VECT MOV AX, [SI] MOV [DI], AX ADD SI, 2 ADD DI, 2 , LOOP QUI :
QUI:
spiazzamento 20
... Elemento 2
+
BX 0020
Elemento 1 Elemento 0
SI
10
+
VAR 0020
Elemento 1 Elemento 0
Esempio
Codice per il trasferimento di un vettore in un altro usando il Direct Indexed Addressing. : MOV MOV QUI: MOV MOV ADD SI, 0 CX, LENGTH SOURCE_VECT AX, SOURCE_VECT [SI] _ DEST_VECT [SI], AX SI, 2
LOOP QUI :
0 0 A 1 F 2M
1 B G N
2 C H O
3 D I P
4 E L Q
0 A 1 F 2M 3 B 4 G 5 N 6 C 7 H 8 O 9 D 10 I 11 P 12 E 13 L 14 Q
Memorizzazione per colonne
...
Elemento (i,n-1)
...
SI BX j
Elemento (i,j)
+
i*n
...
Elemento (i,1) (i 1) Elemento (i,0)
... +
VAR 002A
Elemento (0,n-1) El t (0 1)
...
Elemento (0,1) Elemento (0,0)
Soluzione Assembler
RIGHE EQU 4 COLONNE EQU 5 .MODEL small .STACK .DATA SORG DW RIGHE*COLONNE DUP DEST DW RIGHE*COLONNE DUP .CODE CODE MOV BX, COLONNE*3*2 ; MOV SI, 0 ; MOV CX, 5 ; ciclo: MOV AX, SORG[BX][SI] MOV DEST[BX][SI], AX ADD SI, 2 ; LOOP ciclo ; ... ;
(?) (?)
; caricamento in BX del primo elemento della quarta riga inizializzazione del registro SI in CX del numero di colonne
Istruzioni
LAssembler 80x86 rende disponibili 92 tipi di istruzioni, raggruppabili nelle seguenti classi:
Trasferimento Dati Aritmetiche Manipolazione di Bit Control Transfer Manipolazione di Stringhe p g Interrupt Handling Process Control.