Sei sulla pagina 1di 34

!

"#$%& (")&*$"+$
davlde.valerlanl[sLudenu.unlpr.lL
,-*.- %$ ,")/-)"0-*$ 1)&2*-+$/$
2 !"#$%& (")&*$"+$
ll llnguagglo "..&34)5 e un
llnguagglo dl basso llvello (ovvero
plu vlclno al llnguagglo macchlna)
molLo uullzzaLo nella
programmazlone dell'hardware
(drlver, ecc.)
L'assembly consenLe al programmaLore dl lgnorare ll formaLo
blnarlo (010010111.) del llnguagglo macchlna, sosuLuendo ognl
/-%$/& -6&*"7#- (opcode=0001) con delle sequenze dl carauerl
mnemonlche (lsLruzlone=Auu).
ll compllaLore dl un programma assembly vlene chlamaLo
"..&34)&* e converLe le lsLruzlonl negll opcode corrlspondenu.
8$6"..-
!"#$%&'()%"* ,- -)".',..)% /00*12-3
3 !"#$%& (")&*$"+$
ln assembly, ognl lsLruzlone o 0#,#*1*"# e composLa da:
- un'&7/9&2" (opzlonale), che ldenuca ll punLo del
codlce ln cul compare l'lsLruzlone sLessa,
- ll +-3& (mnemonlco) %&)):$.0*;<$-+&, che ldenuca la
funzlone svolLa dall'lsLruzlone,
- gll -6&*"+%$ necessarl all'lsLruzlone per funzlonare,
separau dalla vlrgola,
- un /-33&+0- che splega lo scopo dell'lsLruzlone.
!"#"$%$&"
"/=;$.$<$-+&> ?@( ABC DE9 F3&2- E $+ AB
eucheua nome
lsLruzlone
operandl commenLo
!"#$%&'()%"* ,- -)".',..)% /00*12-3
4 !"#$%& (")&*$"+$
l reglsLrl sono locazlonl dl memorla uullzzau dal
processore per esegulre le lsLruzlonl. ossono essere dl
varl upl:
8eglsLrl accumulaLorl: AGC HGC ,GC !G
8eglsLrl dl segmenLo: !IC 1IC ,IC II
8eglsLrl punLaLorl: IJC HJC IKC !K
1um l reglsLrl elencau sopra sono a EL 4$0, ma ognl
reglsLro accumulaLore e suddlvlso ln due reglsLrl a 8 blL:
8&M$.0*$
AG
AN AB
!"#$%&'()%"* ,- -)".',..)% /00*12-3
3 !"#$%& (")&*$"+$
Assembly meue a dlsposlzlone olLre 90 lsLruzlonl dlverse,
Luuavla le plu uullzzaLe sono:
?@( -6EC -6O ! copla ll conLenuLo dl op2 denLro a op1,
A!! -6EC -6O ! somma op2 ad op1 (op1+=op2),
IPH -6EC -6O ! sourae op2 da op1 (op1-=op2),
?PB -6E ! molupllca ll conLenuLo dl AL (Ax) per op1 e
meue ll rlsulLaLo ln Ax (ux:Ax),
!K( -6E ! dlvlde ll conLenuLo dl Ax (uS:Ax) per op1 e meue
ll quozlenLe ln AL (Ax) e ll resLo ln AP (ux).
K.0*;<$-+$ %$ 4".&
QRHR op1 pu essere un reglsLro o una varlablle, op2 pu essere un
reglsLro, una varlablle o una cosLanLe. non possono essere enLrambl
varlablll e devono avere la sLessa dlmenslone (8/16 blL)!
!"#$%&'()%"* ,- -)".',..)% /00*12-3
6 !"#$%& (")&*$"+$
ln assembly l'lnpuL/ouLpuL e gesuLo auraverso
l'lnLerruzlone 21h. rlma dl essere rlchlamaLa, auraverso
l'lsLruzlone KQS OE9, occorre seuare alcunl 6"*"3&0*$ ln
apposlu reglsLrl:
- ln AN va lnserlLo ll codlce della T;+<$-+& %" .#-)M&*&:
01h per l'acqulslzlone dl un carauere, 02h per la
vlsuallzzazlone dl un carauere, 0Ah per l'acqulslzlone dl
una sLrlnga, 09h per la vlsuallzzazlone dl una sLrlnga,
- ln !B va lnserlLo ll codlce ASCll del /"*"2&*& %"
#$.;")$<<"*&,
- ln AB vlene messo ll codlce ASCll del carauere acqulslLo
o vlsuallzzaLo dopo ln1 21h
K+6;0U@;06;0
!"#$%&'()%"* ,- -)".',..)% /00*12-3
7 !"#$%& (")&*$"+$
L'"/=;$.$<$-+& dl un carauere sara:
456 /78 9:;
!<= >:;
ll codlce ASCll del carauere acqulslLo vlene posLo ln AL.
1.&36$ KQS OE9
La #$.;")$<<"<$-+& dl un carauere sara:
456 /78 9>;
456 ?@8 ABA
!<= >:;
ll codlce ASCll del carauere vlsuallzzaLo vlene posLo
anche ln AL, dopo ln1 21h.
!"#$%&'()%"* ,- -)".',..)% /00*12-3
8 !"#$%& (")&*$"+$
K) 6*-/&..- %$ /-36$)"<$-+&
Llnguagglo dl alLo llvello CompllaLore (l.e. gcc) llle .asm
llle .ob[/.o
lnclude le llbrerle llle .exe
!"#$%&'()%"* ,- -)".',..)% /00*12-3
9 !"#$%& (")&*$"+$
I0*;3&+7 +&/&.."*$
!"#$%&'()%"* ,- -)".',..)% /00*12-3
er scrlvere programml ln assembly e compllarll, abblamo blsogno dl:
- un &%$0-* %$ 0&.0-: noLepad, pspad, gedlL, LexLedlL, .
- un "34$&+0& VWL: uCS8Cx
- un /-36$)"0-*& "..&34)&*: 1urbo Assembler (su lea.unlpr.lL)
- un )$+X&* "..&34)&*: 1urbo Llnker (su lea.unlpr.lL)
- un %&4;MM&*: 1urbo uebugger (su lea.unlpr.lL)
L'amblenLe !@IH@G e un amblenLe M*"0;$0- che consenLe dl emulare,
su qualslasl plauaforma, l'amblenLe uCS x86.
Sl pu scarlcare graLulLamenLe dal slLo YYYR%-.4-VR/-3 (o dal slLo
del corso). La verslone auuale e la 0.74 ed e lmmedlaLo lnsLallarla.
10 !"#$%& (")&*$"+$
,-+ZM;*"<$-+& !@IH@G
!"#$%&'()%"* ,- -)".',..)% /00*12-3
,*&"0& ;+" /"*0&))" ln cul LerreLe Lum l le: assembler, llnker,
debugger, le sorgenu .asm, ad esemplo CDEB,-B*-*.
QRHR usaLe noml dl lunghezza lnferlore a 8 carauerl: sleLe ln uCS!

uopo aver avvlaLo uCS8Cx, dovreLe fare ll 3-;+0 della carLella,
amnche sla vlslblle da uCS8Cx. ualla llnea dl comando, dlglLaLe:

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

SuccesslvamenLe, dlglLaLe ,+ e premeLe lnvlo per enLrare nella
carLella. Con ll comando /01 vedreLe ll conLenuLo della carLella.

nel caso la Lasuera fosse lmposLaLa come quella amerlcana, da Z: dl
uCS8Cx esegulLe ll comando 2$34 0"
11 !"#$%& (")&*$"+$
,-36$)"<$-+&
!"#$%&'()%"* ,- -)".',..)% /00*12-3
Supponlamo dl voler compllare ll le F$%G,H,01:
1) LnLrlamo nella dlrecLory del corso: />
2) Complllamo con l'assembler: 0".3 6*-#"R".3
3) ln assenza dl errorl, esegulamo ll llnker: 0)$+X 6*-#"R-4[
4) Lanclamo l'esegulblle cosl creaLo: 6*-#"
3) ln caso dl errorl, esegulamo ll debugger: 0% 6*-#"
12 !"#$%& (")&*$"+$
!&4;MM&*
!"#$%&'()%"* ,- -)".',..)% /00*12-3
ll debugger e un uule sLrumenLo per Lrovare errorl dl loglca nel codlce
assembly non scovau dall'assembler ln fase dl compllazlone.
Llenco del
*&M$.0*$ a
16blL e loro
conLenuLo.

n.8.
Ax=AP|AL
8x=8P|8L
.
K.0*;<$-+$
del
le .asm
13 !"#$%& (")&*$"+$
P.- %&) %&4;MM&*
!"#$%&'()%"* ,- -)".',..)% /00*12-3
Supponlamo dl esegulre quesLo programma..

I
456 /@8 J,A K1*1%$)((% )- B,$,L*$* )" ,-
456 /78 9>; KG)0',-)((%I
456 ?@8 J2A K)- B,$,L*$* J2A
!<= >:;
456 /78 9>; KG)0',-)((%I
456 ?@8 /@ K)- B,$,L*$* )" ,- MJ,AINO
!<= >:;
I
CuLpuL aueso: 2, CuLpuL reale: 22 (???)
14 !"#$%& (")&*$"+$
P.- %&) %&4;MM&*
!"#$%&'()%"* ,- -)".',..)% /00*12-3
uslamo ll debugger per caplre perche vlene vlsuallzzaLo 22.

Memorlzzlamo ll codlce del nosLro programma nel le
*0*1F)%H,01, complllamo ed esegulamo ll debugger con
"/ $5$%60(
ll prlmo messagglo che appare cl dlce che non e sLaLa
prevlsLa una Labella del slmboll ! lgnorlamolo e dlamo Ck.

remlamo \W per l'&.&/;<$-+& I0&6 45 .0&6: ad ognl
presslone dl l8, vlene esegulLa una macrolsLruzlone (ln blu
l'lsLruzlone successlva). Con \], lnvece, ognl procedura
vlene esplosa" e esegue una slngola lsLruzlone alla volLa.
13 !"#$%& (")&*$"+$
!&4;M ^E_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
16 !"#$%& (")&*$"+$
!&4;M ^O_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
17 !"#$%& (")&*$"+$
!&4;M ^`_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
18 !"#$%& (")&*$"+$
!&4;M ^a_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
19 !"#$%& (")&*$"+$
!&4;M ^b_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
20 !"#$%& (")&*$"+$
!&4;M ^L_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
21 !"#$%& (")&*$"+$
!&4;M ^]_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
22 !"#$%& (")&*$"+$
!&4;M ^W_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
23 !"#$%& (")&*$"+$
!&4;M ^c_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
24 !"#$%& (")&*$"+$
!&4;M ^ED_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
23 !"#$%& (")&*$"+$
S*-#"0- ):&**-*&d
!"#$%&'()%"* ,- -)".',..)% /00*12-3
Crazle al debugger abblamo scovaLo l'errore.

uopo ll 6 sLep, alla chlamaLa dell'!<= >:; che vlsuallzza la prlma
leuera (b"), ll conLenuLo del reglsLro AL vlene modlcaLo.

ll mouvo e che 789 :;<= ln fase dl vlsuallzzazlone dl un carauere,
non sl llmlLa a vlsuallzzare ll carauere, ma 3&3-*$<<" $) /"*"2&*&
#$.;")$<<"0- "+/9& +&) *&M$.0*- AB, che nol abblamo usaLo come
accumulaLore!

er rlsolvere ll problema, e .;f/$&+0& ;7)$<<"*& ;+ ")0*- *&M$.0*-
(ad esemplo 8L) per memorlzzare ll carauere a" da vlsuallzzare
successlvamenLe.
26 !"#$%& (")&*$"+$
Acqulslre un carauere da Lasuera e vlsuallzzare ll
carauere successlvo sulla Labella ASCll.
1.&*/$<$- E
!"#$%&'()%"* ,- -)".',..)% /00*12-3
Lsemplo:
!<PQ= ! J,A
5Q=PQ= ! J2A

!<PQ= ! JRA
5Q=PQ= ! JSA

HP@Q BA(@8@d
27 !"#$%& (")&*$"+$
.
MCv AP, 01h
ln1 21h K ,BT')0)0B% )- B,$,L*$*
lnC AL K )"B$*1*"#% )- 0'% B%&)B* /UC!! )" /@
uSP Ax K 0,-G% -% 0#,#% &) /V 0'--% 0#,BW
CALL ACAC K B;),1% $%'X"* F*$ ,"&,$* , B,F%
C Ax K $)F$)0X"% -% 0#,#% &) /V &,--% 0#,BW
MCv uL, AL K B%F)% )- B%&)B* /UC!! )" ?@
MCv AP, 02h
ln1 21h K G)0',-)((% )- B,$,L*$*
.
I-);<$-+&
!"#$%&'()%"* ,- -)".',..)% /00*12-3
28 !"#$%& (")&*$"+$
J*-/&%;*&
Anche ln assembly e posslblle la programmazlone
procedurale, al ne dl ommlzzare l'emclenza.
una procedura sl dlchlara con le lsLruzlonl:

Q-3&g6*-/&%;*" J8@, h\A8CQ1A8i
Y B%&)B* F$%B*&'$, Z
I
Q-3&g6*-/&%;*" 1Q!J

L sl rlchlama con ,ABB Q-3&g6*-/&%;*"

nome_procedura = ?AKQ per ll programma prlnclpale
nLA8 = l
lA8 = l+CS
!"#$%&'()%"* ,- -)".',..)% /00*12-3
29 !"#$%& (")&*$"+$
Acqulslre un carauere da Lasuera e, se e una leuera
mlnuscola, vlsuallzzarla maluscola, se e una clfra,
vlsuallzzare un messagglo Cll8A", alLrlmenu vlsuallzzare
ll messagglo L88C8L".
1.&*/$<$- O
!"#$%&'()%"* ,- -)".',..)% /00*12-3
Lsemplo:
!<PQ= ! J,A 5Q=PQ= ! J/A
!<PQ= ! J>A 5Q=PQ= ! JC![\/A
!<PQ= ! JRA 5Q=PQ= ! J]\\5\]A

HP@Q BA(@8@d
30 !"#$%& (")&*$"+$
.
uSLC SLCMLn1 A8A u8LlC 'uA1A'
Cll u8 'Cll8A $'
L88C8 u8 'L88C8L $'
uSLC LnuS
.
?AKQ J8@, \A8
.
MCv Ax, uSLC , lnlzlallzzo ll segmenLo dau
MCv uS, Ax
MCv AP, 01h , acqulslsco ll numero
ln1 21h
CM AL, 'a' , confronLo ll codlce ASCll del carauere acqulslLo con 'a'
!L sec , se e plu plccolo, non e una leuera mlnuscola
I-);<$-+&
!"#$%&'()%"* ,- -)".',..)% /00*12-3
31 !"#$%& (")&*$"+$
CM AL, 'z' , confronLo ll codlce ASCll del carauere con 'z'
!C sec , se e plu grande, non e una leuera mlnuscola
Su8 AL, 32d , converLo ln maluscolo
MCv uL, AL , sLampo ll carauere maluscolo
MCv AP, 02h
ln1 21h
!M ne , Lermlno ll programma

sec:
CM AL, '0' , confronLo con '0'
!L Ler , se plu basso, non e una clfra
CM AL, '9' , confronLo '9'
!C Ler , se plu alLo, non e una clfra
I-);<$-+& ^O_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
32 !"#$%& (")&*$"+$
MCv ux, CllSL1 Cll , sLampo la sLrlnga
MCv AP, 09h
ln1 21h
!M ne , Lermlno ll programma

Ler:
MCv ux, CllSL1 L88C8 , sLampo la sLrlnga dl errore
MCv AP, 09h
ln1 21h
!M ne , Lermlno ll programma

ne:
8L1 , Lermlno ll maln
?AKQ 1Q!J
I-);<$-+& ^`_
!"#$%&'()%"* ,- -)".',..)% /00*12-3
33 !"#$%& (")&*$"+$
CompleLare ll programma ,00*.:H,01 (che LrovaLe sul slLo
del corso) agglungendo la converslone del numero
acqulslLo nel slsLema ouale e nel slsLema esadeclmale.

er quesL'ulumo, svlluppare la converslone ln due modl:
1) 1ramlLe ll meLodo B-,00)B%" dl dlvlslonl successlve
2) uullzzando l'lsLruzlone xLA1
A..&M+"3&+0- E
!"#$%&'()%"* ,- -)".',..)% /00*12-3
HP@Q BA(@8@d
34 !"#$%& (")&*$"+$
GBAS
!"#$%&'()%"* ,- -)".',..)% /00*12-3
L'lsLruzlone >?@9 9#4$..# consenLe dl lndlrlzzare
dlnamlcamenLe una Labella punLaLa da uS:8x, uullzzando ll
conLenuLo dl AL come oseL.
ln prauca, usando una varlablle =,2*--, con, al suo lnLerno, le
clfre esadeclmall:
=,2*--, ?^ J9:>_`abcde/^C?][A
Carlcando ln AL l'oseL da uullzzare, ad esemplo:
456 /@8 9e;
L lnlzlallzzando l'oseL 8x del punLaLore all'lnlzlo della Labella
@]/ ^V8 =,2*--,
L'lsLruzlone V@/= =,2*--, (o sempllcemenLe V@/=) resuLulsce
(ln AL) ll codlce ASCll corrlspondenLe al carauere '9'.

Potrebbero piacerti anche