Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
– Calcolatori Elettronici
!"#$%%"&'()*+,$,,-('%$&./.0
Esercitazione
1
–
Tutorial
MASM
6.11
Microsoft
Macro
Assembler
per
la
famiglia
di
processori
x86
utilizzato
nel
sistema
operativo
MS-‐DOS
permette
la
gestione
esplicita
5','&A$8+:,$( di
operazioni
97:,(-),+"7&;-$-$
di
assembling,
linking,
etc.
1##($::B5','
12 16
Il
codice
è
disponibile
32 36 freeware.
C/&D+7
4"7,("%
42 46
La
versione
stand-‐alone
52 56 più
6"8+)
recente
può
essere
s4"7,("%
caricata
da
:
http://www.phatcode.net/downloads.php?id=175
="+7,$(:
E0&D+7
<$8@$7,&A$8+:,$(
ARITMETIC <=
4<
In
rete
sono
disponibili
molte
informazioni
relative
FGHall’assembly
8086.
In
particolare
un
LOGIC UNIT 3=
<9 << C
interessante
Tutorial
=<> può
essere
scaricato:
59 5<
?<
9= 4%")I
http://www.giobe2000.it/Tutorial/Schede/Home.asp
!"#$%%"&'()*+,$,,-('%$&./.0
Modello
Architetturale
8086
5','&A$8+:,$( 97:,(-),+"7&;-$-$
12 16 1##($::B5','
32 36 C/&D+7
4"7,("%
42 46
6"8+)
52 56 4"7,("%
=(")$::"(&<,',-:&>"(#&J=<>K
E0&D+7
="+7,$(:
<$8@$7,&A$8+:,$(
ARITMETIC <=
LOGIC UNIT 3= 4<
<< FGH
C
• L )"@D":,'&#'&E0&M+,N&@'&:"%"&O&#+&P-$:,+&:"7"&
=<>
<9
59 5<
?<
4%")I
9=
-:',+Q&R87+&M+,&)"((+:D"7#$&'#&-7&S%'8Q&
• 9&S%'8&:+&#+T+#"7"&+7U
– S%'8&#+&)"7#+V+"7$
Processor
Status
Word
(PSW)
– S%'8&#+&)"7,("%%"Q
E’
composta
da
16
bit
di
cui
solamente
9
sono
utilizzati.
Ogni
bit
corrisponde
ad
un
flag
di
condizione
o
di
controllo.
OF DF IF TF SF ZF AF PF CF
=(")$::"(&<,',-:&>"(#&J=<>K
I
flag
di
condizione
sono
automaticamente
scritti
al
termine
di
varie
operazioni:
• -‐ LSF
)"@D":,'&#'&E0&M+,N&@'&:"%"&O&#+&P-$:,+&:"7"&
(Sign
Flag):
coincide
con
il
MSB
del
risultato
dopo
un’istruzione
aritmetica
-‐ -:',+Q&R87+&M+,&)"((+:D"7#$&'#&-7&S%'8Q&
ZF(Zero
Flag):
vale
0
se
il
risultato
è
nullo,
1
altrimenti
-‐ PF(Parity
Flag):
vale
1
se
il
numero
di
1
negli
8
bit
meno
significativi
del
risultato
è
pari,
• 9&S%'8&:+&#+T+#"7"&+7U
0
altrimenti
-‐ CF(Carry
Flag):
dopo
le
istruzioni
aritmetiche
vale
1se
c'è
stato
riporto
(somma)
o
– S%'8&#+&)"7#+V+"7$
– S%'8&#+&)"7,("%%"Q
• .1)23%$$%4*+&5%416(7()
• 8"$4%4*+"*&&%+9(4*1$)4:+;9(#<0
• =%"1(%4*+.8>?@A8B8
prestito
(sottrazione);
altre
istruzioni
ne
fanno
un
uso
particolare
-‐ • !"#$%&&%4*+1)"+)3'()"(+9(+9*C%D&$
AF(Auxiliary
Carry
Flag):
usato
nell'aritmetica
BCD;
vale
1
se
c'è
stato
riporto
(somma)
o
prestito
–
(sottrazione)
dal
bit
3
E)"#(F&()G+("#$%&&%4*+%"16*+34)F4%22(+H#%23&*IA
-‐ OF(Overflow
Flag):vale
1se
l'ultima
istruzione
ha
prodotto
overflow.
I
flag
di
controllo
sono
scritti
e
modificati
da
apposite
istruzioni
e
servono
per
regolare
il
funzionamento
di
talune
funzioni
del
processore
:
–
DF(Direction
Flag):
utilizzato
dalle
istruzioni
per
la
manipolazione
delle
stringhe;
se
vale
0
le
stringhe
vengono
manipolate
partendo
dai
caratteri
all'indirizzo
minore,
se
vale
1
a
partire
dall'indirizzo
maggiore
–
IF(Interrupt
Flag):
se
vale
1,
i
segnali
di
Interrupt
mascherabili
vengono
percepiti
dalla
CPU,
altrimenti
questi
vengono
ignorati
–
TF(Trap
Flag):
se
vale
1,viene
eseguita
una
trap
al
termine
di
ogni
istruzione.
Installazione
1. scompattare
l’archivio
2. entrare
nella
directory
\disk1
3. lanciare
SETUP.exe
4. installare
con
le
opzioni
di
default
installando
anche
i
programmi
sample
Avvio -77()+9*&+34)F4%22%
-./"0(12'"+$%."#13'(4 #$567
Impostazione
modalità
di
Debug
Nuovo
file
e
inserimento
del
codice
Dal
menù,
selezionare
File,
quindi
new.
Inserire
il
seguente
codice:
.model
small
.stack
.data
opa
dw
3
,)-'.)+/#%0)(%1#0'1)
opb
dw
2
res
dw
?
.code
.startup
mov
al,
opa
add
ax,
opb
mov
res,
ax
.exit
end
!"#$%&',/23'(',1)%'(%.#0)((#%0'%.).#-'2%
Nota:
le
parole
chiave
introdotte
da
“.”
sono
direttive
per
l’assemblatore
.model
definisce
il
0),'0)-2/#
modello
di
memoria
desiderato:
Assembling
Dal
menù
selezionare
Project,
quindi
Compile
File
:
prog1.asm
osservare
il
risultato
dell’assemblatore.
Correggere
opportunamente
il
codice:
.model
small
.stack
.data
opa
dw
3
opb
dw
2
res
dw
?
.code
.startup
mov
ax,
ipa
add
ax,
opb
mov
res,
ax
.exit
end
Assembling
e
Linking
Dal
menù
selezionare
Build
:
PROG1.exe
Nota
:
è
possibile
effettuare
il
debug
selezionando
Debug
Program
al
termine
delle
operazioni
di
Assembling
e
Linking.
Debugger
Window
+$,)--$'(."#/0.
I
flag
riportati
sono
associati
ai
seguenti
parametri:
OV
=
overflow
/
NV
=
no
overflow
!"#$%&'$$()*$(+,-%."#
Introdurre
breackpoint
Dal
menù,
selezionare
Data,
quindi
Set
Breakpoint,
comparirà
la
seguente
schermata:
Per
lanciare
un
programma
ed
eseguirlo
fino
al
breakpoint
premere
F5.
Nota:
E’
possibile
oservare
il
contenuto
di
variabili
/
registri
tramite
la
funzionalità
watch.
Dal
menù
selezionare
Data,
quindi
Add
Watch
e
digitare
l’espressione
desiderata
(per
es.
res).
/+"0.+$()-$%1$+22+)3."%)+4)
*$(+,-%."#5)67