Breve guida
AL LINGUAGGIO
ASSEMBLY
(emulatore EMU8086)
1
LABORATORIO DI SISTEMI – ASSEMBLY 8086
IL LINGUAGGIO ASSEMBLY
Il linguaggio assembly è un linguaggio di programmazione a
basso livello. Per linguaggi di basso livello si intendono il
sottogruppo linguaggi di programmazione orientanti alla
macchina, al contrario del linguaggio di programmazione ad alto
livello che è orientato all'utente.
Un esempio di linguaggio a basso livello è l'assembly.
Per programmare in assembly è necessario conoscere la struttura
di base di un PC. La struttura più semplice di un computer può
essere così schematizzata:
2
LABORATORIO DI SISTEMI – ASSEMBLY 8086
3
LABORATORIO DI SISTEMI – ASSEMBLY 8086
Lo stack è un’area di memoria della CPU in cui i dati vengono estratti col
metodo FIFO (First In First Out)
Registri di segmento
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
OF DF IF TF SF ZF AF PF CF
I bit 8,9,10, contengono flag di controllo. Gli altri non vengono utilizzati.
4
LABORATORIO DI SISTEMI – ASSEMBLY 8086
dove:
MOV ax,bx
MOV bx,ax
MOV variabile,ax
ed alcuni esempi errati:
5
LABORATORIO DI SISTEMI – ASSEMBLY 8086
6
LABORATORIO DI SISTEMI – ASSEMBLY 8086
Definizione di Costanti
• Le costanti sono nomi dati a valori
• non compaiono nel codice oggetto ed eseguibile
– Il valore di una costante non può essere modificato
• Durante la traduzione, l’assemblatore sostituisce ogni occorrenza
del nome di una costante con il valore corrispondente
– Esempi:
MAX EQU 10h
VAT EQU ‘@’
Definizione di variabili
• Sintassi:
<nome> <tipo> <val_iniziale>
dove:
<nome> è un identificatore
<tipo> indica la dimensione e può essere
– DB: Byte (8 bit)
– DW: Word (16 bit)
– DD: Double Word (32 bit) (non usato nell’8086)
<val_iniziale> è il valore di inizializzazione e può essere
– un valore numerico (es.: VAR1 DB 10)
– una stringa di caratteri (es.: VAR1 DB ”casa: $”)
– il carattere ? (indica nessun valore, es.: VAR1 DB ?)
8
LABORATORIO DI SISTEMI – ASSEMBLY 8086
MOV CARAT, AL
9
LABORATORIO DI SISTEMI – ASSEMBLY 8086
i cicli:
MOV CX,VALORE
OBIETTIVO:
…
…
LOOP OBIETTIVO
Salto incondizionato:
etichetta: JMP etichetta1
… …
… …
JMP etichetta etichetta1:
Confronto:
CMP DEST, SORG
Esempi di confronto:
cmp registro,variabile – cmp ax,var1
cmp registro,registro – cmp ax,bx
cmp variabile,costante – cmp var,5
cmp registro,costante – cmp al,0dh
es.: cmp var1,0dh (13)
je etichetta
10
LABORATORIO DI SISTEMI – ASSEMBLY 8086
11
LABORATORIO DI SISTEMI – ASSEMBLY 8086
incremento:
INC VAR1
INC BX
decremento:
DEC VAR1
DEC BX
sottrazione:
(sintassi SUB DEST, SORG)
esempi:
SUB AX,10
SUB AX,AX
SUB VAR1,10
SUB AX,BX
SUB BX,VAR1
addizione:
(sintassi ADD DEST,SORG)
esempi:
ADD AX,10
ADD VAR1,10
ADD AX,BX
ADD BX,VAR1
12
LABORATORIO DI SISTEMI – ASSEMBLY 8086
divisione:
• Senza segno: DIV (DIVision, unsigned)
Sintassi: DIV <source>
moltiplicazione:
• Senza segno: MUL (MULtiply, unsigned)
Sintassi: MUL <source>
13
LABORATORIO DI SISTEMI – ASSEMBLY 8086
Le variabili (array)
• Gli array sono sequenze di dati di tipo omogeneo
– Es.: vettori numerici (1,2,5,3)
– Es.: stringhe di caratteri (“prova”)
• Le variabili array si dichiarano come segue:
a DB 1, 4, 6, 16, 3, 0 ; array di 6 byte
b DB ‘H’,’e’,’l’,’l’,’o’ ; array di caratteri
c DB 5 DUP(9) ; come c DB 9,9,9,9,9
d DW 10 DUP(?) ; array di 10 word non inizializzate
• Esempio:
MOV AL, a[3]
;copia in AL l’elemento dell’array a di indice 3
MOV SI, 3
MOV AL, a[SI]
; copia in AL l’elemento dell’array a di indice 3
14
LABORATORIO DI SISTEMI – ASSEMBLY 8086
dichiarazione:
VET DB DIM DUP (?)
15
LABORATORIO DI SISTEMI – ASSEMBLY 8086
Esempi di codice:
16
LABORATORIO DI SISTEMI – ASSEMBLY 8086
…….
LABORATORIO DI SISTEMI – ASSEMBLY 8086