Sunteți pe pagina 1din 71

Cuprins

Cuprins .................................................................................................................................................................................... 1
Introducere .............................................................................................................................................................................. 2
Reprezentri interne ale datelor. Definirea i iniializarea datelor n limbaj de asamblare .................................................... 3
tapele de elaborare a unui pro!ram n limbaj de asamblare. "fiarea unui ir de caractere la consol ............................ 1#
$oduri de adresare a operanzilor n limbaj de asamblare. Introducerea i afiarea unui ir prin intermediul funciilor #%&
i #"&'ntreruperea 21&( .............................................................................................................................................. 1)
Instruciuni de transfer. Introducerea i afiarea unui ir prin intemediul funciilor 3*& i )#&'ntreruperea 21&( .............. 21
*iiere e+ecutabile. Introducerea i afiarea unui simbol la consol .................................................................................... 2,
Instruciuni de comparare i de salt ...................................................................................................................................... 33
Instruciuni aritmetice ........................................................................................................................................................... 3%
-roceduri. Cicluri .................................................................................................................................................................. ).
-relucrarea tablourilor simbolice unidimensionale ............................................................................................................... ,3
$acrodefiniii. /ablouri numerice ...................................................................................................................................... ,0
/ipuri de date comple+e1 structuri i nre!istrri .................................................................................................................. 2,
3ista instruc iunilor
*unc ii D45
6iblio!rafie
1
Introducere
3imbajul de asamblare este unul dintre cele mai 7ec&i limbaje de pro!ramare.
Cu toate acestea limbajul de asamblare este incorporat i n cele mai noi compilatoare.
Codul de asamblare este foarte apropiat de codul e+ecutabil al pro!ramelor8
asamblorul a79nd rolul de a codifica instruciunile din limbaj de asamblare n cod
main.
:n prezent8 limbajul de asamblare este din ce n ce mai puin folosit n scrierea
pro!ramelor8 deoarece compilatoarele de ultima !eneraie au funciile cele mai folosite
de pro!ramatori deja scrise i optimizate n limbaj de asamblare incluse n biblioteci.
3imbajul de asamblare ofer un ir de a7antaje1 7iteza foarte mare de e+ecuie a
pro!ramelor 'unele pro!rame scrise si optimizate n asamblare au 7iteza de e+ecuie
pana la ,;1# de ori mai mare dec9t cele scrise n C sau -ascal(8 mrimea codului
e+ecutabil este foarte mica8 ajuta utilizatorul sa nelea! mai bine cum funcioneaz
microprocesorul i s scrie pro!rame eficiente i n limbaje de ni7el nalt. Deza7antaje
ar fi c un pro!ram scris n limbaj de asamblare1 nu este portabil< este mai !reu de scris
i ia mai mult timp dec9t un pro!ram scris n limbajele de ni7el nalt< este mai !reu de
depanat.
Compilatoare din prezent permit pro!ramatorului s scrie anumite pari de cod
sau subpro!rame n limbaj de asamblare8 astfel nc9t pro!ramatorul s poat scrie n
limbaj de asamblare doar partea de pro!ram care se e+ecuta de cele mai multe ori8
pro!ramul rul9nd astfel mult mai rapid.
:ndrumarul de laborator este destinat studenilor anului I al specializrii
Informatic8 Informatic "plicat i $ana!ement Informaional care studiaz
disciplina pro!ramarea n limbaj de asamblare. -rin prisma ndrumarului de fa ce
include 12 lucrri de laborator studenii i 7or forma deprinderi practice n ceea ce
pri7ete pro!ramarea n limbaj de asamblare.
*iecare lucrare conine c9te un bre7iar teoretic8 aplicaii orientati7e i lista
sarcinilor la tema dat.
2
Reprezentri interne ale datelor. Definirea i iniializarea datelor n limbaj
de asamblare
Obiectivele lucrrii
"ceast lucrare de laborator are ca scop nsuirea de ctre studeni a noiunilor
de baz referitoare la1 sistemele de numeraie binar8 octal i &e+azecimal<
reprezentarea numerelor n calculator< nsuirea modului de utilizare a tipurilor de
date n diferite aplicaii n limbaj de asamblare.
Breviar teoretic
=nitatea minim de msurare a informaiei se numete i 6I/ '6Inar> di!i/(8
adic una din cele dou cifre binare # sau 1. 6itul reprezint atomul informaiei8
ni7elul de la care informaia nu mai poate fi descompus. 6iii se !rupeaz cate 0 i
formeaz un b>te sau un octet. =n ir de cifre binare reprezint toat informaia
manipulat de calculator. Cu cei 0 bii '0 cifre binare( care formeaz octetul se poate
construi un cod8 care permite 20 combinaii diferite intre ele8 adic 2,2 combinaii.
"ceste combinaii sunt suficiente pentru a prezenta literele mari i mici8 cifrele8
semnele speciale8 comenzile8 semnalele8 rspunsurile. 4ctetul poate s conin o liter
'"8 a8 ?8 @8 z(8 o cifr '#81828?.8%(8 un semn special 'A.B8C818<8D8?(8 un semnal
'semnal sonor8?(8 o comand 'retur de car la sf9ritul liniei de te+t8 ?(. Cu aceti
octei se 7a construi informaia1 te+te8 numere8 ima!ini !rafice8 sunete8 etc.
4ctetul este o unitate de msur a informaiei. -entru msurarea diferitelor
cantiti de informaie se pot folosi multiplii octetului. =nitile de informaie folosesc
ca factor de multiplicare 2
1#
E1#2)1
1Foctet E 1#2) octei E 2
1#
octei
1$octet E 1#2) Foctei E 2
2#
octei
1Goctet E 1#2) $octei E 2
3#
octei
Sisteme de numeraie
=n sistem de numeraie este constituit din totalitatea re!ulilor de reprezentare a
numerelor cu ajutorul anumitor simboluri denumite cifre.
-entru orice sistem de numeraie8 numrul semnelor distincte pentru cifrele
sistemului este e!al cu baza 'b(. Deci pentru baza bE2 'numere scrise n binar( semnele
3
7or fi cifrele # i 1. -entru baza bE12 '&e+azecimal( semnele 7or fi
#8182838)8,828.808%8"868C8D88*. 5e obser7 c pentru numerele scrise ntr;o baz mai
mare dec9t baza 1# 'zecimal( se folosesc i alte simboluri 'litere( pe l9n! cifrele
obinuite din baza 1#. "stfel8 n cazul numerelor scrise n &e+azecimal8 literele
"868C8D88* au ca i 7alori asociate 1#81181281381)81,.
-entru a face uor distincie ntre numerele scrise ntr;o anumit baz8 la
sf9ritul numrului se mai scrie o liter ce simbolizeaz baza8 de e+emplu1 6 ; binar
'baza 2(8 H ; n octal 'baza 0(8 D; zecimal 'baza 1#(8 I; &e+azecimal 'baza 12(
De re!ul numerele scrise n baza 1# nu trebuie neaprat s fie urmate de
simbolul JDK8 pentru c aceast baz se consider implicit.
Dac se d un numr scris ntr;o baz oarecare JbK sub forma parte ntrea! i
parte zecimal1
Lr'b( E C
n
C
n;1
C
n;2
? C
2
C
1
C
#
8 D
1
D
2
D
3
? 8
atunci 7aloarea sa n baza 1# 7a fi1
Lr'1#( E C
n
Ab
n
MC
n;1
Ab
n;1
M?MC
2
Ab
2
MC
1
Ab
1
MC
#
Ab
#
MD
1
Ab
;1
MD
2
Ab
N2
MD
3
Ab
N3
M...
Exemple
+emple de numere binare1 11b8 11###11b. Dez7oltarea acestor numere dup
puterile bazei este1
11b E1A2
1
M1A2
#
E3<
111###11b E 1A2
.
M1A2
2
M1A2
,
M#A2
)
M#A2
3
M#A2
2
M1A2
1
M1A2
#
E 22..
+emple de numere octale1 11O8 21#O
Dez7oltarea acestor numere dup puterile bazei este 1
11O E 1A0
1
M1A0
#
E %<
21#O E2A0
2
M1A0
1
M#A0
#
E132<
+emple de numere &e+azecimale1 11&8 C"#&
Dez7oltarea acestor numere dup puterile bazei este 1
11& E 1A12
1
M1A12
#
E1.<
#C"#&E CA12
2
M"A12
1
M#A12
#
E 3232
Reprezentarea numerelor naturale n calculator
4
Calculatoarele actuale utilizeaz sistemul de numeraie binar. Reprezentarea
numerelor LEP#8 18 28 ...Q se realizeaz pe un numr fi+ de poziii binare 08 128 328 2).
-e n poziii binare pot fi reprezentate numerele naturale din inter7alul R#< 2
n
;1S. De
exemplu8 reprezentarea numrului 2. pe 0 poziii binare const n transformarea
acestui numr prin puterile lui 2.
Reprezentarea numerelor ntregi
:n calculator nu e+ist posibilitatea introducerii directe a semnelor M i ; 8
ataate numerelor poziti7e i ne!ati7e. Reprezentarea semnului s pentru numrul + se
face cu ajutorul unei cifre binare8 denumit cifr semn8 aezat n poziia n-18' bitul
superior( . -entru +D#8 sE#8 iar pentru +T#8 sE1
Lumerele cu semn se reprezint cel mai des n sistem binar codificat care ofer
anumite a7antaje n e+ecutarea operaiilor aritmetice cu numere al!ebrice. 5e cunosc
trei moduri de reprezentare8 denumite coduri binare pentru numere algebrice.
od direct 'codul mrime i semn(. 5crierea unui numr n acest cod este
foarte simpl1 n cifra semn se scrie #8 dac numrul este poziti78 i 18 dac numrul
este ne!ati7< n partea de 7aloare se nscrie numrul n sistemul binar obinuit.
Inter7alul posibil admis de reprezentare este R ;2
n;1
M 18 2
n;1
;1S.
odul invers. -entru numerele poziti7e scrierea n cod in7ers este identic cu
cea din codul direct. Dac numrul este ne!ati71 1(1 se scrie ca i cum ar fi poziti7< 2(1
se in7erseaz fiecare cifr binar8 1 de7ine # i # de7ine 1; de aici i denumirea de cod
in7ers. -e n poziii binare n cod in7ers pot fi reprezentate numere ntre!i din inter7alul
R;2
n;1
M1< 2
n;1
;1S.
odul complementar! :n acest cod numerele poziti7e au acelai reprezentare ca
i n codul direct i codul in7ers. Dac numrul este ne!ati78 se scrie codul in7ers 8
apoi se adun 1 la cifra de pe poziia binar zero.
De e+emplu reprezentarea numrului ;2, n cod complementar.
M2, E #1#####1b n cod direct
1#11111#b n cod in7ers
1#111111b n cod complementar
5
Codul complementar este utilizat n marea majoritate a calculatoarelor datorit
facilitilor pe care le ofer la efectuarea operaiilor aritmetice i uurinei cu care se
face 7erificarea rezultatelor. :n acest cod pe n poziii binare pot fi reprezentate numere
ntre!i din inter7alul R ;2
n;1
8 2
n;1
;1S.
"ipuri de date
B#"E $1 octet%! "cest tip de date ocup 1 octet i poate fi reprezentat at9t n
memoria intern8 c9t i ntr;un re!istru de 0 bii al procesorului. Interpretrile tipului
b>te pot fi1 ntre! pe 0 bii cu sau fr semn< caracter "5CII. Directi7a pentru
definirea datelor de acest tip este &B 'Define 6>te(.
'OR& $( octei%! "cest tip de date ocup 2 octei i poate fi reprezentat at9t n
memoria intern8 c9t i ntr;un re!istru de 12 bii al procesorului. Interpretrile tipului
Uord pot fi1 ntre! pe 12 bii cu sau fr semn< sec7en de dou caractere "5CII<
adres de memorie de 12 bii. Directi7a pentru definirea datelor de acest tip este &'
'Define Vord(. -artea mai puin semnificati7 este memorat la adrese mai mici. De
e+emplu dac presupunem ntre!ul 123)I la adresa 1###I8 atunci octetul 3)I se 7a
!si la adresa 1###I8 iar octetul 12I la adresa 1##1I. 5imilar8 se memoreaz i
sec7enele de dou caractere "5CII.
&O)B*E-'OR& $+ octei%! "cest tip de date ocup ) octei i poate fi
reprezentat at9t n memoria intern8 c9t i ntr;o perec&e de re!istre de 12 bii sau ntr;
un re!istru de 32 de bii 'la procesoarele de 32 de bii(. Interpretrile tipului dUord pot
fi1 ntre! pe 32 de bii cu sau fr semn< numr real n simpl precizie< adres de
memorie de 32 de bii. Directi7a pentru definirea datelor de acest tip este && 'Define
Double;Vord(. Walorile mai puin semnificati7e se memoreaz la adrese mici. :n cazul
adreselor pe 32 de bii8 adresa de se!ment este memorat la adrese mari8 iar
deplasamentul 'offset;ul(8 la adrese mici.
,)-&-'OR& $. octei%! "cest tip de date ocup 0 octei i poate fi
reprezentat at9t n memoria intern c9t i ntr;o perec&e de re!istre de 32 de bii 'numai
la procesoarele de 32 de bii(. Interpretrile tipului OUord pot fi1 ntre! pe 2) de bii cu
6
sau fr semn< numr real n dubl precizie. Directi7a pentru definirea datelor de acest
tip este &, 'Define Huad;Vord(.
"E/-B#"ES $10 octei%! "cest tip de date ocup 1# octei i poate fi
reprezentat at9t n memoria intern8 c9t i ntr;unul din re!istrele coprocesoarelor
matematice. Interpretrile tipului tb>te pot fi1 numr ntre! reprezentat ca sec7en de
cifre 6CD 'mpac&etate(8 cu semn memorat e+plicit< numr real n precizie e+tins.
Directi7a pentru definirea datelor de acest tip este &" 'Define /en;6>tes(.
*orma !eneral a unei definiii de date este 1
<nume> <directiva> <listadevalori >
5au
<nume> <directiva> <numr> dup !e"presie#
n care TnumeD este identificatorul asociat definiiei respecti7e8 iar TlistaXdeX7aloriD
este lista 7alorilor iniiale8 care poate cuprinde1 constante numerice 'absolute sau
simbolice(< simbolul Y8 adres8 adic un nume de 7ariabil sau de etic&et 'se folosete
la DV i DD(< un ir "5CII. +presia poate fi1 constant numeric< list de 7alori<
simbolul Y.
5emnificaia simbolului Y este locaie neiniializat8 iar cea a operatorului D=-8
repetarea de un numr de ori a e+presiei din parantez.
Considerm urmtoarele definiii1
7arXa db 2 dup '#8 3 dup '1( ( <ec&i7alent cu 7arXa db #8181818#818181
7arXb db 18 28 38 Y8 Y
adrXn dU 7arXa
adrXf dd 7a+Xd
Exemplu
*ie dat urmtoarea consecuti7itate de operatori
m1 db )8,8182 < rezer7 )A1E) octei
m2 db J+z>OUK <rezer7 ,A1E, octei
m3 dU 12 dup'Y( <rezer7 12A2E2) octei
m) dd 3),&8 23)& <rezer7 2A2)E0 octei
Lumrul octeilor rezer7ai pentru aceast consecuti7itate de operatori este
)18 iar adresa locaiei m3 este ###% 'm1 N ####8 m2 N ###)8 m) N ##21(.
7
Sarcini de lucru
1. /ransformai n sistemul binar8 octal i &e+azecimal numerele zecimale1
1( )2< 31< 113 2( )2< 3,< 11% 3( )%<3#<1#3 )( 2%< 3.< %.<
,( ),< 01< 0%8 2( 22< 2,< 11# .( 1%<,3< 1#1 0( 21< 0.< %0.
%( 12< 30< 110 1#( 1.< 23< 120 11( 3)< ,#< 1#. 12( 20< ),< 13#.
13( 11< )3< 2. 1)( 13< 2%< 00 1,( 1)<.#< %% 12( 1,< .2< 1##
2. /ransformai n sistemul binar numerele &e+azecimale
1( "),< 12< ,26 2( .C< .26< 31D6 3( 3)"< 2"6< %"D )( 26%< 2*1< 016
,( 1*3< ,"6< )2* 2( 36< )D0<"21 .( ,"6< .%*<"60 0( .CD< 2"1< 6,3
%( ",2< ,%< CD 1#( 2"3< %D#< 06 11( %"< )D< *. 12( 1#6< 0.*< CD%.
13( 360< D1< 6" 1)( 6C< .*%< .0" 1,( "6< 0)< C1. 12( 30< %C.< 60%
3. Determinai reprezentarea numerelor naturale ,8 328 )#8 2,8 2#2 n $4.
1( ##1#1#11<
##1##11#<
#111##11
2( 1111##1#<
#11#1#1#<
111111##<
3( 1####1#1<
111###1#<
11##1#11
)( ###111#1<
11111##1<
##1111#1
,( #11####1<
#11#111#<
1111##11
2( ##11#11#<
##111#11<
1###11##
.( ###111#1<
#1#1#11#<
1#11##1#
0( ###111##<
#1##11##<
#11#111#
%( 111##1##<
#1#111##<
11#####1
1#( 11#1##1#<
#1##11##<
11###111
11( 111###1#<
1#1####1<
1###111#
12( 1#1#1##1<
11#1#1#1<
111##11##
13( ####1111<
1#1##1#1<
1##1###1
1)( 111#####
11111###<
#1####11
1,( 1#1##1#1<
#11#11##<
111####1
12( 111##111<
#11##1#1<
1#11##1#<
). Reprezentai n cod complementar pe 0 poziii binare urmtoarele numere1
1( ;)2<;31< ;113 2( ;)2<;3,< ;11% 3( ;)%<;3#<;1#3 )( ;2%<;3.< ;%.<
,( ;,2<;)1< ;%3 2( ;22<;2,<;11# .( ;1%<;,3;1#1 0( ;21<;0.< ;%0.
%( ;12<;30< ;110 1#( ;1.<;23<;120 11( ;3)< ;,#<;1#. 12( ;20<;),< ;13#.
13( ;11<;)3< ;2. 1)( ;13<;2%<;00 1,( ;1)<;.#<;%% 12( ;1,<;.2<;1##
,. *ie dat urmtoarea consecuti7itate de operatori1
1(
a db ),8128.28;2
bdb JabcdK
cdU 1, dup'#(8383
ddd 3),&
2(
a dd 28 2)
b db JaaaK8 ;08 23&8 111#1b
c db 2 dup '#(8 ),8 2
d dU ;.8 )D&8 0 dup'#(
3(
a db J5alutK81#813
b db ;128;2#813&8 2 dup '#(
c dU 228 3)8 ;1,
d dd ),2C%&8 ),2.
)(
a dd %28 ),&8%#8;,)8;2.
b db 1# dup'Z[\(8 1#8 13
c db JamdtoK81#8138\[\
d dU , dup 'Y(8.8;0#&
8
,(
a db JlucrareaX1K81#813
b db 2 dup '#(
c dU 308 ;1,8.08)1812
d dd 2.0*&8 3)0%8 ),2
2(
a db 128 2)8KsssK
b db JabK8 ;08 23&
c dd 2 dup '#(8 ),
d dU ;.8 , dup'#(
.(
a db 3,8,3
b db 1# dup 'Z \(81#8138J[K
c dU , dup'#(
d dd ,,,&
0(
a db 3)8 2838;08;2
b db JIelloK8 Z[\
c dU 2 dup '#(8 Z[\8 1#8 13
d dU ;208 )2&8 . dup'#(
%(
a db ),812
b db , dup 'Y(81#8138J[K
c dU ,, dup'#(
d dd 3),2.&
1#(
a db .28 0.8 %28 ),&
b db 2# dup'Z[\(8 1#8 13
c db JOUertK
d dU 1# dup '#(
11(
a dd .08 3)8 2.
b db JRezultatK8 Z[\8
c db 12 dup '#(8 Z[\8 1#8 13
d dU ;208 )2&8 . dup'#(
12(
a db .38.)8.,8..8.08;2.
b db 1, dup 'ZY\(8 1#813
c dU , dup'Z \(8 J[K
d dd ...&
13(
a db 2)8.28;,2
b db JabcK8 111#1b
c dd ),8 ) dup'Y(
d dU ) dup'#(8083
1)(
a db JtestulXnrX2K81381#
b db ;108;22810&8 2 dup '#(
c dU 018 ;128))810
d dd ,20"6&
1,(
a dd 0.8 ),&8;%
b db 1# dup'Y(
c db JtestX1[K
d dU ) dup '#(828.
12(
a db J$atematicaK81#813
b db 1#82#&8 2 dup '#(
c dU 2#8 3#8 ;1#8;2#8;,#
d dd ,2.0%6&
a( determinai c9i octei 7a rezer7a aceast consecuti7itate de operatori<
b( determinai adresa locaiei de memorie c.
9
$tapele de elaborare a unui pro%ram n limbaj de asamblare. &fiarea unui ir de
caractere la consol
Obiectivele lucrrii
3ucrarea urmrete familiarizarea studenilor cu posibilitile de scriere a unui
pro!ram8 structura unui pro!ram i de asemenea acumularea deprinderilor de elaborare
a unor pro!rame simple.
Breviar teoretic
Etapele de elaborare a unui program
1. laborarea fiierului surs.
2. "samblarea fiierului surs 'obinerea codului obiect(.
3. ditarea de le!turi'obinerea fiierului e+ecutabil(.
). Depanarea pro!ramului.
/e+tul unui pro!ram se scrie n unul sau mai multe fiiere n format "5CII.
Denumirile fiierelor i a e+tensiilor lor pot fi arbitrare8 ns fiierele ce conin
modulul principal este bine7enit sa aib e+tensia A.asm8 iar fiierele suplimentare ce
conin descrierea constantelor8 tipuri noi8 biblioteci de funcii N e+tensia A.inc.
*iierul surs este necesar de a fi transformat n comenzi binare care pot fi
prelucrate de ctre microprocesor. "ceast posibilitate ne este oferit de pro!rame
numite asambloare. Dup asamblare se obin fiierele obiect ce au e+tensia A.obj.
"samblarea poate fi efectuat prin intermediul compilatoarelor masm al firmei
$icrosoft sau tasm al firmei 6orland.
:n cazul c9nd un pro!ram conine mai multe module8 procesul de elaborare a
unui pro!ram include i editarea de le!turi. 3e!tura modulelor obiect se efectueaz
cu unul din pro!ramele lin] al firmei $icrosoft sau tlin] al firmei 6orland. :n
rezultat se 7a obine un fiier e+ecutabil cu e+tensia A.e+e sau A.com.
De e+emplu8 fie c fiierele surs au denumirile pro!1.asm i m>3ib.inc. :n
acest caz asamblarea i editarea de le!turi poate fi e+ecutat de urmtoarele comenzi1
$icrosoft 6orland
"samblare $asm pro!1.asm
$asm m>3ib.inc
/asm pro!1.asm
/asm m>3ib.inc
ditarea de le!turi 3in] pro!1.obj /lin] pro!1.obj
10
3in] m>3ib.obj /lin] m>3ib.obj
Structura general a unui program
=n r9nd n limbajul de asamblare poate conine patru c9mpuri1
Retic&eta1S operator Rc9mpul operanzilorS R<comentariiS
ste necesar numai c9mpul operatorului.
tic&eta este utilizat pentru a indica adresa instruciunii i atribuie un nume
simbolic primului bait din memorie n care 7a fi nre!istrat ec&i7alentul binar al
instruciunii . 4 etic&et poate conine1
; literele alfabetului en!lez " .. @8'"samblorul nu face diferene dintre literele
majuscule i minuscule(<
; cifrele # .. %<
; simboluri speciale1 ^Y^8 ^.^'numai primul simbol(8 ^B^'a rond(8 ^[^8 ^X^.
-rimul simbol poate fi o liter sau unul din simbolurile speciale. 3un!imea
ma+imal a etic&etei este de 31 simboluri.
C9mpul operatorului conine numele instruciunii8 de e+. mov N instruciune de
transfer8 add N instruciune de adunare.
4peranzii definesc1 7alorile iniiale ale datelor sau elementele asupra crora
are loc aciunea.
De e+emplu8 instruciunea mov a"' ( transfer n re!istrul a+ 7aloarea ).
:n c9mpul operanzilor pot fi unul sau doi operanzi. 4peranzii sunt delimitai
prin 7ir!ul. :n instruciunile cu doi operanzi primul din ei reprezint destinaia8 al
doilea N sursa. 5ursa nu se sc&imba 'cu e+cepia unor instruciuni(8 iar destinaia se
sc&imb aproape ntotdeauna.
Comentariile se ncep cu simbolul ^<^ i se scriu n orice loc n pro!ram. /oate
simbolurile din dreapta simbolului ^<^ p9n la sf9ritul r9ndului asamblorul le i!noreaz.
:nre!istrrile de tipul mov a)' * i +,- &.' * sunt analizate de asamblor
analo!ic.
$ai jos sunt prezentate e+emple de pro!ram ca modele recomandate de
prezentare a pro!ramelor pentru asambloarele masm i tasm.
Structura unui program n stil masm
11
.model small <directi7a de descriere a modelului de memorie
<pro!ramul are tipul de memorie small N un se!ment de cod
<i un se!ment de date
.stac] 1## <iniializarea se!mentului de sti7
.data <iniializarea se!mentului de date
? <definirea datelor
.code <iniializarea se!mentului de cod
? <aici pot fi incluse subpro!ramele i datele care trebuie
<amplasate n se!mentul de cod
.startup <nceputul pro!ramului
? <te+tul pro!ramului
end <directi7a de finisare a pro!ramului
Structura unui program n stil tasm
sstac]se!ment para stac] Zstac]\ < definirea se!mentului de sti7
db 1## dup 'Y( < spaiu pentru sti78 nu mai puin de 32 cu7inte
sstac] ends < sf9ritul se!mentului de sti7
sdata se!ment para data < definirea se!mentului de date
? < definirea datelor prin directi7e de definire
sdata ends < sf9ritul se!mentului de date
scode se!ment para code < definirea se!mentului de cod
assume cs1scode8ds1sdata < indic asamblorului c se!mentul scode 7a fi
<le!at de re!istrul de se!ment cs8 iar se!mentul
<sdata cu re!istrul de se!ment ds.
? < te+t subpro!ramelor i datelor care sunt necesare
< de amplasat n se!mentul de cod
start1 < punctul de intrare n pro!ram
? < te+tul pro!ramului
scode ends < sf9ritul se!mentului de cod
end start < directi7a de finisare a pro!ramului
Directivele de definire a se%mentelor mpart pro!ramul surs n se!mente.
:ntr;un pro!ram n limbaj de asamblare pot fi definite patru tipuri de se!mente1
se!mentul de date8 utilizat pentru alocarea 7ariabilelor !lobale i constantelor<
se!mentul de sti78 utilizat pentru pstrarea datelor temporare i a adreselor de
re7enire din subpro!rame
se!mentul de cod8 utilizat pentru codul pro!ramului i de asemenea pentru
subpro!rame i date
12
se!mentul pentru date suplimentare.
Re!istrul de se!ment D5 trebuie s conin adresa se!mentului n care sunt
definite datele. "cest re!istru poate fi iniializat astfel1
mo7 a+8 Bdata < masm
mo7 ds8 a+
sau
mo7 a+8 sdata < tasm
mo7 ds8 a+
Sarcini de lucru
1. 5tudiai structura unui pro!ram "ssembler i cerinele de baz fa de
pro!ram.
2. laborai pro!ramul ce afieaz la consol irul JIello VorldK n stilurile
masm i tasm.
a( Definii n se!mentul de date prin directi7a db irul ZIello
Vorld\81#8138\[\
&i db ZIello Vorld\81#8138\[\
b( Iniializai re!istrul de se!ment ds
c( "fiai irul la consol prin intermediul funciei % ' ntreruperea 21&(
mo7 a&8 % <numrul funciei se ncarc ntotdeauna n
re!istrul a&
mo7 d+8 offset &i <n re!istrul d+ se ncarc adesa de nceput a
irului
int 21& <apel de ntrerupere
d( *inisai pro!ramul prin intermediul funciei )C& ' ntreruperea 21& (
mo7 a&8 )c&
int 21&
3. ditai pro!ramul n orice editor de te+te i sal7ai;l pe disc. "samblai
fiierul surs i construii fiierul e+ecutabil.
4. "nalizai structura listin!ul;ui. De e+. fiierul m>3ab1.35/ 'fiierul surs
are denumirea m>3ab1.asm( se obine n rezultatul aciunii comenzii
tasm m>3ab1.asm88
/iprii listin!;ul pro!ramului i studiai structura lui.

13
+oduri de adresare a operanzilor n limbaj de asamblare. Introducerea i
afiarea unui ir prin intermediul funciilor /*) i /&)!ntreruperea 01)#
Obiectivele lucrrii
"ceast lucrare urmrete formarea abilitilor n elaborarea pro!ramelor
datele crora sunt introduse de la tastatur prin afiarea rezultatului la consol8
familiarizarea cu modurile de adresare a operanzilor $- i0#00 i depanarea
pro!ramelor.
Breviar teoretic
1oduri de adresare a operanzilor
$icroprocesorul '$-( poate utiliza diferite moduri de adresare a operanzilor.
"samblorul determin modul de adresare n baza formatului operandului din pro!ram.
-ot fi distinse apte moduri de adresare1 adresare prin registru; adresare
imediat; adresare direct; adresare indirect (prin registre); adresare bazat;
adresare indexat; adresare bazat i indexat.
Cele mai simple sunt primele dou moduri deoarece $- n acest caz obine
7aloare a operandului dintr;un re!istru sau nemijlocit din instruciune. Celelalte
moduri de adresare $- trebuie s calculeze adresa locaiei de memorie8 ulterior s
e+tra! din ea 7aloarea operandului.
:n adresarea prin registru $- e+tra!e 7aloarea operandului din re!istru sau
ncarc 7aloarea operandului n re!istru. De e+emplu1
mov a"'c" < 7aloarea re!istrului c+ se ncarc n re!istrul a+
"l doilea operand n adresarea imediat poate fi o constant pe 0 bii sau 12
bii. De e+emplu1
mov c"'2// < ncarc n re!istrul c+ 7aloarea ,##
-entru descrierea urmtoarelor moduri de adresare 7om defini noiunea de
adres efecti7 i adres de se!ment.
-rin adres de se!ment 7om nele!e adresa de nceput a se!mentului n care se
!sete operandul i prin adresa efecti7 ; nele!em deplasamentul operandului n
14
cadrul se!mentului respecti7. "dresa de se!ment i adresa efecti7a formeaz adresa
fizica.
"dresa de se!ment este furnizata de cele ) re!istre de se!ment.
"dresa efecti7 n adresarea direct este o parte component a instruciunii.
De e+emplu1
mov a"'table <ncarc n re!istrul a+ 7aloarea locaiei
<de memorie cu etic&eta table
Remarcm c partea mai puin semnificati7 a unui cu79nt este memorat la
adrese mai mici8 adic dac adresa table conine 7aloarea ""8 iar adresa tableM1
7aloarea 668 atunci n urma e+ecuiei instruciunii de mai sus re!istrul a+ 7a a7ea
7aloarea 66"".
"dresa efecti7 a operandului n cazul adresrii indirecte prin re!istru se
conine n re!istrul de baz b+8 re!istrul bp sau n unul din re!istrele inde+ di8 si.
4peranzii sunt inclui n paranteze ptrate. De e+emplu1
mov a"'3b"4 <ncarc n re!istrul a+ 7aloarea locaiei de memorie
<adresa efecti7 a creia se afl n re!istrul b+
-entru a ncrca deplasamentul locaiei table n re!istrul b+ poate fi utilizat
operatorul offset. De e+emplu1
mov b"'offset table < ncarc deplasamentul locaiei table n re!istrul b+
"cest mod este util n acele cazuri c9nd este ne7oie de a accesa o
consecuti7itate de locaii ncep9nd cu adresa dat.
:n cazul adresrii bazate adresa efecti7 se calculeaz prin sumarea
coninutului re!istrului b+ sau bp i a unui deplasament msurat n octei.
De e+. urmtoarele comenzi e+ecut una i aceeai aciune1
mov a"'3b"45( < ncarc n re!istrul a+ 7aloarea locaiei de memorie de la
mov a"'3b"5(4 < adresa indicat
mov a"'(3b"4 < de re!istrul b+ plus patru octei
:n cazul adresrii inde+ate adresa efecti7 se calculeaz prin sumarea unuia din
re!istrele inde+ si sau di i e7entual a unui deplasament. "ceast adresare poate fi
15
utilizat la accesarea elementelor unui tablou c9nd deplasamentul indic nceputul
tabloului8 iar re!istrul indice ; un element. De e+emplu1
mov di' 0
mov al'table3di4 <ncarc n re!istrul al elementul de pe poziia trei
<al tabloului table.
:n cazul adresrii bazate i inde+ate adresa efecti7 se calculeaz prin sumarea
coninutului re!istrului b+ i si sau di8 i e7entual a unui deplasament. "ceast adresare
este util atunci c9nd se cere accesarea elementelor unui tablou bidimensional unde
re!istrul b+ conine adresa de nceput al tabloului8 iar 7aloarea deplasamentului i a
re!istrului inde+ determin deplasamentul pe coloan i linie. De e+emplu1
mov a"'3b"505di4
mov a"'3b"5043di4
mov a"'3b"43di504
"dresa efecti7 de se!ment se calculeaz fa de re!istrul de se!ment ds n
toate modurile de adresare' n afar de cazul c9nd e folosit re!istrul bp pentru care este
utilizat re!istrul ss(. -entru modificarea re!istrelor de se!ment folosite implicit poate fi
utilizat prefi+area se!mentului.
De e+.
mov es63b"4' d" <7aloarea re!istrului d+ se transfer n locaia de memorie din
<se!mentul es cu deplasamentul indicat de re!istrul b+.
2ntroducerea 3i afi3area unui 3ir
-entru introducerea unui ir de la tastatur prin intermediul funciei #"&
'ntreruperea 21&( spaiul de memorie trebuie definit ntr;un mod special1
1 bait 1 bait 6uffer pentru introducerea simbolurilor
-rimul bait conine un numr e!al cu dimensiunea buffer;ului pentru
introducerea simbolurilor. "l doilea bait 7a conine numrul simbolurilor introduse.
5imbolurile introduse se 7or pstra n buffer ncep9nd cu al treilea bait al spaiului de
memorie definit.
Deci8 definirea spaiului de memorie pentru introducerea unui ir din 1#
simboluri poate fi efectuat astfel1
16
sir db 11' 7' 11 dup!7#
3un!imea irului i a buffer;ului se definesc cu un bait mai mult deoarece un
bait este necesar pentru pstrarea codului #d& N codul tastei nter.
-entru un acces mai facil la fiecare domeniu descris8 definirea poate fi di7izat
n trei pri1
+a"8en%t)db 11
Current8e)%t) db 7 <semnul Y semnific c 7aloarea locaiei
<de memorie
9uffer db 11 D:;!7# <nu este definit
"pelul funciei #"& se efectueaz astfel1
mov a)' /a) <numrul funciei se ncarc n re!istrul a&
mov d"' offset sir <n d+ se ncarc adresa de nceput a spaiului
<de memorie definit pentru introducerea datelor
<sau mo7 d+8 offset $a+3en!t& N n al doilea
caz
int 01) <apelul ntreruperii
"fiarea unui ir prin intermediul funciei #%& necesit definirea unei 7riabile
de tip db, de e+emplu1
a db <=alut>?< @ semnul _[K indic sf9ritul zonei de afiare
iar realizarea afirii se efectueaz cu ajutorul urmtoarelor instruciuni1
mov a)' * <numrul funciei se ncarc n re!istrul a&
lea d"' a <adresa de nceput a locaiei ce definete irul se ncarc n
<re!istrul d+ sau mo7 d+8 offset a
int 01) <numrul ntreruperii
Exemplu
5 se scrie un pro!ram n limbajul de asamblare care introduce un ir s1 de la
tastatur8 copiaz primul i ultimul simbol n irul s2 i afieaz la consol ambele
iruri.
...
messa!e db Zenter t&e strin!1\8 1#8 138 Z[\ <mesaj
<urmtoarele 3 r9nduri definesc
spaiul
<de memorie pentru introducerea
unui
<ir de la tastatur prin intermediul
17
<funciei 1# ' ntreruperea 21&(
ma+len!t& db 11 <lun!imea ma+imal a lun!imii irului8
<ultimul simbol 7a fi simbolul cu codul 13
<'codul tastei nter(
curlen!t& db Y <numrul simbolurilor introduse fr codul nter
s1 db 11 dup'Y( <buffer;ul n care 7or fi amplasate datele
introduse
s2 db 3 D=-'Y( <doi baii pentru simboluri i unul pentru
<simbolul [ N indicator pentru sf9ritul irului
neUXline db 1#8138\[\ <codurile tastei nter
...
<afiarea irului message
...
<introducerea irului s1
...
mo7 al8 s1 <copiaz primul simbol din s1 n irul s2
mo7 s28 al <prin intermediul re!istrului al
mo7 bl8 curlen!t& <n b+; numrul simbolurilor introduse
mo7 b&8 #
mo7 al8 s1 Rb+ N 1S <copiaz ultimul simbol din s1 n s2
mo7 s2 M 18al <pe a doua poziie prin al
mo7 s2 M28 Z[\ <[ la sf9ritul irului s2
mo7 s1Rb+S8 Z[\ <simbolul nter se sc&imb n [
<afiarea s1 la consol
<afiarea ne45line la consol
<afiarea s( la consol
<afiarea ne45line la consol
<sf9rit de pro!ram
....
Sarcini
5 se scrie un pro!ram n limbaj de asamblare conform 7ariantelor de mai jos.
5 se depaneze pro!ramul prin debu!!er;ul /D.
5 se efectueze trasarea pas cu pas imprim9nd la fiecare pas 7aloarea se!mentului
de date.
5 se analizeze modificrile re!istrului ip i a se!mentului de date pas cu pas n
e+ecuia pro!ramului.
18
1. 5 se introduc un ir cu lun!imea de 1# simboluri. 5 se copieze din irul s1 n
irul s2 simbolurile de pe poziiile 28 ) i 2. 5 se afieze la consol ambele iruri.
2. 5 se introduc un ir cu lun!imea de 1# simboluri. 5 se copieze din irul s1 n
irul s2 simbolurile de pe poziiile 1#8 , i 2. 5 se afieze la consol ambele iruri.
3. 5 se introduc un ir cu lun!imea de 1# simboluri. 5 se copieze din irul s1 n
irul s2 fiecare al treilea simbol s1. 5 se afieze la consol ambele iruri.
). 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se copieze din
irul s1 n irul s2 toate simbolurile de pe poziie impar. 5 se afieze la consol
ambele iruri.
,. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se copieze din
irul s1 n irul s2 toate simbolurile de pe poziie par. 5 se afieze la consol ambele
iruri.
2. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se copieze din
irul s1 n irul s2 ultimile rei simboluri. 5 se afieze la consol ambele iruri.
.. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se copieze din
irul s1 n irul s2 primele trei simboluri. 5 se afieze la consol ambele iruri.
0. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se copieze din
irul s1 n irul s2 primele trei simboluri n ordine in7ers. 5 se afieze la consol
ambele iruri.
%. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se copieze din
irul s1 n irul s2 ultimile trei simboluri n ordine in7ers. 5 se afieze la consol
ambele iruri.
1#. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se
copieze din irul s1 n irul s2 ultimul simbol de trei ori. 5 se afieze la consol
ambele iruri.
11. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se
copieze din irul s1 n irul s2 penultimul simbol de trei ori urmat de primul. 5 se
afieze la consol ambele iruri.
12. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se
copieze din irul s1 n irul s2 al cincilea simbol de dou ori i al doilea de trei ori. 5
se afieze la consol ambele iruri.
13. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se
copieze din irul s1 n irul s2 primele trei simboluri de dou ori. 5 se afieze la
consol ambele iruri.
1). 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se
copieze din irul s1 n irul s2 al doilea8 al patrulea simbol de trei ori consecuti7. 5 se
afieze la consol ambele iruri.
19
1,. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se
copieze din irul s1 n irul s2 simbolul al noulea de trei ori urmat de al doilea de
dou ori. 5 se afieze la consol ambele iruri.
12. 5 se introduc un ir cu lun!imea de cel puin 1# simboluri. 5 se
copieze din irul s1 n irul s2 ultimul i penultimul de trei ori. 5 se afieze la
consol ambele iruri.
20
Instruciuni de transfer. Introducerea i afiarea unui ir prin intemediul
funciilor AB) i (/)!ntreruperea 01)#
Obiectivele lucrrii
*amiliarizarea cu funciile de intrareCieire8 nsuirea modului de utilizare al
unor instruciuni de transfer8 formarea abilitilor de e+ecutare i depanare a
pro!ramelor folosind depanatoare interacti7e.
Breviar teoretic
2nstruciuni de transfer a datelor
Instruciuni de transfer a datelor realizeaz sc&imbul de date ntre re!istre8
locaii de memorie.
Instruciunea mov
/ransfer1
; bait sau cu79nt din re!istru n re!istru sau din re!istru n locaie de memorie i
in7ers<
; o 7aloare imediat ntr;un re!istru sau locaie de memorie.
5inta+a1 mov <destinaie>' <surs>
+emple1
mov a" ' table < transfer din memorie n re!istru
mov table ' a" < transfer din re!istru n memorie
mov cl ' 02 < transfer n re!istrul `l 7aloarea 2,
Incorect ar fi dac1
sursa i destinaia ar fi ambele operanzi n memorie<
ar fi folosite re!istrele fla!s i ip<
operanzii ar a7ea dimensiuni diferite<
re!istru cs ar aprea ca destinaie<
ntr;un re!istru de se!ment ar fi transferate date imediate<
operanzii ar fi simultan re!istre de se!ment.
Instruciunea lea
21
Copiaz adresa efecti7 a operandului 'offset;ului n cadrul se!mentului( n
re!istrul !eneral specificat.
5inta+a1 lea <re%istru>' <locaie de memorie>
+emplu1
lea b"'table3di4 <dac re!istrul di conine 7aloarea ,8 atunci n
<re!istrul b+ 7a fi transferat adresa efecti7 a locaiei
de
<memorie tableM, n se!mentul8 adresat
<de 7aloarea re!istrului ds
Instruciunile pus6 3i pop
Instruciunea pus) transfer n 79rful sti7ei 7aloarea re!istrului sau locaiei de
memorie cu dimensiunea de un cu79nt.
5inta+a1 pus) <surs>
+emple1
pus) si
pus) cs
pus) table3b"43di4
Instruciunea pop e+tra!e cu79ntul din 79rful sti7ei i l transfer ntr;un
re!istru sau locaie de memorie.
5inta+a1 pop <destinaie>
+emplu1
pop a"
-rin 79rf de sti7 se subnele!e locaia de memorie din se!mentul de sti78
adresa relati7 a creia este indicat de re!istrul sp. Re!istrul sp indic ntotdeauna
adresa cu79ntului introdus n sti7 ultimul. Instruciunea pus) micoreaz 7aloarea lui
sp cu 28 iar instruciunea pop N mrete cu 2.
Instruciunile pus6f 3i popf
Instruciunea pus&f transfer n 79rful sti7ei 7aloarea re!istrului de indicatori
fla!s.
22
5inta+a1 pus)f
Instruciunea popf e+tra!e din 79rful sti7ei un cu79nt i l transfer n re!istrul
de indicatori fla!s.
5inta+a1 popf
2ntroducerea 3i afi3area unui 3ir! 7unciile 876 3i +06
-entru introducerea unui ir de la tastatur prin funcia 3*& este necesar de a
descrie numai buffer;ul n care se 7or pstra simbolurile introduse. ste necesar de
reinut c n comparaie cu funcia #"&8 funcia 3*& sal7eaz nu un simbol8 dar doi N
#"& i #D& N codul inte!ral al tastei L/R8 de aceea buffer;ul trebuie s fie cu 2
baii mai mare dec9t numrul simbolurilor introduse. -lus la toate acestea procesorul
nu emite nici un semnal la umplerea buffer;ului i nici tastatura nu se bloc&eaz. /oate
simbolurile introduse nimeresc iniial n buffer;ul de sistem intrareCieire8 apoi
procesorul transfer numrul necesar de simboluri n zona de memorie alocat de ctre
pro!ramator. 5urplusul de simboluri rm9n n buffer;ul de sistem. le 7or fi e+trase la
apelul repetat al funciei de intrare ceea ce poate duce la o funcionare incorect a
pro!ramului. De aceea pro!ramatorul trebuie s aib sin!ur !rij de numrul
simbolurilor introduse.
Exemple: fie buffer;ul definit astfel1
sir db 12 dup'Y(
atunci apelul funciei 3f& se efectueaz n felul urmtor1
mo7 a&8 3f& <numrul funciei se pune n re!istrul a&
lea d+8 sir <adresa bufferul;ui se pune n re!istrul d+.
<poate fi nlocuit cu mo7 d+8 offset sir
mo7 b+8 # <n b+ N numr lo!ic
mo7 c+8 12 <n c+ N numrul simbolurilor introduse M 2 pentru
<codul lui nter
int 21& <apel de ntrerupere
Dup e+ecuia acestei funcii n re!istrul al se pstreaz numrul simbolurilor
introduse plus doi pentru codul lui nter8 iar n a& numrul erorii.
*uncia )#& afieaz un ir la consol. "pelul funciei se efectueaz astfel1
mo7 a&8 )#& < numrul funciei se pune n re!istrul a&
23
lea d+8 sir < adresa buffer;ului se pune n re!istrul d+
mo7 b+8 1 < n b+ N numr lo!ic
mo7 c+8 1# < n c+ N numrul simbolurilor ce trebuie afiate
int 21& <apel de ntrerupere. -arametru de ieire N re!istru al
<ce conine numrul simbolurilor afiate
Sarcini de lucru
1. 5 se scrie un pro!ram '7ezi lucrarea de laborator a 3( folosind funciile 3f& i
)#& de introducere de la tastatur i afiare la consol a unui ir. 5imbolurile 7or fi
copiate prin intermediul sti7ei utiliz9nd instruciunile pus) i pop.
2. 5 se e+ecute pro!ramul prin depanatorul /D. 5 se efectueze trasarea pro!ramului
pas cu pas8 tiprind la fiecare pas 7aloarea se!mentului de date. 5 se analizeze
modificrile indicatorului 79rfului sti7ei sp8 indicatorului de adrese ip i a
se!mentului de date la fiecare pas de e+ecuie a pro!ramului.
24
Biiere e"ecutabile. Introducerea i afiarea unui simbol la consol
Obiectivele lucrrii
*amiliarizarea cu tipurile de fiiere e+ecutabile8 nsuirea modului de formare a
fiierelor e+ecutabile formarea abilitilor de utilizare a funciilor de
introducereCafiare a unui simbol.
Breviar teoretic
7i3iere executabile
5unt posibile urmtoarele formate de fiiere e+ecutabile1 A.e+e8 A.com8 A.bat8
A.cpl8 A.scr8 A.cmd. Wom analiza unele din ele.
com Cpro!ramul este format dintr;un sin!ur se!ment8 deci codul i datele pot
a7ea mpreun ma+im 2)Fo< din aceast cauz referirile se fac relati7 la adresa de
nceput de se!ment.
-entru elaborarea fiierelor de tip A.com se utilizeaz modelul de memorie de
tip tinD. -entru editarea de le!turi este necesat parametrul Ct.
-ro!ramul surs trebuie s nceap cu pseudoinstruciunea 4RG 1##I pentru a
rezer7a spaiu de memorie pentru cod8 sti78 date. Datele pot fi plasate oriunde n
pro!ram8 dar se recomand s fie plasate la nceput 'trebuie a7ut mare !rij s nu se
Je+ecuteK din !reeal zona cu date8 adic s nu se omit instruciunea de salt peste
zona de date8 n caz contrar acestea 7or fi interpretate ca instruciuni i rulate8
rezultatul fiind altul dec9t cel ateptat(. Lu este necesar iniializarea re!istrelor
se!ment8 ele fiind ncrcate cu 7aloarea comun din cs. /erminarea pro!ramului se
poate face fie cu ret 'n conte+t near( fie cu apelul int 01) cu numrul funciei )c& n
re!istrul a&.
$odel pentru pro!ramele de tip E.com
.model tin>
.code
or! 1##& <nceputul fiierului com
start1
jmp label
<definire zonei de date
label1
25
<instruciunile pro!ramului
mo7 a&8)c&
int 21& <ieire n sistemul de operare
end start
laborarea fiierului cu e+tensia A.com se efectueaz prin urmtorii pai'se
presupune c fiierul surs are denumirea p.asm(1
tasm p.asm
tlin]Ct p.asm
*ormatul e"e F este un format de fiiere e+ecutabile cel mai des utilizat pentru
sistemul de operare D45. -ro!ramele e+ecutabile n acest format pot a7ea se!mente
multiple. ste formatul pentru pro!rame de dimensiuni mari. +tensia lor implicit
este .exe. -ro!ramele pot fi oric9t de mari n limita memoriei disponibile. -entru
e+ecuia corect8 re!istrele D58 5 i 55 trebuie s fie iniializate e+plicit de
pro!ramator. -entru elaborarea fiierelor de tip exe se utilizeaz modelul de memorie
de tip small. $odel pentru pro!rame de tip e"e este definit n lucrarea de laborator a
2.
7uncii de introducere9afi3are a unui simbol (!unciile "#$ i "%$)
"pelul funciei #1& pentru introducerea unui simbol de la tastatur prin
intermediul ntreruperii 21& se efectueaz astfel1
mo7 a&8 #1& <numrul funciei se ncarc n re!istrul a$
int 21& <apelul ntreruperii. Codul simbolului introdus se
<ncarc n re!istrul al
-entru pstrarea codului simbolului introdus este necesar de a sal7a coninutul
re!istrului al ntr;o locaie de memorie de tip b>te sau ntr;un alt re!istru cu
dimensiunea b>te
"fiarea se efectueaz cu ajutorul funciei #2& astfel1
mo7 a&8 #2& <numrul funciei se ncarc n re!istrul a&
mo7 dl8 TcodD <codul simbolului ce trebuie afiat se ncarc n
<re!istrul dl
int 21& <apelul ntreruperii
26
Exemplu
:n continuare 7om soluiona urmtoarea problem1 s se introduc un simbol de
la tastatur. 5imbolul introdus sa se memoreze ntr;o locaie de memorie definit8
ulterior 7aloarea locaiei de memorie s se afieze la consol.
.model small
.stac]
.data
s db Y <definirea locaiei de memorie cu 7aloare neiniializat
mes1 db _Introduceti simbolul a11 [ _
mes2 db _"ti introdus simbolul1 _ 8 1#8138 _[_
.code
< iniializarea re!istrului ds
...
<afiarea primului mesaj mes#
...
mo7 a&8 1 <introducerea simbolului
int 21& < n al codul simbolului introdus
mo7 s8al <sal7area codului simbolului introdus n locaia s
<afiarea mesajului al doilea mes%
...
mo7 a&8 2 <afiarea la consol a simbolului introdus
mo7 dl8s
int 21&
< sfarit de pro!ram
...
sau utiliz9nd modelul tin> i obinerea fiierului .com1
.model tin>
.code
or! 1##&
start1
jmp m
s db Y
mes1 db bIntroduceti un simbol1 b81#8138^[^
mes2 db 1#8138 b5imbolul introdus este1[ b
m1 <afiarea primului mesaj mes#
...
mo7 a&8 1
27
int 21&
mo7 s8al
<afiarea mesajului al doilea mes%
...
mo7 a&8 2
mo7 dl8s
int 21&
< sfarit de pro!ram
...
end start
Sarcini de lucru
5e 7or studia e+emplele prezentate.
5e 7a scrie pro!ramul n format .com8 se 7a asambla8 lin];edita i depana cu /urbo
Debu!!er;ul urmrindu;se 7aloarea re!itrilor i al memoriei.
5e 7a rescrie pro!ramul n format .e"e i se 7a depana.
1. ste definit irul s#. 5 se scrie un pro!ram assembler ce introduce de la
tastatur simbolurile a#, a% irul s% i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti sirul s21
s2
Introduceti simbolul a11a1
Introduceti simbolul a21
a2
Rezultatul obtinut s1a1bba2bbs2 'b spaiu liber(
2. 5unt definite irurile s# i s%. 5 se scrie un pro!ram assembler ce introduce
de la tastatur simbolurile a# , a%, irul s& i afieaz concatenarea
elementelor introduse n modul urmtor1
Introduceti sirul s31
s3
Introduceti simbolul a11 a1
Introduceti simbolul a21 a2
Rezultatul obtinut1
a1bbs2a2bbs1bbs3 'b spaiu liber(
28
3. ste definit irul s#. 5 se scrie un pro!ram assembler ce introduce de la
tastatur simbolul a#, irurile s%8s& i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti sirul s21
s2
Introduceti simbolul a11a1
Introduceti sirul s31 s3
Rezultatul obtinut s1bba1s1a1bbs2s3 'b spaiu liber(
4. ste definit irul s#. 5 se scrie un pro!ram assembler ce introduce de la
tastatur simbolurile a# , a%, irul s% i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti sirul s21 s2
Introduceti simbolul a11
a1
Introduceti simbolul a21 a2
Rezultatul obtinut1
a1bbs1bba2bbs1bb s2 'b spaiu liber(
5. ste definit irul s#. 5 se scrie un pro!ram assembler ce introduce de la
tastatur simbolurile a#, a%,a&, irurile s%,s& i afieaz concatenarea
elementelor introduse n modul urmtor1
Introduceti sirul s21 s2
Introduceti simbolul a11 a1
Introduceti simbolul a21
a2
Introduceti simbolul a31 a3
Introduceti sirul s31
s3
Rezultatul obtinut s1a1bba3a2a2bbs2bbs3 'b spaiu liber(
6. 5unt definite irurile s# i s%. 5 se scrie un pro!ram assembler ce introduce
de la tastatur simbolul a#, irul s& i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti sirul s31
s3
Introduceti simbolul a11 a1
Rezultatul obtinut1
a1bbs2a1s1bbs3bba1 'b spaiu liber(
29
7. ste definit irul s1. 5 se scrie un pro!ram assembler ce introduce de la
tastatur simbolul a1, irul s2 i afieaz concatenarea elementelor introduse n
modul urmtor1
Introduceti simbolul a11
a1
Introduceti sirul s21
s2
Rezultatul obtinut s1bba1s1bbs2bba1 'b spaiu liber(
8. ste definit irul s1. 5 se scrie un pro!ram assembler ce introduce de la
tastatur simbolurile a# , a%, irul s2 i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti simbolul a11
a1
Introduceti simbolul a21 a2
Introduceti sirul s21 s2
Rezultatul obtinut1
a2s1bbs1a1bbs2 'b spaiu liber(
9. 5unt definite irurile s18s2. 5 se scrie un pro!ram assembler ce introduce de la
tastatur simbolurile a#,a%8 irul s& i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti simbolul a11a1
Introduceti simbolul a21a2
Introduceti sirul s31
s3
Rezultatul obtinut s1a1bba2bbs2bbs3 'b spaiu liber(
10. 5unt definite irurile s1 i s2. 5 se scrie un pro!ram assembler ce introduce
de la tastatur simbolurile a#, a%, irul s3 i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti simbolul a11 a1
Introduceti sirul s31
s3
Introduceti simbolul a21 a2
Rezultatul obtinut1
a1bbs2a2s1bbs3 'b spaiu liber(
11.5unt definite irurile s# i s%. 5 se scrie un pro!ram assembler ce introduce de
la tastatur simbolul a#, irul s& i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti sirul s31 s3
30
Introduceti simbolul a11
a1
Rezultatul obtinut1 a1bs2a1s1bbba1bs3 'b spaiu liber(
12.5unt definite irurile s# i s%. 5 se scrie un pro!ram assembler ce introduce de
la tastatur simbolurile a# i a% i irul s& i afieaz concatenarea
elementelor introduse n modul urmtor1
Introduceti sirul s31
s3
Introduceti simbolul a11 a1
Introduceti simbolul a21 a2
Rezultatul obtinut1
s2bba2s1bs3ba1s3 'b spaiu liber(
13.5unt definite irurile s# i s%. 5 se scrie un pro!ram assembler ce introduce de
la tastatur simbolul a#, irul s& i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti simbolul a11 a1
Introduceti sirul s31 s3
Rezultatul obtinut1 s2ba1bs1bs3ba1bs1 'b spaiu liber(
14.5unt definite irurile s# i s%. 5 se scrie un pro!ram assembler ce introduce de
la tastatur simbolurile a#,a% irul s& i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti simbolul a11 a1
Introduceti simbolul a21
a2
Introduceti sirul s31 s3
Rezultatul obtinut1
s1ba2ba1bs2bs3ba1 'b spaiu liber(
15.5unt definite irurile s# i s%. 5 se scrie un pro!ram assembler ce introduce de
la tastatur simbolul a#, irul s& i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti sirul s31 s3
Introduceti simbolul a11 a1
Rezultatul obtinut1 a1bs2ba1s1bs3ba1ba1 'b spaiu liber(
16.5unt definite irurile s# i s%. 5 se scrie un pro!ram assembler ce introduce de
la tastatur simbolurile a#,a% irul s& i afieaz concatenarea elementelor
introduse n modul urmtor1
Introduceti simbolul a11 a1
Introduceti sirul s31
31
s3
Introduceti simbolul a21 a2
Rezultatul obtinut1
a1bs2a1s3bbs1ba2 'b spaiu liber(
32
Instruciuni de comparare i de salt
Obiectivele lucrrii
3ucrarea se refer la familiarizarea cu instruciunile de salt8 de comparare i
moduri de utilizare ale lor.
Breviar teoretic
Instruciunea cmp
5emnificaia instruciunii const n e+ecuia unei scderi temporare 'destinaie(
; 'surs(8 fr a se modifica 7reun operand8 dar cu poziionarea bistabililor de condiie.
5inta+a1 cmp <destinaie> ' <sursa>
"fecteaz 1 af8 cf8 pf8 sf8 zf8 of .
/est9nd bistabilii de condiie8 putem deduce relaia dintre cei doi operanzi. De
e+emplu8 instruciunea cmp a+8 b+ 7a pro7oca o scdere temporar 'a+( ; 'b+(. Dac zf
E 1 nseamn c 'a+( E 'b+(. Dac cf E 1 nseamn c la scdere a aprut un mprumut8
deci 'a+( T 'b+(8 dac sunt considerate ca numere fr semn.
Instruciunea cmp se folosete8 de obicei8 mpreun cu instruciuni de salt
condiionat.
Instruciunea de salt nec'ndii'nat jmp
5inta+a1 jmp <inta>
n care inta specific adresa de salt 'punctul n care se 7a da controlul(.
5pecificarea intei se poate face printr;o etic&et sau printr;o e+presie
tic&etele au asociat un tip 'near sau far( i pot fi1un nume de procedur< o etic&et
definit cu 1 'de tip near(< o etic&et definit cu directi7a label.
+emple de etic&ete1
m11 aici1 urm1
et31 label1 far1
!ata1 label1 near1
+ist trei tipuri de instruciuni jmp6
c s)ort ; adresa int este situat la o adres n domeniul R;1208 M12.S fa de
adresa instruciunii (mp<
c near ; adresa int este n acelai se!ment de cod cu instruciunea (mp<
33
G far ; adresa int poate fi n alt se!ment de cod fa de instruciunea (mp.
Instruciuni de salt c'ndii'nat
5inta+a1 jcc <inta>
unde cc reprezint o condiie.
Instruciunile din aceast cate!orie implementeaz salturi condiionate de
7aloarea unor bistabili de condiie. Instruciunile de salt condiionat au urmtoarele
caracteristici1
c toate instruciunile de salt condiionat sunt de tip s)ort 'deci directe(8 ceea ce
nseamn c adresa int trebuie s fie la o distan cuprins ntre
;12. i M120 de octei fa de instruciunea de salt<
c e+ist mai multe mnemonice pentru aceeai instruciune<
c dac condiia nu este ndeplinit8 saltul nu are loc8 deci e+ecuia continu cu
instruciunea urmtoare ce urmeaz dup instruciunea de salt<
c e+ist instruciuni at9t pe condiia direct8 c9t i pe condiia ne!at<
c bistabilii de condiie nu sunt afectai.
Instruciunile de salt condiionat se utilizeaz dup o instruciune care modific
bistabilii de condiie. Cea mai des nt9lnit situaie este instruciunea de comparaie
cmp.
Reinem urmtoarele re!uli1
c 3a comparaii cu semn8 folosim 88%reaterK i 88lessK
c 3a comparaii fr semn8 folosim 88aboveK i 88belloHK
$nemonica instruciunii Condiie de salt Interpretare
je8 jz zfE1 zero8 eOual
jl8 jn!e
sf of
3ess8 Lot Greater or Oual
jle8 jn!
sf of sau zfE1
3ess or Oual8 Lot Greater
jb8 jnae8 jc cfE1 6eloU8 Lot "bo7e or Oual8 Carr>
jbe8 jna cfE1 sau zfE1 6eloU or Oual8 Lot "bo7e
jp8 jpe pfE1 -arit>8 -arit> 7en
jo ofE1 47erfloU
js sfE1 5i!n
jne8 jnz zfE# Lot @ero. Lot aual
jnl8 j!e sfEof Lot 3ess8 Greater or Oual
jne8 j! sfEof sau zfE# Lot 3ess or Oual8 Greater
jnb8 jae8 jnc cfE# Lot 6eloU8 "bo7e or Oual8 Lot Carr>
34
jnbe8 ja cfE# sau zfE# Lot 6eloU or Oual8 "bo7e
jnp8 jpo pfE# Lot -arit>8 -arit> 4dd
jno ofE# Lot 47erfloU
jns sfE# Lot 5i!n
Exemplu: 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de
la tastatur este una din literele p sau t i s se afieze ec&i7alentul lui majuscul8 n
caz contrar s se afieze mesajul )!alse*.
De e+emplu1 Introduceti un simbol1 t
/
sau Introduceti un simbol1 s
false
5imbolul introdus este pstrat n locaia de memorie +ar de tip b>te1
...
mo7 a&8 1 <introducerea simbolului de la tastatur
int 21&
mo7 7ar8 al <sal7m n 7ariabila 7ar simbolul introdus
cmp 7ar8 p <compar simbolul introdus cu simbolul p
je m1 <salt la etic&eta m1 dac e p
cmp 7ar8 t <n caz contrar se compar cu simbolul t
jne m2 <dac nu e t atunci salt la etic&eta m2
m11 sub 7ar8 2#& <dac e p sau t se reface din minuscul n majuscul
mo7 a&8 2 <i se afieaz la consol
mo7 dl8 7ar
int 21&
jmp sfarsit <salt necondiionat la ieirea din pro!ram
m21 <afiarea mesajului !alse
sfarsit1 ...
Sarcini de lucru
1. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este o liter majuscul i s se afieze ec&i7alentul lui minuscul8 n caz contrar s se
afieze mesajul )er'are*.
De e+emplu1 Introduceti un simbol1"
a
sau Introduceti un simbol1 b
eroare
2. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este un semn aritmetic'M8;8A8C( s se afieze mesajul )true*, n caz contrar s se
afieze mesajul _falseK.
35
De e+emplu1 Introduceti un simbol1 A
true
sau Introduceti un simbol1 b
false
3. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este o cifr s se afieze simbolul de\, n caz contrar s se afieze mesajul _eroareK.
De e+emplu1 Introduceti un simbol1 ,
e
sau Introduceti un simbol1'
eroare
4. 5 se scrie un pro!ram assembler care 7erific dac codul simbolului introdus de la
tastatur se afl n inter7alul R%...122S mesajul )true*, n caz contrar s se afieze
mesajul _falseK.
De e+emplu1 Introduceti un simbol1 t
true
sau Introduceti un simbol1 2
eroare
5. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este o liter minuscul i s se afieze ec&i7alentul lui majuscul8 n caz contrar s se
afieze mesajul )Er'are. ,imb'lul intr'dus nu este ' liter minuscul.*.
De e+emplu1 Introduceti un simbol1 r
R
sau Introduceti un simbol1 2
roare. 5imbolul introdus nu este o liter minuscul.
6. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este un unul din semnele '8(8R8S8P8Q s se afieze mesajul )true*, n caz contrar s se
afieze mesajul _falseK.
De e+emplu1 Introduceti un simbol1 (
true
sau Introduceti un simbol1 ]
false
7. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este o 7ocal s se afieze mesajul _o]K, n caz contrar s se afieze mesajul _errorK.
De e+emplu1 Introduceti un simbol1 e
o]
sau Introduceti un simbol1 m
error
36
8. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este o consoan s se afieze mesajul _o]K, n caz contrar s se afieze mesajul _errorK.
De e+emplu1 Introduceti un simbol1 f
o]
sau Introduceti un simbol1 )
error
9. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este una din literele da\8 Zb\8 Zc\ sau Zd\ afieze mesajul _trueK, n caz contrar s se
afieze mesajul _falseK.
De e+emplu1 Introduceti un simbol1b
true
sau Introduceti un simbol1l
false
10.5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este una din literele df\8 Zg\8 Z@\ sau ZV\ afieze mesajul _trueK, n caz contrar s se
afieze mesajul _falseK.
De e+emplu1 Introduceti un simbol1f
true
sau Introduceti un simbol13
false
11. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este una din cifrele impare d1\8 d3\8 d,\8 d.\8 d%\ s se afieze mesajul _o]K, n caz
contrar s se afieze mesajul _errorK.
De e+emplu1 Introduceti un simbol13
o]
sau Introduceti un simbol1$
error
12. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este una din cifrele pare Z2\8 Z)\8 Z2\8 Z0\ s se afieze mesajul _o]K, n caz contrar s se
afieze mesajul _errorK.
De e+emplu1 Introduceti un simbol12
o]
sau Introduceti un simbol1,
error
13.5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este unul din semnele d[\ sau dB\ s se afieze mesajul _bineK, n caz contrar s se
afieze mesajul _eroareK.
De e+emplu1 Introduceti un simbol1 [
37
bine
sau Introduceti un simbol1 )
eroare
14. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este unul din simbolurile \j\8\]\8\f\8\!\ s se afieze analo!ul majuscul, n caz contrar
s se afieze mesajul _eroareK.
De e+emplu1 Introduceti un simbol1 ]
F
sau Introduceti un simbol1 t
eroare
15. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este unul din simbolurile \"\8\C\8\D\8\\ s se afieze mesajul _4]K, n caz contrar s
se afieze mesajul _errorK.
De e+emplu1 Introduceti un simbol1 D
4]
sau Introduceti un simbol1 a
error
16. 5 se scrie un pro!ram assembler care 7erific dac simbolul introdus de la tastatur
este unul din simbolurile \T\8\E\8\D\8\Y\ s se afieze K/rueK respecti7, n caz contrar s
se afieze mesajul _*alseK.
De e+emplu1 Introduceti un simbol1 E
/rue
sau Introduceti un simbol1 e
*alse
38
Instruciuni aritmetice
Obiectivele lucrrii
-rezentarea instruciunilor aritmetice folosite n limbajul de asamblare8
familiarizarea cu aceste instruciuni i nsuirea modului de utilizare al acestor
instruciuni n pro!rame.
Breviar teoretic
2nstruciuni aritmetice
Instruciunea add
5emnificaia instruciuni1 nsumeaz cei doi operanzi8 iar rezultatul este depus
n operandul destinaie
5inta+a1 add <destinaie>'<surs>
+emple1
add a+8 Rb+S <adun elementul indicat de re!istrul b+ cu 7aloarea
<re!istrului a+ i rezultatul l depune n re!istrul a+
add a+8 1# <adun 1# cu 7aloarea din re!istrul a+ i depune rezultatul n
<re!istrul a+
add b&8 lm <adun coninutul locaiei de memorie lm cu 7aloarea
<re!istrului b& i depune rezultatul n re!istrul b&
Instruciunea inc
5emnificaia instruciuni1 adau! 7aloarea 1 la operandul destinaie8 iar
rezultatul este depus n operandul destinaie.
5inta+a1 inc <destinaie>
+emple1
inc c+ <7aloarea din re!istrul c+ este incrementat cu 1
inc Rb+S <7aloarea locaiei de memorie indicat de re!istrul b+
<este incrementat cu 1
inc lm <7aloarea locaiei de memorie lm este incrementat cu 1
Instruciunea sub
5emnificaia instruciuni1 din operandul destinaie se scade operandul surs8 iar
rezultatul este depus n operandul destinaie.
5inta+a1 sub <destinaie> ' <surs>
+emple1
39
sub a+8 Rb+S <scade 7aloarea locaiei de memorie indicat de re!istrul b+
<din 7aloarea re!istrului a+ i rezultatul l depune n
<re!istrul a+
sub a+8 1# <scade 1# din 7aloarea re!istrului a+ i depune rezultatul
<n re!istrul a+
sub b&8 lm <scade coninutul locaiei de memorie lm din 7aloarea
<re!istrului b& i depune rezultatul n re!istrul b&
Instruciunea dec
5emnificaia instruciuni1 scade 7aloarea 1 din operandul destinaie8 iar
rezultatul este depus n operandul destinaie.
5inta+a1 dec <destinaie>
+emple1
dec c+ <7aloarea din re!istrul c+ este decrementat cu 1
dec Rb+S <7aloarea locaiei de memorie indicat de re!istrul b+
<este decrementat cu 1
dec lm <7aloarea locaiei de memorie lm este decrementat cu 1
Instruciunea ne%
5emnificaia instruciuni1 din 7aloarea # se scade coninutul destinaiei' iar
rezultatul este depus tot n operandul destinaie.
5inta+a1 ne% <destinaie>
+emple1
ne! c+ <este sc&imbat semnul 7alorii re!istrului c+
ne! Rb+S <este sc&imbat semnul 7alorii indicat de re!istrul b+
ne! lm <este sc&imbat semnul 7alorii locaiei de memorie lm
5c&imbarea semnului poate conduce uneori la aceeai 7aloare8 n cazul
depirii domeniului admisibil. De e+emplu8 sec7ena1
mo7 al8 ;120
ne! al
7a lsa re!istrul al nesc&imbat '0#I(8 deoarece 120 i ;120 au aceeai reprezentare
intern.
Instruciunea mul
40
5emnificaia instruciuni1 efectueaz o nmulire fr semn. 4perandul surs
este nmulit cu operandul acumulator. Dac sursa este un octet8 atunci ea este
nmulit cu re!istrul al i rezultatul este depus n re!istrul a+. Dac sursa este un
cu79nt8 atunci ea este nmulit cu re!istrul a+ i rezultatul este depus n re!itrii d+ i
a+.
5inta+a1 mul <surs>
+emple1
mul cl <este nmulit al cu cl8 iar rezultatul este depus n re!istrul a+
mul Rb+S <este nmulit 7aloarea indicat de re!istrul b+ cu a+8
<iar rezultatul este depus n d+1a+
mul lm <n dependen de dimensiunea locaiei de memorie lm
Instruciunea imul
5emnificaia instruciuni1 similar instruciunii mul. Deosebirea este c
operaia de nmulire se face consider9nd operanzii numere cu semn.
5inta+a1 imul <surs>
:mprirea presupune c dempritul este pe o lun!ime dubl dec9t
mpritorul. -rin mprire se obin c9tul i restul8 de lun!ime e!al cu a
mpritorului.
Instruciunea div
5emnificaia instruciuni1 efectueaz o mprire fr semn. "cumulatorul i
'e7entual( e+tensia sunt mprite la operandul surs. Dac sursa este un octet8 atunci
coninutul re!istrului a+ este mprit la operandul surs8 iar c9tul este depus n
re!istrul al i restul n re!istrul a&. Dac sursa este un cu79nt 7aloarea re!itrilor d+1a+
se mparte la surs8 iar c9tul este depus n re!istrul a+ i restul n d+.
5inta+a1 div <surs>
+emple1
di7 cl <este mprit 7aloarea re!istrului a+ la 7aloarea re!istrului cl8
<iar c9tul este depus n al8 restul n a&
di7 lm <n dependen de dimensiunea locaiei de memorie lm
Instruciunea idiv
41
5emnificaia instruciuni1 similar cu instruciunea DIW. Deosebirea este c
operaia de mprire se face consider9nd operanzii numere cu semn.
5inta+a1 idiv <surs>
:mprirea poate conduce la depiri. :n situaia n care c9tul rezult mai mare
dec9t 7aloarea ma+im reprezentat pe 08 respecti7 12 bii8 sau dac mpritorul este
#8 rezultatele sunt nedefinite i se !enereaz o ntrerupere soft pe ni7elul # 'Di7ide
47erfloU ; Depire la mprire(.
De e+emplu8 n sec7ena1
mo7 a+8 1###
mo7 bl82
di7 bl
c9tul ar trebui s fie ,##8 7aloare care nu se poate reprezenta pe un octet.
:ntreruperea oprete de obicei pro!ramul e+ecutabil i afieaz un mesaj de eroare la
consol.
De e+emplu8 n sec7ena1
mo7 a+8 )##
mo7 bl8 2
idi7 bl
c9tul ar trebui s rezulte 2##8 7aloare care nu se poate reprezenta ca numr cu semn pe
un octet. Ca atare8 7a aprea o ntrerupere.
Instruciunea cbH
5emnificaia instruciuni1 daca 'al.( E #8 atunci 'a&( #8 n caz contrar 'a&(
18 adic se e+tinde bitul de semn din al la ntre! re!istrul a&.
5inta+a1 cbH
Instruciunea cHd
5emnificaia instruciuni1 daca 'a+1,( E #8 atunci 'd+( #8 n caz contrar 'd+(
18 adic se e+tinde bitul de semn din a+ la ntre! re!istrul d+.
5inta+a1 cHd
Deoarece limbajul assembler nu posed mijloarce de afiare i introducere a
numerilor este necesar de a crea sec7ene de pro!ram ce transform informaia
42
simbolic n informaie numeric. =n e+emplu de astfel de sec7en este descris n
continuare1
.data
s db 2 dup'K K(8 K[ K <7ariabila ce definete un ir de 2 caractere iniializate
<cu codul spaiului liber
.code
.....
mo7 a+8 TnumarD <numrul este cu semn sau fr semn
pus& a+ <pstrarea 7alorii iniiale a re!istrului a+
mo7 si8 1# <numrul se 7a mpari consecuti7 la 1#
mo7 di8 , <poziionarea pe ultima poziie a irului n care
<7a fi pus rezultatul
mo7 d+8# <d+E# deoarece d+1a+Csi
cmp a+8 # <7erific semnul numrului
j!e m <salt la m dac numrul este poziti7
ne! a+ <daca numrul e ne!ati7 se ia 7aloarea absoluta
m1 di7 si <d+1a+C1#
add dl8 3#& <restul se afl n re!istrul dl i se transform cifra n simbol
mo7 sRdiS8 dl <codurile cifrelor se pun n ir de la dreapta la st9n!a
+or d+8d+ <d+E#
dec di <poziionare pe baitul din st9n!a
cmp a+8 # <7erific dac sunt transformate toate simbolurile
jne m <mprirea la 1# are loc p9n c9nd a+ nu e #
pop a+ <se e+tra!e din sti7a 7aloarea iniial a re!istrului a+
cmp a+8# <7erific semnul numrului iniial
j!e m1
mo7 sRdiS8 J;J <daca numarul a fost ne!ati7 se pune K;K n faa numrului
m11 mo7 a&8% <afisarea numarului ca informaie simbolic
lea d+8 s
int 21&
43
Exemplu
5 se calculeze 7aloarea e+presiei ''12#M1,(C,;12(A12 '7alorile 7ariabilelor sunt
definite n te+tul surs(
.data
a db 12#
b db 1,
c db ,
d db 12
e db 12
.code
...
mo7 al8a <alE12#
add al8 b <alE12#M1,
mo7 a&8 #
di7 c <alE'12#M1,(C,
sub al8 d <alE'12#M1,(C,;12
mo7 a&8#
mul e <a+E''12#M1,(C,;12(A12
...
=rmtoarea sec7en de pro!ram realizeaz introducerea unui numr de la tastatur1
...
.data
n dU # <locaie de memorie n care 7a fi pstrat numrul
introdus
mult1# dU 1 <puterile lui 1#
ten dU 1#
sir db 0 dup 'Y(
.code
...
mo7 a&8 3f& <introducerea numrului
mo7 b+8 # <corect pe doi octei
lea d+8 sir
int 21& <a+ conine numrul simbolurilor introduse M2 'nter(
mo7 di8a+
sub di83 <di ; indicele ultimei cifre
a1 mo7 al8 sirRdiS <se pune elementul n al ' iniial ; codul ultimei cifre(
sub al8 3#& <se transform simbolul n cifr
mo7 a&8 # <deoarece numrul este mai mare ca #
44
mul mult1# <se nmulete cu 1## E1
dec di <poziionare pe penultimul
add n8 a+ <nEc#A1## Mc1A1#1 M?
mo7 a+8 ten <n a+ 7aloarea 1#
mul mult1#
mo7 mult1#8 a+ <n locatia de memorie mult1# ; puterile lui 1#
cmp di8# <dac nu e indicele primul simbol introdus
jne a
cmp sirRdiS8^;^ <se compara primul simbol al irului cu semnul ^;^
je m3 <dac e ^;^ salt la m38 adic numrul este ne!ati7
mo7 al8 sirRdiS <n caz contrar se nmulete cu 1# la puterea ordinara
sub al8 3#& <ultimul element din ir se transform n cifr
mo7 a&8 #
mul mult1#
add n8a+ <n locaia de memorie n N numrul poziti7 introdus
jmp m)
m31 ne! n <n locaia de memorie n N numrul ne!ati7 introdus
m)1 ...
Sarcini de lucru
a. -alcularea +al'rii unei expresii +ariabilele cr'ra sunt numere !r semn
de!inite n pr'gram
1. '1.#;12(C2M12A,
2. '),;'23;2(A2(C.
3. 0#M'),;,(A3M),C%
). 3)A2;'1,M%(C3
,. '21M.(C1);)A,
2. '01;2#(C.M3A.
.. '1.M12(C3M12A,
0. '.M'23;2(A2(C.
%. 0M'1);,(A3M),C,
1#.2)A3;'),M10(C3
11.')1;2#(C3;)M3A,
12.')2M1#(C2;1#A,
13.'0.;12M.(C3;12A,
1).'03;2#(C3M);3A,
1,.3#M'),;,M2(C3M2A3
12.%#;')1;,(A3C2
45
b. -alcularea +al'rii unei expresii +al'rile +ariabilel'r cr'ra sunt intr'duse de la
tastatur
1.
c a c b a A C ( ' + +
a ; define b>te8 b8 c8 d ; define Uord
2.
d c b a A ( C ' +
a8 b8 c ; define b>te8 d ; define Uord
3.
d c b a A ( A 2 A 1# '
a8 b ; define b>te8 c8 d ; define Uord
).
( C' A C b c d c b a + +
b8 c8 d; define b>te8 a ; define Uord
,.
( C' A 1# C' A 1# d c b b a a + + +
a8 b8 c ; define b>te8 d ; define Uord
2.
( ' A A A 2# b a c d b a + +
a8 b ; define b>te8 c8 d ; define Uord
..
c a d c b a + + A C ( '
a ; define b>te8 b8 c8 d ; define Uord
0.
d c c a b a c A ( C' ( ' + +
d ; define b>te8 b8 c8 a ; define Uord
%.
d d c b a C ( A A ' +
a8 d ; define b>te8 b8 c ; define Uord
1#.
c d b c a A ( A A ' +
a8 b8 d; define b>te8 c ; define Uord
11.
d d c c b a C ( A A A ' +
b ; define b>te8 a8 c8d ; define Uord
12.
( ' A ( A A ' b a d c b a +
a8 b ; define b>te8 c8 d ; define Uord
13.
d b a c a + ( ' A A
a8 b8 c ; define b>te8 d ; define Uord
1).
( C' A A b a a c b d + +
c ; define b>te8 b8 a8 d ; define Uord
1,.
c d b a A A 13 A 2, +
c8 b ; define b>te8 a8 d ; define Uord
12.
d c b a c a A C ( ' A +
c8 b8 d; define b>te8 a ; define Uord
46
;roceduri. Cicluri
Obiectivele lucrrii
3ucrarea urmrete nsuirea principiilor de baz a funcionrii microprocesorului
i memoriei n timpul rulrii ciclurilor8 acumularea abilitilor de utilizare a
instruciunilor de or!anizare a ciclurilor8 acumularea cunotinelor i cunoaterea
particularitilor de prelucrarea a datelor8 instruciunilor8 modurilor de adresare a
datelor la or!anizarea ciclurilor8 nsuirea principiilor de funcionare a memoriei i
microprocesorului n e+ecuia salturilor ntr;un se!ment i ntre se!mente'apel de
procedur( i de asemenea particularitile de utilizare a sti7ei n rularea apelurilor de
subpro!rame.
Breviar teoretic
2nstruciuni de organizare a ciclurilor
Ciclurile sunt folosite pentru repetarea multipl a uneia sau mai multe instruciuni
sau proceduri. Ciclurile pot fi !enerate utiliz9nd instruciunile de salt condiionat sau
necondiionat cercetate n lucrarea de laborator L28 dar i prin intermediul unor
instruciuni speciale8 formatul crora este reprezentat m tabelul de mai jos1
Denumirea
instruciunii
+nemonica i
sinta"a instruciunii
Condiia de control
Cicleaz loop label 'ec+C c+( TD #
Cicleaz c9t timp e # sau
e e!al
loopzC label 'ec+C c+( TD # hih zf E 1
Cicleaz c9t timp nu e #
sau nu e e!al
loopnzC loopne label 'ec+C c+( TD # hih zfE#
5alt dup c+ jc+z label 'ec+C c+( E #
/abel 1. *ormatul instruciunilor de or!anizare a ciclurilor
Instruciunea loop i e+tensiile ei permit or!anizarea ciclurilor compatibile cu
ciclurile for din limbajele de pro!ramare de ni7el nalt.
+cepie face instruciunea jc"z8 care nu modific ec+Cc+8 restul instruciunilor
la rulare efectueaz scderea unei uniti din ec+Cc+8 ulterior dac se satisface condiia
de control8 eipCip se majoreaz cu un deplasament de 0 bii cu semn8 n caz contrar ip
nu se modific i pro!ramul ruleaz n continuare.
47
Instruciunile de ciclare pot transfera controlul la o locaie 'int( aflat n
inter7alul R;120812.S de octei fa de ele8 deci realizeaz numai transferuri de tip
s&ort. "ceste instruciuni nu modific nici un indicator.
-pel de procedur
;rocedura F reprezint un set de instruciuni utilizate pentru soluionarea unei
probleme concrete i are posibilitatea de a obine dirijarea dintr;un punct de apel al
unei probleme de ni7el mult mai nalt i redarea dirijrii e+act n acel loc.
-rocedurile se definesc n te+tul surs dup ablonul1
numeXproc proc R farjnearS
?. <corpul procedurii
ret
numeXproc endp
unde numeXproc este numele procedurii8 iar parametrii far sau near 'opionali( indic
tipul procedurii.
-rocedurile sunt de dou tipuri1 far i near. 4 procedur far poate fi apelat i
din alte se!mente de cod dec9t cel n care este definit8 pe c9nd o procedur near poate
fi apelat numai din se!mentul de cod n care este definit.
Dac se omit parametrii far sau near8 tipul procedurii este dedus din directi7ele
simplificate de definire a se!mentelor 'modelul de memorie folosit(.
4 procedur poate fi scris n orice parte de pro!ram8 ns este necesar ca s nu se
e+ecute nt9mpltor fiindc n aa caz procesorul 7a e+ecuta instruciunile procedurii
ca parte component a pro!ramului principal.
-rocedura poate fi scris1
1. 3a nceput de pro!ram 'p9n la prima instruciune(<
cXs se!ment
assume cs1cXs
pr1 proc near
I
ret
48
p1 endp
be!in1 <nceput de pro!ram
?
end be!in
2. 3a sf9rit de pro!ram 'dup ieirea standard din pro!ram(<
cXs se!ment
assume cs1cXs
be!in1
?
mo7 a&8 )c&
int 21& <finisare de pro!ram i transmiterea dirijrii 54
p1 proc near
I
ret
p1 endp
cXs ends
end be!in
3. :n interiorul pro!ramului principal sau altei proceduri 'este necesar de a
utiliza instruciunea de salt necondiionat jmp(<
cXs se!ment
assume cs1cXs
be%in6
?
jmp m1
p1 proc near
?
ret
p1 endp
m11 ?
49
mo7 a&8 )c&
int 21& < finisare de pro!ram i transmiterea dirijrii 54
cXs ends
end be!in
4. :n alt modul.
Instruciunea call (.pel de pr'cedur)realizeaz apelul procedurii, sal79nd n
sti7 contorul pro!ram curent. :n timpul e+ecuiei acestei instruciuni are loc
transmiterea dirijrii la adresa cu numele procedurii.
-oate a7ea una din formele1
c call numeXproc
c call far ptr numeXproc
c call near ptr numeXproc
:n primul caz8 tipul apelului este dedus din tipul procedurii8 iar n celelalte8 este
specificat e+plicit 'far sau near(.
/ipul apelului trebuie s coincid cu tipul procedurii i cu tipul instruciunilor
Return din interiorul procedurii8 altfel se ajun!e la funcionri defectuoase ale
pro!ramului.
Instruciunea ret 'Return( pro7oac re7enirea n pro!ramul apelant. -utem scrie o
instruciune Return e+plicit8 n formele retn 'Return Lear( sau retf 'Return *ar(8 sau
ret pur i simplu8 caz n care tipul instruciunii Return este dedus din tipul procedurii
'far sau near(.
ste important de reinut c instruciunile call i ret sunt instruciuni perec&e1 ele
sal7eaz8 respecti7 refac adresa de re7enire. -entru ca mecanismul de apelCre7enire s
funcioneze corect8 trebuie ndeplinite condiiile1
c tipul instruciunii call i tipul instruciunii ret trebuie s coincid 'far sau near(<
c re!istrul sp din momentul e+ecuiei instruciunii ret s aib aceeai 7aloare ca la
intrarea n procedur 'sa indice adresa de re7enire(<
c adresa de re7enire sal7at n sti7 s nu fi fost modificat de ctre procedur.
:ncrcarea unora din cele trei condiii de mai sus constituie o eroare frec7ent de
50
pro!ramare. :n astfel de cazuri8 funcionarea pro!ramului este compromis8 deoarece
se plaseaz n cs iCsau ip o adres incorect8 unde probabil nici nu e+ist 7reun
pro!ram cu sens. "cest tip de eroare se numete 88e+ecuie de dateK8 adic procesorul
ajun!e s e+ecute nu instruciuni cu sens 'definite intr;un se!ment de cod(8 ci o zon
oarecare de memorie 'date(.
Recunoaterea acestei erori este destul de uoar1 se bloc&eaz tastatura8 pe
ecranul calculatorului apar tot felul de caractere ciudate8 difuzorul ncepe s iuie etc.
5in!ura soluie este n acest caz un reset !eneral al calculatorului.
Exemplu
5 se scrie un pro!ram ce calculeaz 7aloarea urmtoarei e+presii
>E
=
+
1#
,
12
i
i
<,M2M.M0M%M1#M12
mo7 c+82 <numrul iteraiilor '1#;,M1(
mo7 b+8 # <acumulator pentru rezultat
mo7 a+8, <7aloarea iniial iE,
m1 add b+8a+ <b+E,M2M?
inc a+ <incrementarea indicelui i
loop m <dac numrul iteraiilor este mai mare ca zero
<salt la etic&eta m
add b+8 12 <adunm 12 la suma obinut
Sarcini de lucru
5e 7a studia e+emplul prezentat.
5e 7a scrie un pro!ram ce calculeaz 7aloarea urmtoarei e+presii folosind
proceduri1
1. >E
=
1,
1
2 A
i
i
2. >E
=

.
1
2
i
i
9. >E
)
1
2 k i
10.>E
3
1
2 A i
51
3. >E
=
1.
,
3 k
i
i
4. >E
=
1#
0
2 A
i
i
5. >E
=
2#
#
2 C
i
i
6. >E
=
+
1,
1
2
i
i
7. >E
=
,
,
A
i
i i
8. >E
+
,
1
2 i
11.>E
+
0
1
) i
12.>E
+
0
1
. i
13.>E
=
+
2#
,
2 C
i
i i
14.>E
=
+
2#
3
2 k
i
i i
15.>E
=

1.
3
(( 2 ' A 2 '
i
i

16.>E
=
+
1#
2
( 3 C ( 1 ''
i
i
52
;relucrarea tablourilor simbolice unidimensionale
Obiectivele lucrrii
3ucrarea urmrete familiarizarea studenilor cu operaiile cu iruri pe bii.
Breviar teoretic
Instruciunile pe iruri pot opera asupra unor iruri de ma+im 2)Fo. Instruciunile
pot fi precedate de un prefi+ care permite repetarea lor de ctre partea de &ardUare8
permi9nd prelucrarea rapid a irurilor lun!i.
4 instruciune pe iruri poate a7ea operand destinaie8 operand surs sau am9ndoi
operanzii. Implicit8 irul surs se afl n se!mentul de date curent. *olosind un prefi+
de se!ment8 se poate specifica alt se!ment pentru irul surs. -entru operandul
destinaie8 implicit se consider e+trase!mentul curent. :nainte de nceputul e+ecuiei
operaiei se 7erific tipul de elemente al irului 'octei sau cu7inte(. Re!istrul 5I
're!istrul surs inde+( este folosit ca deplasament pentru a adresa elementul curent al
irului surs8 iar coninutul re!istrului DI 're!istrul destinaie inde+( este folosit ca
deplasament al elementului curent n irul destinaie.
"ceste re!istre trebuie iniializate pentru a adresa irurile sursaCdestinaie nainte
de e+ecuia instruciunilor lds' les' lea.
Instruciunile pe iruri actualizeaz automat re!istrele 5I8 DI nainte de
prelucrarea urmtorului element al irului. n funcie de 7aloarea indicatorului de
direcie df8 re!istrele de inde+ se autoincrementeaz 'dfE#( sau se autodecrementeaz
'dfE1(.
Dac elementele irului sunt octei8 si i di sunt modificai cu 1 dup fiecare
operaie sau cu 2 dac elementele sunt cu7inte.
Dac se utilizeaz prefi+ul de repetare8 contorul pentru numrul de repetri este
inut n re!istru c+. Dup fiecare instruciune8 c+ 7a fi decrementat cu 1. Dac c+E18
instruciunea pe iruri nu se 7a mai e+ecuta i se pred controlul instruciunii
urmtoare.
53
Expresiile rep; repe; repz; repne 3i repnz
+presiile rep8 repe8 repz8 repne8 repnz 'R-eat8 R-eat U&ile Oual8 R-eat
U&ile @ero8 R-eat U&ile Lot Oual8 R-eat U&ile Lot @ero( sunt mnemonice
folosite pentru dou forme ale octetului de prefi+ ale instruciunilor pe iruri. 5unt
utilizate mnemonice diferite pentru a mri claritatea pro!ramului.
+presia rep este folosit mpreun cu instruciunile mo7s i stos i este
interpretat c repet pan la sf9ritul irului 'c+ diferit de #(.
+presiile repe i repz sunt identice i sunt folosite cu instruciunile cmps i scas.
n acest caz interpretarea se face cat timp indicatorul zf este poziionat la 1. +presiile
repne i repnz sunt identice8 cu deosebirea c repetarea se face c9t timp indicatorul zf
este poziionat la #.
Instruciunile cu repetare sunt ntreruptibile. -rocesorul 7a recunoate o
ntrerupere naintea prelucrrii unui nou element al irului.
Instruciunea cld
Instruciunea cld 'C3ear Direction fla!( poziioneaz indicatorul de direcie 'df(
la # pentru ca instruciunile pe iruri s autoincrementeze re!istrele inde+ si iCsau di.
Instruciunea cld nu afecteaz ceilali indicatori.
5inta+a1 cld
Instruciunea std
Instruciunea std '5e/ Direction fla!( poziioneaz indicatorul de direcie 'df( la 1
pentru ca instruciunile pe iruri s autodecrementeze re!istrele inde+ si iCsau di.
Instruciunea std nu afecteaz ceilali indicatori.
5inta+a1 std
Instruciunea movs
Instruciunea mo7s '$4We 5trin!( transfer un octet sau un cu79nt din irul surs
'adresat de si( n irul destinaie 'adresat de di( i actualizeaz si i di s adreseze
urmtorul element al irului. n cazul n care se utilizeaz i un prefi+ de repetare8
instruciunea mo7s poate fi folosit pentru mutarea unor blocuri de memorie.
5inta+a1 movs <3ir5destinaie=; <3ir5surs=
54
In cazul n care utilizm instruciunea $4W58 asamblorul este cel care detecteaz
tipul operanzilor an!ajai n operaiunea de transfer. -ot fi utilizate i instruciunile fr
operanzi mo7sb8 mo7sU care specific respecti7 transfer pe octet 8 pe cu79nt.
Instruciunea cmps
Instruciunea cmps 'Co$-are 5trin!( scade cu79ntul 'sau octetul( destinaie8
adresat de di8 din cu79ntul 'sau octetul( surs8 adresat de si. Instruciunea cmps
afecteaz indicatorii dar nu altereaz nici un operand i actualizeaz si i di s adreseze
urmtorul element. =tilizat mpreun cu prefi+ele de repetare condiionate8 se poate
e+ecuta pan c9nd este satisfcut o anumit condiie.
5inta+a1
cmps <irdestinaie>'< irsursa>
cmpsb <comparare pe un octet
cmpsH <comparare pe un cu79nt
Instruciunea scas
Instruciunea scas '5C"n 5trin!( scade elementul din irul destinaie 'octet sau
cu79nt( adresat de di din coninutul re!istrului al sau a+8 actualizeaz indicatorii8 dar
nu modific coninutul celor doi operanzi. n urma instruciunii este modificat i di
pentru a adresa urmtorul element al irului i sunt actualizai indicatorii af8 cf8 of8 pf8
sf8 zf pentru a reflecta relaia dintre elementul irului i al 'sau a+(. Instruciunea scas
poate fi utilizat cu prefi+ele de repetare condiionate pentru a compara elementele
irului cu al 'sau a+( pan c9nd este satisfcut o anumit condiie.
5inta+a1
scas irsursa
scasb @cutare pe octet
scasH @cutare pe cu79nt
Instruciunea lods
Instruciunea lods '34ad 5trin!( transfer un element 'octet sau cu79nt( al
irului surs8 adresat de si8 n re!istrul al 'sau a+( i actualizeaz re!istrul si pentru a
adresa urmtorul element al irului. n cazul instruciunii lods nu are rost folosirea
prefi+elor de repetare pentru a ncrca re!istrul al 'sau a+( succesi7 deoarece se
55
pstreaz de fapt doar ultima 7aloare.
5inta+a1
lods <irsursa >
lodsb @transfer pe octet
lodsH @transfer pe cu79nt
Instruciunea stos
Instruciunea stos '5/4re 5trin!( transfer un octet sau un cu79nt din re!istrul al
n elementul irului destinaie8 adresat de di8 i actualizeaz di s adreseze urmtorul
element. =tiliz9nd prefi+ele de repetare aceast instruciune se poate folosi pentru
iniializarea unui ir cu o 7aloare constant.
5inta+a1
stos <irdestinaie >
stosb @transfer pe octet
stosH @transfer pe cu79nt
Exemplu
5 se efectueze o comparare le+ico!rafic a dou iruri introduse de la tastatur.
5 se afieze mesajul /0es*8 dac irurile coincid i /1'* n caz contrar.
.data
str1 db 1## dup'Y( <alocarea memoriei pentru primul sir
str2 db 1## dup'^[^( <alocarea memoriei pentru al doilea sir
len1 dU Y
len2 dU Y
...
.code
mo7 a+8Bdata <iniializarea re!istrelor ds i es
mo7 ds8a+
mo7 es8a+
<introducerea irurilor
<lun!imile irurilor introduse sunt pstrate n locaiile de memorie len1 i len2
...
lea di8str2 <n di N adresa irului surs
lea si8str1 <n si N adresa irului destinaie
... <introducerea irului cu ajutorul funcieii 3f&
cld <direcia prelucrrii irului N de la st9n!a la dreapta
mo7 c+8 len1
56
cmp c+8len2 <comparm lun!imile irurilor
jne no <dac lun!imile nu coincid 8 salt la etic&eta n'
repe cmpsb <compararea irurilor
jne no <dac nu coincid 8 salt la etic&eta n'
<afiarea mesajului JgesK
?
jmp finis&
no1 < afiarea mesajului JLoK
?
finis&1 ?
Sarcini de lucru
1. 5 se nlocuiasc toate literele Z"\ cu Zl\.
2. 5 se determine dac irul introdus este un numr ntre!.
3. 5 se !seasc primul simbol ZA\ i s se nlocuiasc cu simbolul Zm\.
4. 5 se !seasc ultimul simbol ZY\ i s se nlocuiasc cu simbolul Ze\.
5. 5 se calculeze numrul cu7intelor 'cu7intele sunt separate printr;un spaiu(.
6. 5 se elimine spaiile libere de prisos.
7. 5 se !seasc cu7intele mai lun!i dec9t numrul dat 'cu7intele sunt separate
printr;un spaiu liber(.
8. 5 se !seasc poziia ultimei 7ir!ule i s se nlocuiasc cu primul simbol din ir
diferit de spaiu liber.
9. -entru toate cu7intele ce au terminaia Jin!K s se nlocuiasc cu terminaia JedK
'cu7intele sunt separate printr;un spaiu liber(.
10. 5 se inlocuiasc toate simbolurile ZN\8 predecesoare primului simbol ZM\ cu
simbolul ZA\.
11. 5 se determine numrul apariiei fiecrei litere ntr;un ir.
12. 5 se inlocuiasc fiecare punct Z.\ cu trei puncte J?K.
13. 5 se !seasc toate cu7intele n care litera Za\ se nt9lnete mai mult de dou ori
'cu7intele sunt separate printr;un spaiu liber(.
14. 5 se !seasc toate cu7intele cu lun!imea mai mic dec9t . 'cu7intele sunt
separate printr;un spaiu liber(.
15. 5 se determine dac cu7intele unei propoziii sunt aranjate n ordine alfabetic
'cu7intele sunt separate printr;un spaiu liber(.
16. 5 se determine dac cu79ntul urmtor ncepe cu ultima liter a cu79ntului
precedent 'cu7intele sunt separate printr;un spaiu liber(.
57
+acrodefiniii. Jablouri numerice
Obiectivele lucrrii
"ceast lucrare are ca scop familiarizarea cu princiipiile de descriere a
macroinstruciunilor8 nsuirea te&nicii de utilizare a macroinstruciunilor i nsuirea
te&nolo!iilor de prelucrare a tablourilor numerice
Breviar teoretic
1acrodefiniii
=nul dinte mijloacele puternice ale limbajului assembler sunt macrodefiniiile.
$acrodefiniie se numete sec7ena de pro!ram cu un nume i care se asambleaz de
fiecare dat8 cnd asamblorul ntlnete acest nume n pro!ram. $acrodefiniia se
ncepe cu directi7a macro i se termin cu endm.
De e+emplu1 fie descris macrodefiniia putspace8 ce afieaz pe ecran simbolul ZAZ .
putspace macro
mo7 a&81
mo7 dl8 ZAZ
int 21&
endm
:n pro!ram cu7ntul putspace poate fi folosit ca o instruciune i asamblorul 7a
nlocui fiecare astfel de cu7nt cu cele trei instruciuni ce alctuiesc te+tul
macrodefiniiei. $acrodefiniiile pot a7ea i parametri8 deaceia ndependen de
situaie codul introdus 7a fi puin diferit8 de e+emplu1
c&an!eX7ar macro 7ar18 7ar2
pus& 7ar1
pus& 7ar2
pop 7ar1
pop 7ar2
endm
"cum c$ange2+ar poate fi utilizat pentru sc&imbarea 7alorilor a dou locaii de
memorie.
4 alt unealt n descrierea macroinstruciunilor este utilizarea directi7elor de
asamblare condiionat. Ca e+emplu s desciem macrodefini ia de nmul ire a
58
re!istrului a+ cu un numr i dac numrul reprezint puterile lui 28 atunci nmul irea
se 7a efectua prin intermediul unei instruc iuni mult mai rapide dec9t mul, i anume
s$l ; deplasare la st9n!a.
fastXmul macro number
if number eO 2
s&l a+8 1 <nmul irea cu 2
elseif number eO )
s&l a+8 2 < nmul irea cu )
elseif number eO 0
s&l a+8 3 < nmul irea cu 0
... <analo!ic p9n la1
elseif number eO 32.20
s&l a+8 1, < nmul irea cu 32.20
else
mo7 d+8 number <nmul irea cu numrul care nu reprezint
mul d+ <puterile lui doi
endif
endm
"ceast macrodefini ie poate fi scris folofind propriet ile deosebite ale
instruc iunii lea8 instruc iuni de deplasare i adunare8 ns i n a a mod este destul de
7oluminoas. -roblema poate fi solu ionat folosind un alt mijloc utilizat n
macrodefini ii8 i anume blocurile repetiti7e.
fastXmulX1 macronumber
iE1
U&ile i le number and i ne # <p9n c9nd i n number i i o #
if number eO i <dac i E number
rept number
s&l a+81 <nmul irea a+ cu 2
number

<cu un number ori
endm
iE# <dac nmul irea a fost efectuat 8
<anulm i
else <dac i o number
iEiA2 <obtinem urmtoarea putere a lui doi
endif
endm
59
if i ne #
mo7 d+8 number < nmul irea cu numrul care nu reprezint
mul d+ < puterile lui doi
endif
endm
3abl'uri numerice
-rin defini ie prin tablou n ele!em un tip de date structurat ce const dintr;un
oarecare numr de elmente de acela i tip.
Descrierea i ini ializarea tabl'ului ntr4un pr'gram
1. lementele tabloului sunt descrise n c9mpul de date i sunt separate prin
7ir!ul. De e+emplu8 descrierea tabloului din cinci elemente dimensiunea
fiecruia e!al cu doi octe i este1
mas1 dU 18 28 38 )8 ,
2. =tilizare operatorului dup. De e+emplu descrierea tabloului din zece elemente
dimensiunea fiecruia e!al cu doi octe i este1
mas2 dU 1# dup 'Y(
3. Ini ializarea elementelor ntr;un ciclu1
mo7 c+8 , <numrul itera iilor n c+
mo7 si8 # <indicele elementului ini ial n si
mo7 a+81 <7aloarea primului element al tabloului
!o1 mo7 mas2RsiS8 a+ <nre!istrarea elementului n tablou
inc si <trecerea la urmtoarea pozi ie a tabloului
inc a+ <incrementarea a+
loop !o <urmtoarea itera ie
.ccesarea elementel'r unui tabl'ului
lementele unui tablou sunt situate n memoria unui calculator n mod succesi7.
-entru a localiza un element este necesar ca s fie adu!at unindice la numele
tabloului. Indicii unui tablou n limbajul assembler sunt simple adrese. numerarea
elementelor unui tablou se ncepe de la zero. De e+emplu8 fie dat urmtorul tablou1
mas dU ,8 38 .8 18 2
60
-entru a scrie sec7en a de pro!ram care pune al treilea element cu 7aloarea ; . n
re!istru d+8 este necesar ca la adresa de baz s adu!m deplasamentul ).
mo7 si8)
mo7 d+8 masRsiS
:n !eneral8 pentru ob inerea adresei unui element din tablou este necesar ca la
adresa de nceput 'de baz( a tabloului s se adau!e produsul dintre indicele
elementului i dimensiunea elementului tabloului1
baza M indice AdimensiuneXelement
-osibilitatea scalrii a aprut n procesoarele Intel8 ncep9nd cu modelul i)02.
"stfel accesul poate fi descris actfel1
mo7 si82
mo7 d+8 masRsiA2S
5calarea este efecti7 numai atunci8 numai c9nd dimensiunea unui tablou este 28 )
sau 0. Dac dimensiunea este alta8 atunci accesul se face n mod obi nuit.
5pera ii tipice cu tabl'u ri
5 analizm un e+emplu. :ntr;un tablou cu date de tip Uord s se efectueze
compararea elementelor cu zero i s se afi eze mesajul corespunztor1
.model small
puts macro s <afi area unui ir pe ecran
mo7 a&8 %
lea d+8 s
int 21&
endm
putc& macro c <afi area unui simbol pe ecran
mo7 a&8 2
mo7 dl8 c
int 21&
endm
prolo! macro <ini ializarea re!istrului ds
mo7 a+8 Bdata
mo7 ds8 a+
endm
epilo! macro <ie irea standard din pro!ram
61
mo7 a&8 )c&
int 21&
endm
.stac] 2)
.data <nceputul se!mentului de date
<te+tele mesajelor
mes1 db JLu este e!al cu zeroeK8 #a&8 #d&8 J[K
mes2 db Jste e!al cu zeroeK8 1#8 138 J[K
mes3 db #a&8 #d&8 Jlementul [K
mas dU ,8 38 #8 .8 18 #8 #8 2 <elementele tabloului
.code
.)02 <directi7a ce permite scalarea i accesarea
<re!istrelor pe 32 bi i
main1
prolo!
+or a+8 a+ <anulm a+
prepare1
mo7 c+8 0 <n c+ N numrul elementelor8 numrul itera iilor
mo7 esi8 # <indicele n esi
compare1
puts mes3 <afi area mesajului pe ecran
mo7 d+8 si
or dl8 3#& <transformarea cifrei n simbol
putc& dl <afi area 7alorii indicelui
mo7 d+8 masResiA2S <elementul tabloului n d+
cmp d+8 # <compararea d+ cu #
je eOual <salt dac e!al
notXeOual1
puts mes1 < afi area mesajului pe ecran
jmp ne+t
eOual1
puts mes2 <afi area mesajului pe ecran
ne+t1
inc esi <indicele urmtorului element
62
dec c+ <decrementare c+
jc+z e+it <dac c+ E # salt la e+it
jmp compare <dac c+ o # urmtoarea itera ie
e+it1
epilo!
end main
Sarcini de lucru
1. *ie +6m7 un tablou numeric unidimensional. 5 se calculeze numrul
elementelor poziti7e i numrul elementelor ne!ati7e
2. *ie . o matrice numeric de dimensiune m p n. 5 se creeze un 7ector de
dimensiune m format din elementele minimale a fiecrei linii.
3. *ie . o matrice numeric de dimensiune m p n. 5 se creeze un 7ector de
dimensiune n format din elementele ma+imale a fiecrei coloane.
4. *ie . o matrice numeric de dimensiune m p n. 5 se !seasc elementele
minimale a fiecrei linii i s se amplaseze n prima coloan8 iar elementele
primei coloane n locul elementelor minimale.
5. *ie . o matrice numeric de dimensiune m p n. 5 se !seasc elementele
ma+imale a fiecrei coloane i s se amplaseze n prima linie8 iar elementele
primei liniii n locul elementelor ma+imale.
6. *ie +6m7 un tablou numeric unidimensional. 5 se calculeze numrul
apari ieii elementului ma+imal.
7. *ie . o matrice de dimensiune m p n. 5 se determine indicele 8 pentru care
linia 8 coincide cu coloana 8.
8. *ie . o matrice numeric de dimensiune m p n. 5 se determine coloana din
elemente mai mici e!ale ca modul dect numrul a dat.
9. *ie +6m7 un tablou numeric unidimensional. 5 se !seasc elementul
minimal dintrte cele poziti7e i elementul ma+imal dintre cele ne!ati7e.
10.*ie . o matrice de dimensiune m p n. 5 se construiasc 7ectorul +
elementele cruia sunt calculate dup formula1 +
i
Ea
i8#
Ma
i8n;1
8 unde iE#818?8m;
1.
11.*ie . o matrice de dimensiune m p n. 5 se construiasc 7ectorul +
elementele cruia sunt calculate dup formula1 +
j
Ea
#8j
Ma
m;18j
8 unde jE#818?8n;
1
12.*ie . o matrice numeric de dimensiune n p n. 5 se construiasc un 7ector
+ elementele cruia reprezint suma elementelor fiecrei linii.
13.*ie . o matrice numeric de dimensiune n p n. 5 se construiasc un 7ector
+ elementele cruia reprezint suma elementelor fiecrei coloane.
63
14.*ie . o matrice numeric de dimensiune n p n. 5 se creeze matricea 9 de
dimensiune n p n elementele creia sunt determinate de re!ulile
9
i8j
E

>
c'ntrar caz n
a dac
( i
1
# 8 #
8
15.*ie . o matrice numeric de dimensiune m p n i 7ectorul + de dimensiunea
n. 5 se nmul easc matricea . cu 7ectorul +.
16.*ie . i 9 dou matrici numerice de dimensiune n p n. 5 se nmul easc
matricea . matricea 9.
64
Jipuri de date comple"e6 structuri i nre%istrri
Obiectivele lucrrii
"ceast lucrare are ca scop familiarizarea i nsu irea descrierii tipurilor de date
comple+e8 nsu irea posibilit ilor a 7ariabilelor de acest tip i formarea abilit ilor de
utilizare a lor
Breviar teoretic
,tructuri
*ormatul unei structuri1
TnumeXstructD struc
<descrierea c9mpurilor 'succesiune de directi7e de definire a datelor8
<pot fi i 7alori ini iale(
TnumeXstructD ends
De e+emplu1
Uor]er struc <informa ie despre colaborator
name db 3# dup 'b b( <nume8 prenume
se+ db bmb <se+ul
position db 3# dup 'b b( <func ia
a!e db 2 dup 'b b( <7rsta
standin! db 2 dup 'b b( <stajiu
salar> db ) dup 'b b( <salariul n lei
birt&date db 0 dup 'b b( <ziua de na tere
Uor]er ends
Denumirile c9mpurilor trebuie s fie unice n cadrul unui fi ier surs. -entru
alocarea i ini ializarea de structuri se utilizeaz urmtoarea form1
TnumeX7arD TnumeXstructD Tlista X7aloriD
unde nume2+ar este un identificator de 7ariabil a structurii date8 iar lista 2+al'ri este
lista 7alorilor ini iale a 7alorilor elementelor structurii separate prin 7ir!ule. Dac lista
este completat par ial8 atunci toate c9mpurile structurii pentru 7ariabila dat se
ini ializeaz cu 7alorile definite ini ial. C9mpurile ce 7or lua 7alori ini iale din
structur se completeaz cu 7ir!ule. Dac nu sunt definite 7alori ini iale este necesar
de a indica paranteze triun!&iulare T D.
65
+emple1
<toate c9mpurile sunt definite
sotr1 Uor]er Tbqosan Lataliab8 ^f^8 ^pro!ramist^8 ^3#^8 ^1#^8 ^120#^8 ^2..1#.,0^D
<c9mpul sexul este ini ializat cu 7aloarea ini ial
sotr2 Uor]er Tb5tepano7 Iurii b8 8 ^in!iner^8 ^30^8 ^2#^8 ^1.,#^8 ^#1.#1.,0^D
<toate c9mpurile sunt ini ializate cu 7alorile definite ini ial
sotr3 Uor]er T D
.ccesarea elementel'r unei structuri
-entru a accesa un c9mp al unei 7ariabile de tip structur se folose te
operatorul Z.\1
adresaX7ar.numeXc9mpXstruct
unde adresaX7ar este un identificator al unei 7ariabile de tip structur sau o adres ce
indic aceast zon de memorie8 iar numeXc9mpXstruct este un nume de c9mp din
structur.
+emplu1
mo7 al8 sotrl.a!e <n re!istru al 7aloarea c9mpului age '7ariabila sotr1(
:nregistrri
Descrierea unei nre!istrri are urmtoarea form sintactic1
TnumeXinre!D record TdescriereaXelementelorD
De e+emplu
rec record i1118 i212Ei18 i3118 i)12E118 i,12E##
sau rec record P
i111
i212E11
i311
i)12E11
i,12E##
Q
Dup semnul \E\ se situiaz un numr cu 7aloare implicit reprezentat n form
binar.
5 definim un e+emplar de nre!istrare
66
rec record i1118 i212E118 i3118 i)12E118 i,12E##
fla! rec Y <semnul ZY\ este folosit n cazul c9nd c9mpurile
<nu trebuie iniializate
Walorile implicite pot fi accepte astfel1
rec record i1118 i212E118 i3118 i)12E118 i,12E##
fla! rec TD <acceptarea 7alorilor implicite
$odificarea 7alorii c9mpului i2 se realizeaz astfel1
rec record i1118 i212E118 i3118 i)12E118 i,12E##
fla! rec T81#8D <modificarea i2
*olosind parantezele fi!urate poate fi efectuat iniializarea c9mpurilor alese.
C9mpurile 7alorile crora nu trebuie modificate pot fi i!norate1
rec record i1118 i212E118 i3118 i)12E118 i,12E##
fla! rec Pi2E1#Q <modificarea i28 fr e7idenierea ordinii celorlalte
<componente ale inre!istrrii
.ccesarea elementel'r unei nregistrri
4peratorul Hidt) se folosete pentru a determina dimensiunea c9mpului unei
nre!istrri sau dimensiunea total a unei nre!istrri1
Uidt& TnumeXc9mpXnre!istrareD 7aloarea operatorului 7a indica dimensiunea
c9mpului nre!istrrii<
Uidt& TnumeXe+emplarXnre!istrareD sau Uidt& TnumeXtipXnre!istrareD
7aloarea operatorului 7a indica dimensiunea nre!istrrii.
De e+emplu1
mo7 al8 Uidt& i2
mo7 a+8 Uidt& rec
4peratorul masK se folosete pentru localizarea biilor unui c9mp al
nre!istrrii. De e+emplu1
mo7 a+8 mas] i3
Reprezentarea lui a+ este urmtoarea1
i1 i2 i3 i) i,
# # 1 # ##
67
# #
-entru e7idenierea unui element al unei nre!istrri este necesar de a realiza
urmtorii pai1
1. 5 se ncarce nre!istrarea ntr;un re!istru.
2. 5 se obin masca elementului corespunztor prin intermediul mas8.
3. 5 se localizeze biii n re!istru folosind masca i instruciunea and.
4. 5 se deplaseze biii elementului spre biii inferiori ai re!istrului folosind
instruciune s$r. Lumrul contorului pentru deplasare se obine folosind
numele elementului nre!istrrii.
:n rezultatul acestor aciuni elementul nre!istrrii 7a fi localizar la nceputul
re!istrului i pot fi efectuate diferite aciuni asupra lui.
3ocalizarea cmpului n nre!istrare se realizeaz astfel1
1. 5 se deplaseze la st9n!a toi biii elementului nre!istrrii8 folosind numele
elementului nre!istrrii n calitate de contor.
2. 5 se pre!teasc nre!istrarea iniial pentru inserarea elementului anul9nd
biii din locul elementului folosind instruciunea and i masca in7ersat a
elementului.
3. 5 se iniializeze 7aloarea re!istrului cu nre!istrarea iniial cu ajutorul
instruciunii 'r.
). rlsh`t
.model small
.stac] 2,2
rec record i1118i212E11.i3118i)12E118i,12E##
.data
fla! rec TD
.code
main1
?
<hruivwt sxiv i) hr rlsh`h
mo7 al8 rec <sxyvzlvy fla! u al
mo7 bl8 mas] i) <u bl N yl`{l i)
and al8 bl <x|}~ihih u`v {xyv i)
68
s&r al8 Uidt& i, <`uhlvy rlsh`tuslux }l uvihwh}~ sxi i,
?
<sxyv`ht sxiv i) u rlsh`t
s&l al8 Uidt& i, <sxyvzlvy i) }l yv`x
mo7 bl8 Rfla!S <sxyvzlvy fla! u bl
mo7 cl8 mas] i) <u cl N yl`{l i)
notcl <h}uvh~vy yl`{~
and bl8 cl <`|x`hih i)
or bl8 al <}lixhih }l rec }xuxv r}lwv}hv sxi i)
mo7 Rfla!S8 bl <`xpl}hih }xuxv r}lwv}hv u fla!
?
;<=<>?@AB>C?DB E<FG<H?<IA@ <JKLJ<AM@ FL=@I@
i ~`l}xu{h r}lwv}h }v{xxxx sxi rlsh`h h`sxitr~v` {xyl}l
5/*I3D ` `h}l{`h`xy1
5/*I3D hyXivyv}lXrlsh`l shvy}h{8 vh`Xh`xw}h{
i u|x{h r}lwv}h }v{xxxx sxi rlsh`h h`sxitr~v` {xyl}l
G/*I3D ` `h}l{`h`xy1
G/*I3D hyXivyv}lXrlsh`l vh`Xshvy}h{8 h`xw}h{
l``yxhy shyv h`sxitrxul}h hp {xyl}1
.model small
.stac] 2,2
rec record 111181212E118131181)12E1181,12E##
.data
fla! rec TD
.code
main1
mo7 a+8Bdata <lv`lh ds
mo7 ds8 a+ <}l `vyv} l}}p
mo7 al8 fla! <sxyvzlvy fla! u al
mo7 bl83 <sxyvzlvy 3 u bl
setfield i, al8 bl <u sxiv i, sxyvzlvy 3 hr bl
?
+or bl8bl <xwhzlvy bl
!etfield i, bl8 al <u bl `whulvy r}lwv}hv sxi i,
69
?
mo7 bl8 1 <sxyvzlvy 1 u bl
setfield i) al8 bl <u sxiv i) sxyvzlvy 1 hr bl
?
70
"-BE*)* O&)R2*OR -S22
71

S-ar putea să vă placă și