Sei sulla pagina 1di 6

01AGAHG

 –  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:  

Modello di Codice Dati Dati e Codice


Memoria Combinati
TINY NEAR NEAR SI
SMALL NEAR NEAR NO
MEDIUM FAR NEAR NO
COMPACT NEAR FAR NO
LARGE o HUGE FAR FAR NO
 
.stack  {mem}  crea  lo  stack.  La  dimensione  di  default  è  pari  a  1Kbyte.  
.data  crea  il  segmento  dati  

.code  crea  il  segmento  codice  


.startup  e  .exit  producono  le  istruzioni  macchina  necessarie  all’esecuzione  del  programma  in  
ambiente  MS-­‐DOS.  
Salvataggio  file  
Dal  menù,  selezionare  save  as,  nominare  il  file  come  prog1.asm  

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    

UP  =  direction  up  /  DN  =  direction  down    


EI  =  enable  interrupts  /  DI  =  disable  interrupts    
PL  =  sign  flag  clear  /  NG  =  sign  flag  set    

NZ  =  zero  flag  clear  /  ZR  =  zero  flag  set    


NA  =  no  auxiliary  carry  /  AC  =  auxiliary  carry    
!"#$%&"''%()*"+,"("''-*.).-("%
PO  =  odd  parity  /  PE  =  even  parity    
CY  =  carry  /  NC  =  no  carry  

L’esecuzione  step-­‐by-­‐step  si  può  effettuare  premendo  F10  o  F8  (trace)  


Visualizzare  indirizzi  di  memoria  
Dal  menù,  selezionare  options  quindi  memory1  window,  comparirà  la  seguente  schermata:  

 
!"#$%&'$$()*$(+,-%."#

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).  
 

Visualizzazione  risultato  :  output  


Per  visualizzare  il  risultato  prodotto  premere  F4.  
 

 
/+"0.+$()-$%1$+22+)3."%)+4)
 

*$(+,-%."#5)67