Date post: | 25-Feb-2018 |
Category: |
Documents |
Upload: | diana-draghici |
View: | 213 times |
Download: | 0 times |
of 37
7/25/2019 Limbajul_Assembler_-_lectia_2
1/37
Assembl er , l ecti a 2 - Di ver se i nst r ucti uni :~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1) Regi st r i i pr ocesor ul ui ( cei cu "E" sunt l a 386+) ( r ecapi t ul ar e) :
- gener al pur pose r egi st er s: - segment r egi st er s:EAX, AX, AL, AH - accumul at or CS - code segmentEBX, BX, BL, BH - base DS - dat a segmentECX, CX, CL, CH - count SS - st ack segmentEDX, DX, DL, DH - data ES - ext r a segment
FS ( 386+) , GS( 386+)
- poi nt er r egi sters: - i ndex r egi sters:ESP, SP - st ack poi nt er ESI , SI - sour ce i ndexEBP, BP - base poi nt er EDI , DI - dest i nat i on i ndex
- i nstr uct i on poi nt er: EI P, I P
- f l ags regi ster : | - - | - - | - - | - - | OF| DF| I F| TF| SF| ZF| - - | AF| - - | PF| - - | CF|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -15 0
CF - car r y, PF - par i t y, AF - auxi l i ar y f l ag, ZF - zer o, SF -s i gn,
TF - t r ace, I F - i nt er r upt , DF - di r ect i on, OF - over f l ow
2) I nstr uct i uni ref er i t oare l a regi str ul de f l aguri ( recapi t ul are) :
l ahf ; copi aza i n AH oct et ul l ow al r eg. de f l agur isahf ; copi aza i n oct et ul l ow al r eg. de f l agur i pe AH
pushf ; sal veaza i n st i va ( push) regi st r ul de f l agur ipopf ; i ncar ca di n st i va ( pop) r egi st r ul de f l agur i
3) I nst r ucti uni de set at / st er s f l agur i i ndi vi dual e ( nu au oper anzi ) :
STC ( f ace CF: =1) , CLC ( f ace CF: =0) , CMC ( f ace CF: =1- CF) ,STD ( f ace DF: =1) , CLD ( f ace DF: =0) ,STI ( f ace I F: =1) , CLI ( f ace I F: =0)
Obs: pt . r estul f l agur i l or nu avem i nstr ucti uni de set at / ster sexpl i ci te;
put em f ace ar t i f i ci i , de ex. put em f ace AF: =1 execut and:
mov ah, 10h ; bi t ul 4 di n AH est e 1 ( si r est ul 0)sahf ; bi t ul 4 di n r eg. de f l agur i , i . e. AF, este 1;
; r est ul devi n i nsa 0
sau mai el egant ( f ar a a al t er a al t e f l agur i ) :
l ahf ; i ncar c f l agur i l e i n AHor ah, 10h ; AH: =AH 0R 10h ( bi t ul 4 di n ah devi ne 1, r est ul r aman
l a f el )sahf ; sal vez AH i n f l agur i
Ment i onam ca i nst r . "MOV" , "XCHG" , "LAHF", "LEA" , " LDS" , "LEs" ,"PUSH" ,
7/25/2019 Limbajul_Assembler_-_lectia_2
2/37
"POP" ( pr ezent at e i n l ect i a 1) nu af ect eaza f l agur i l e.
I n cel e ce ur meaza vom not a f l agur i l e modi f i cat e de o i nst r uct i une
ast f el :ODI TSZAPC ==> i nseamna: CF nedef i ni t , PF af ect at , AF devi ne 1, ZFdevi ne 0
01XU
4) I nstr ucti uni ar i t met i ce pent r u i nt r egi :
I nst r uct i uni l e de i ncr ement ar e/ decrement ar e ( "d" poat e f i r eg. sau di nmem. ) :
I NC d ; ef ect : [ d] : = [ d] +1 si nu af ect eaza f l agur i l eDEC d ; ef ect : [ d] : = [ d] - 1 si af ect eaza: ODI TSZAPC
; X XXXXX
; ( pr act i c i nsa, pe ex. si mpl e amconst atat ca "DEC" nuaf ect eaza CF)
I nst r uct i uni l e adi t i ve sunt de f orma "mnemoni c dest i nat i e, sur sa", unde"dest i nat i e" poat e f i r egi st r u sau di n memor i e, "sur sa" poat e f ii medi at ,r egi st r u sau memori e; oper anzi i nu pot f i ambi i di n memori e si t r ebui esaai be aceeasi di mensi une; af ect eaza ODI TSZAPC
X XXXXXADD s, d ; f ace [ s] : = [ s] + [ d]ADC s, d ; f ace [ s] : = [ s] + [ d] + CFSUB s, d ; f ace [ s] : = [ s] - [ d]
SBB s, d ; f ace [ s] : = [ s] - [ d] - CF
Toat e i nst r uct i uni l e de mai sus set eaza CF=1 daca ar e l oct r ansport / i mpr umutl a bi t ul cel mai semni f i cat i v; "ADC" si "SBB" f ol osesc i n cal cul ar ear ezul t at ul ui pe CF pr oveni t de l a i nst r ucti uni l e ant er i oar e ( sigenereaza unnou CF=0 sau CF=1) .Notam ca i nt r e "I NC d" si "ADD d, 1" exi st a di f er ent a i mport ant a ca
pr i manu af eceaza CF - ast f el , put emaduna el ement el e unui vect or ( cu "ADD")f ar aca i ncrement ar ea i ndi cel ui ( cu "I NC") sa af ect eze tr anspor t ul pr odus deel e.
Exempl ul 1 ( l a rul ar ea sub TD se vor ur mar i r egi st i i si f l agur i l e) :~~~~~~~~~~. model t i ny. stack. dat a. codes ta r t :
mov ax, 01f 2hadd al , 0ch ; r ezul t a AL=f eh, CF=0 ( nu avem t r anspor t di n b7 al l ui
AL)add al , 03h ; r ez. AL=01h, CF=1, dar AX=0101h ( t r ansp. di n AL nu a mers
i n AH)
7/25/2019 Limbajul_Assembler_-_lectia_2
3/37
adc al , 05h ; r ez. AL=07h ( vechi ul AL + 05h + vechi ul CF) , i ar noulCF=0
sub al , 05h ; r ez. AL=02h, CF=0 ( nu avemi mpr umut l a b7 al l ui AL)
sub al , 03h ; r ez. AL=FFh, CF=1 dar AX=01FFh ( i mpr . pt . AL nu s- a l uatdi n AH)sbb al , 0f f h ; r ez. AL=FFh, adi ca f f h( vechi ul AL)- f f h- 1( vechi ul CF),
; si cum am f acut i ar i mpr umut pt . b7, noul CF=1;; i n i nstr . am scr i s "0f f h" deoar ece daca am f i z i s
" f fh "; ar f i dat er r . l a compi l ar e - "f f h" e un
i dent i f i cator s i; ar f i caut at o var i abi l a numi t a "f f h"
mov ax, 01f eh ; "MOV" nu af ect eaza f l aguri l e deci CF r amane 1i nc al ; r ez. AL=f f h, CF=1 ( nu avem t r ansp. dar "I NC" nu
af ect . f l agur i l e; deci CF ramane 1 ca i nai nte)
i nc al ; r ez. AL=00h, AX=0100h ( t r ansport ul nu s- a t r ansmi s i n
AH) ,; CF=1( " I NC"nu af ect eaza f l agur i l e ci CF a ramas 1
di nai nt e)i nc al ; r ez. AL=01h, CF=1 ( r amas di nai nt e)dec al ; r ez. AL=00h, CF=1 ( n- avemi mpr umut pt . b7 di n AL dar
"DEC"; nu af ect eaza CF si r amane 1 di nai nt e)
dec al ; r ez. AL=f f h, AX=01f f h ( i mpr umut ul pt . AL nu s- a l uat) ,CF=1
; ( am avut i mprumut pt . b7 di n AL dar CF=1 pent r u caasa a
; r amas di nai nt e, deoarece "DEC" nu af ecteaza CF)mov ax, 4c00h
i nt 21hend st ar t
I nst r uct i uni l e "ADC" si "SBB" f ol osesc pent r u a aduna/ scadea numer ei nt regide mai mul t i oct et i - se aduna/ scad byt e cu byt e (sau word cu word,dwor dcu dwor d) , f ol osi ndu- se t r anspor t ul de l a o adunar e/ scader e l a al t a
Exempl ul 2:~~~~~~~~~~~. model smal l. stack. dat a
a dw 0f f 01h, 0f f 02h, 0af 03h ; oct et i i 01h f f h 02h f f h 03h af h; adi ca nr. af 03f f 02f f 01h i n scr. l i t t l e
endi an; ( daca scri em "f f 01h" i n l oc de "0f f 01h"
etc .; da er r . l a compi l ar e, caci sunt
i dent i f i f cator i )b dw 01aah, 00aah, 0000h ; oct et i i aah 01h aah 00h 00h 00h
; adi ca nr . 000000aa01aah i n scr. l i t t l eendi an
x dw ?, ?, ? ; dupa x sunt 3 wor d- ur i nei ni t i al i zat e; adunam a+b word cu word ( 3 word- ur i ) si punemr ezul t atul i n x
. code
7/25/2019 Limbajul_Assembler_-_lectia_2
4/37
s ta r t :mov ax, @dat amov ds, ax
; copi em a i n x ( x: =a)mov si , of f set amov di , of f set xmov ax, [ si ] ; l a adr esar i i ndexat e se f ol . i mpl i ci t r egi st r ul DSmov [ di ] , axi nc s ii nc s ii nc dii nc dimov ax, [ si ]mov [ di ] , axi nc s ii nc s ii nc di
i nc dimov ax, [ si ]mov [ di ] , ax
; adunam b l a x ( x: =x+b)mov si , of f set bmov di , of f set xmov ax, [ di ]add ax, [ si ] ; l a pr i ma adunare nu adunam CF, dar ea poat e genera
CFmov [ di ] , ax ; deocamdat a x: 00abh f f 02h af 03h i ar CF=1; "mov"nu
af ect . CFi nc si ; =====
7/25/2019 Limbajul_Assembler_-_lectia_2
5/37
a, [ a+2] , [ a+4] , b, [ b+2] , [ b+4] , x, [ x+2] , [ x+4] i ar i n f er east r aRegi st er s: AX, CF si event ual SI , DI ) .
I nst r uct i unea de l uar e a opusul ui est e (" d" poat e f i r eg. sau di nmem. ) :
NEG d ; ef ect : [ d] : = 0- [ d] si af ect eaza: ODI TSZAPCX XXXXX
I nst r ucti uni l e mul t i mpl i cat i ve sunt ( "s" est e r egi st r u sau di nmemor i e) :
MUL s; i nm. acumul at or ul cu [ s] ; oper anzi i sunt t r at at i ca i nt r egi f ar a
semn; daca "s" e byte: AX: =AL*[ s] ( AH: =( AL*[ s] ) di v 2 8, AL: =( AL*[ s] ) mod
2 8)
; daca "s" e word: DX: =( AX*[ s] ) di v 2 16, AX: =( AX*[ s] ) mod 2 16; daca " s" e dword: EDX: =( EAX*[ s] ) di v 2 32, EAX: =( EAX*[ s] ) mod 2 32; pe scur t : AX: =AL*[ s] , r esp. ( DX, AX) : =AX*[ s] , r esp.
( EDX, EAX) : =EAX*[ s]; af ect eaza ODI TSZAPC; X UUUUX; i n f i nal :; CF=OF=1 par t ea hi a r ezul t atul ui est e semni f i cat i va; AH0 ( "s" byt e) , r esp. DX0 ( " s" wor d) , r esp. EDX0
( "s "dwor d); CF=OF=0 par t ea hi a r ez. est e nesemni f . ( r ez. a i ncaput i n p.
l ow); AH=0 ( "s" byt e) , r esp. DX=0 ( "s" word) , r esp. EDX=0
( "s "dwor d)
I MUL s; si mi l ar , dar oper anzi i sunt t r at at i ca i nt r egi cu semn i ar i n
f i nal :; CF=OF=1 par t ea hi a r ezul t atul ui est e semni f i cat i va; CF=OF=0 par t ea hi a r ez. est e nesemni f . ( r ez. a i ncaput i n p.
l ow); AH est e extensi a de semn a l ui AL ( "s" byt e) ,; r esp. DX est e ext ensi a de semn a l ui AX ( "s"word) ,; r esp. EDX est e ext ensi a de semn a l ui EAX ( "s" dword)
DI V s; i mpar t i r e l a [ s] ; oper anzi i sunt t r at at i ca i nt r egi f ar a semn
; daca "s" e byt e: AL: =AX di v [ s] , AH: =AX mod [ s]; daca "s" e wor d: AX: =( DX*2 16+AX) di v [ s] , DX: =( DX*2 16+AX) mod
[ s ]; daca "s" e dwor d: EAX: =( EDX*2 32+EAX) di v [ s] , EDX: =( EDX*2 32+EAX)
mod [ s]; pe scur t : i mpar t Ax, r esp. ( DX, AX) , r esp. ( EDX, EAX) , l a [ s]; cat ul se pune i n par t ea l ow: AL, r esp. AX, r esp. EAX; r est ul se pune i n part ea hi : AH, r esp. DX, r esp. EDX; af ect eaza ODI TSZAPC; U UUUUU; i n ur mat oar el e si t uat i i r ezul t at ul est e nedef . ( si se gen. o
i nt r er uper e) :; i mpar t i t or ul est e 0
7/25/2019 Limbajul_Assembler_-_lectia_2
6/37
; r est ul depasest e capaci t at ea par t i i hi a dest i nat i ei; cat ul depasest e capaci t at ea par t i i l ow a dest i nat i ei ( i n cazul
" I MUL"
; ast a i nseamna cat neg. < val . neg. mi n. sau cat poz. > val .poz. max. )
I DI V s; si mi l ar , dar oper anzi i sunt t r at at i ca i nt r egi cu semn
Exempl ul 3:~~~~~~~~~~~. model t i ny. stack. dat a. codes ta r t :mov ax, 8123h
mov bx, 0002hmul bx ; DX=0001h, AX=0246h, CF=OF=1 ( part ea hi , DX, est e
semni f i cat i va)
mov ax, 0102hmov bl , 02hmul bl ; AX=0004h ( se pi erde AH) , CF=OF=0 ( p. hi , AH, est e
nesemni f . )
mov ax, 0080hmov bl , 01hmul bl ; AX=0080h, CF=OF=0 ( par t ea hi , AH, est e nesemni f i cat i va)
; produsul AL*BL est e 128*1=128
mov ax, 0080hmov bl , 01hi mul bl ; AX=f f 80h, CF=OF=0 ( par t ea hi , AH, est e nesemni f i cat i va
; dar s- a pr opagat b7 di n AL, car e est e 1, deci AH adeveni t f f h)
; pr odusul AL*BL este - 128*1=- 128, car e pe 8 bi t i era 80h,; dar pe 6 bi t i devi ne f f 80h
mov ax, 0080hmov bl , 02hi mul bl ; AX=f f 00h, CF=OF=1 ( part ea hi , AH, est e semni f i cat i va)
; deci f f h di n AH nu est e ext ensi e de semn ci part e arezul t .
; pr odusul AL*BL est e - 128*2=- 256, car e pe 16 bi t i est ef f 00h
; cu "MUL bl " r ezul t a AX=0100h, adi ca 128*2=256mov ax, 0078hmov bl , 02hi mul bl ; AX=00f 0h, CF=OF=1 ( part ea hi , AH, est e semni f i cat i va)
; deci desi b7 di n AL est e 1 ( AL est e f 0h) , el nu s- apropagat
; i n AH, caci AH est e semni f i cat i v ( par t e a r ezul t at ul ui )chi ar
; daca e nul ; produsul AL*BL est e 120*2=240mov AX, 0100hmov bl , 80hdi v bl ; AH=00h, AL=02h, deci AX=0002h
; adi ca 256 di v 128 = 2, 256 mod 128 = 0
7/25/2019 Limbajul_Assembler_-_lectia_2
7/37
mov AX, 0100hmov bl , 80hi di v bl ; AH=00h, AL=f eh, deci AX=00f eh
; adi ca 256 di v - 128 = - 2, 256 mod - 2 = 0mov ax, 4c00hi nt 21h
end st ar t
( l a rul area cu TD a pr ogr amul ui de mai sus se vor ur mari i n f er .Regi st er s:AX, BX, DX si CF, OF) .
Exempl ul 4: i nmul t i r ea unui numar l ung ( ce nu i ncape i n 32 bi t i ) cu unnumar~~~~~~~~~~~ mai mi c ( ce i ncape i n 32 bi t i ) ( cazul f ar a semn) :
. model smal l
. 386
. stack
. dat aa dd 20000000h, 1e1e1e1eh ; ca numar a=1e1e1e1e20000000hb dd 00000011h ; ca numar b=11hx dd ?, ?, ? ; pr od. va f i i n x si r ezer vam 3 dwor d
. codes ta r t :mov ax, @dat amov ds, axmov si , of f set amov di , of f set xmov eax, dword pt r [ si ]
mul b ; EDX=00000002h, EAX=20000000hmov x, eax ; EAX e pr i ma ci f r a a pr od. i n baza 2 32 ( pr i muldwor d)
; i ar EDX=t r anspor t ( 00000002h); acum x=20000000h ? ?
add si , 4 ; avansez i n poz. ( dwor d- ul ) 2 di n aadd di , 4 ; avansez i n poz. 2 di n xmov [ di ] , edx ; sal vez t r ansport ul di n poz. 1 i n poz. 2 di n x
; deci x=20000000h 00000002h ?mov eax, dword pt r [ si ]mul b ; i nmul t esc b cu a doua ci f r a i n baza 2 32 di n a
; deci EDX=00000001h, EAX=f f f f f f f ehadd eax, dwor d pt r [ di ] ; adun t r anspor t ul ant er i or
; EAX=f f f f f f f eh + 00000002h = 00000000h + 1( pus
i n CF)adc edx, 00000000h ; daca am t r ansp. , i l ad. l a t r ansp. gener al di n
poz. 2; EDX=00000001h + 0h + CF = 00000002h
mov [ di ] , eax ; acum x=20000000h 00000000h ?add di , 4mov [ di ] , edx ; sal vez ul t . t r anspor t i n poz. 3 di n x
; acum x=20000000h 00000000h 00000002h; ca numar x=20000000020000000h
mov ax, 4c00hi nt 21h
end st ar t
7/25/2019 Limbajul_Assembler_-_lectia_2
8/37
Coment ar i i :- " . 386" per mi t e f ol osi r ea i nstr ucti uni l or nepr i vi l egi at e al epr ocesor ul ui
80386 si a i nst r uct i uni l or copr ocesorul ui matemat i c 80387; noua net r ebui eca sa put em accesa r egi str i i de 32 bi t i ( EAX, . . . ) ;
- l a r ul ar ea cu TD vom ur mar i i n f er . Wat ch: a, [ a+4] , b, x, [ x+4] ,[ x+8] ,EAX, EDX ( acest i r eg. nu se vad i n f er . Regi st er s - acol o se vad doar
r eg.de 16 bi t i ) ;
- t r anspor t ur i l e i nt r e di ver se pozi t i i ( ci f r e i n baza 2 32) put ea f isal vat /r ecuper at pr i n st i va ( noi l - am sal vat / r ecuper at pr i n l ocat i a
desti nat i e x) ,de exempl u sa i nl ocui m secvent a:
add si , 4add di , 4mov [di ] , edxmov eax, dword pt r [ si ]mul badd eax, dword pt r [ di ]adc edx, 00000000hmov [ di ] , eax
cu sevcent a:
add si , 4add di , 4
r or edx, 16 ; r ot i m bi t i i di n EDX cu 16 ( vezi mai i ncol o) - pr acti c se; i nt er schi mba pr i mi i 16 cu ul t i mi i 16 bi t ipush dx ; i ncarc vechea part e hi a l ui EDX ( deveni t a acum l ow)shr edx, 16 ; depl asez bi t i i di n EDX spr e dr eapt a ( vezi mai i ncol o) cu
16push dx ; i ncarc vechea part e l ow a l ui EDX
; acum i n vf . st i vei este vechi ul EDX, i n l i t t l e endi anmov eax, dword pt r [ si ]mul bmov bx, spadd eax, dword pt r [ bx] ; nu put em adr esa bazat / i ndexat di r ect cu SPadc edx, 00000000hmov [ di ] , eaxpop ax ; scot dwordul di n st i va
pop ax ; ( nu pot scoate i n DX, caci i mi t r ebui e val . de acol o)
at ent i e i nsa ca l a i nceput ul pr ogr amul ui sa i ni t i al i zam si SS ( cu"mov ax, @st ack", "mov ss, ax" ) .
Daca vr em sa f acem o i nmul t i r e/ i mpar t i r e cu semn dar di m. oper anzi l ornu sepot r i vesc, put em f ol osi ur mat oar el e i nst r uct i uni de ext i nder e a unuii nt r egcu semn l a o di mensi une mai mare ( pract i c se propaga bi t ul de semn) ;acest ei nst r ucti uni nu au oper anzi si nu af ecteaza f l agur i l e:
7/25/2019 Limbajul_Assembler_-_lectia_2
9/37
CBW ; ef ect : b7 di n AL se pr opaga i n cei 8 bi t i di n AHCWD ; ef ect : b15 di n AX se pr opaga i n cei 16 bi t i di n DX
Exempl ul 5: ( l a rul ar ea cu TD se vor ur mar i AX ( i n f er . Regi st er s)~~~~~~~~~~~ x, y, EAX ( i n f er . Wat ch) ). model smal l. 386. stack. dat a
a db 01hb db 0f 1hc dw 0002hx dd ? ; vreau sa f ac x: =a*c ( f ara semn)y dd ? ; vreau sa f ac y: =b*c ( cu semn)
. codes ta r t :
mov ax, @dat a
mov ds, axmov al , a ; AL=01hcbw ; AX=0001h ( b7 di n AL a f ost 0)mul c ; EAX=AX*cmov x, eaxmov al , b ; AL=f 1hcbw ; AX=f f f 1h ( b7 di n AL a f ost 1)i mul c ; EAX=AX*cmov y, eaxmov ax, 4c00hi nt 21h
end st ar t
Procedand ca mai sus pot i nmul t i / i mpart i oper anzi ai car or di mensi unisunt i nr aport de max. 4 ( byt e si dword) - atunci f ac succesi v "CBW" si "CWD";dacar apor t ul di mensi uni l or est e mai mare, put em i nmul t i / i mpar t i pe bucat i ,ca i npenul t i mul exempl u.
Cu i nst r . ar i t met i ce de mai sus put em f ace cal cul e el ement ar e ( osi ngur a op.matemat i ca/ i nst r uct i une) ; daca vremsa eval uam expr esi i mai compl exe,l eeval uam t r ept at - execut am mai mul t e i nst r uct i uni , car e eval ueazaexpr esi i l e
el ement are component e, i n or di nea i n car e sunt i ncui bate unel e i nal tel e,sal vand r ezul t atel e par t i al e de exempl u i n sti va - a se vedeaexerc i t i i l e del a sf ar s i t .
5) I nst r uct i uni ari t met i ce pent r u numer e i n vi r gul a mobi l a - TODO
6) I nst r uct i uni l ogi ce, shi f tar i , rot i r i :
7/25/2019 Limbajul_Assembler_-_lectia_2
10/37
I nstr ucti uni l e de shi f t ar e ( depl asar e) t r ansl at eaza bi t i i di n l ocat i auneidest i nat i i "dest " ( r egi st r u sau di n memori e) cu un numar " depl "
( const ant abyt e sau CL) pozi t i i ; uni i bi t i par asesc l ocat i a "dest" ( s i se pi er d)i ar ul t .car e a i esi t di n l ocat i e e past r at i n CF; af ect eaza ODI TSZAPC;i nstr uct i uni l esunt : X XXUXXSHL dest , depl ; depl . l ogi ca spr e r agur i mar i ( spr e st anga) ;
; compl eteaza i n dr eapta cu 0SAL dest , depl ; depl . ar i t met i ca spr e r agur i mar i ( spr e st anga) ;
; compl et eaza i n dr eapt a cu 0;; pr acti c e l a f el ca SHL
SHR dest , depl ; depl . l ogi ca spr e r agur i mi ci ( spr e dr eapt a) ;; compl eteaza i n st anga cu 0
SAR dest , depl ; depl . ar i t met i ca spr e r agur i mi ci ( spr e dr eapt a) ;; compl eteaza i n st anga cu bi t ul de semn ( depl asat
spr e dr . ); deci di f era de SHR
Exempl ul 6: ( l a r ul ar ea cu TD se va ur mar i AL ( i n f er . Regi st er s) )~~~~~~~~~~~. model smal l. stack. dat a. codes ta r t :
mov al , 11100111b
shr al , 1 ; AL=01110011b ( s- a pr opagat 0)mov cl , 2sar al , cl ; AL=00011100b ( s- a pr opagat bi t ul de semn, car e
est e 0)shl al , 3 ; AL=11100000b ( s- a compl etat i n st anga cu 0)sal al , 1 ; AL=11000000b ( s- a compl etat i n st anga cu 0)sar al , 3 ; AL=11111000b ( s- a pr opagat bi t ul de semn, care
est e 1)mov ah, 4chi nt 21hend st ar t
Shi f t ar i l e echi val eaza cu i nmul t i r i / i mpar t i r i cu put er i al e l ui 2, darcar e
se f ac mai r api d ca MUL, I MUL, DI V, I DI V.
I nstr ucti uni l e de r ot i r e t r ansl at eaza bi t i i di n l ocat i a uneides t i nat i i"dest " ( r egi st r u sau di n memor i e) cu un numar " depl " ( const ant a byt esau CL)pozi t i i ; bi t i car e par asesc l ocat i a "dest" pr i nt r - o par t e i nt r a i nl ocat i al ui "dest " pr i n ceal al t a par t e, i n aceeasi or di ne ( i mpr euna cu CF l aRCL,RCR) ; ul t i mul bi t car e a i esi t di n l ocat i e e past r at si i n CF;af ect eazaODI TSZAPC; i nst r uct i uni l e sunt :
7/25/2019 Limbajul_Assembler_-_lectia_2
11/37
X X
ROL dest , depl ; r ot i r e spr e r agur i mar i ( spr e st anga) ;
; bi t i i ce i es pr i n stg. i nt ra pr i n dr. , i n aceeas ior di ne;; ul t . bi t i es i t pr i n s tg. e pas t rat s i i n CF;; ex. ( ROL cu 3) : abcd. . . - - > d. . . abc, CF=c
RCL dest , depl ; r ot i r e spr e r agur i mar i cu car r y ( spr e st anga cucar ry) ;
; pr i n dr eapt a i nt r a CF si apoi pr i mi i depl - 1 bi t i cei es
; pr i n stg. ; CF devi ne ul t . bi t ce a i esi t pr i n stg.; ex. ( RCL cu 3) : CF=x, abcd. . . - - > d. . . xab, CF=c
ROR dest , depl ; r ot i r e spr e r agur i mi ci ( spr e dr eapt a) ;; bi t i i ce i es pr i n dr . i nt ra pr i n stg. , i n aceeas i
or di ne;
; ul t . bi t i es i t pr i n dr . e pas t rat s i i n CF;; ex. ( ROR cu 3) : . . . abcd - - > bcd. . . a, CF=b
RCR dest , depl ; r ot i r e spr e r agur i mi ci cu car r y ( spr e dr eapt a cucar ry) ;
; pr i n stg. i nt ra pr i mi i depl - 1 bi t i ce i es pr i n dr.( i n
; aceeasi or d. ) si apoi CF; CF devi ne ul t . bi t ce ai esi t
; pr i n dr .; ex. ( RCR cu 3) : CF=x, . . . abcd - - > xcd. . . a CF=b
Exempl ul 7: ( l a rul ar ea cu TD se va ur mar i AL si CF ( i n f er .Regi st er s) )
~~~~~~~~~~~. model smal l. stack. dat a. codes ta r t :
mov al , 11100111br ol al , 4 ; AL=01111110b, CF=0r or al , 6 ; AL=11111001b, CF=1cl c ; CF=0r cl al , 2 ; AL=11100101b, CF=1 ( scos 11, bagat 0 & 1, past r at
1)r cr al , 5 ; AL=01011111b, CF=0 ( scos 00101, bagat 1 & 0101,
pastr . 0)
mov ah, 4chi nt 21hend st ar t
Cu "ROL", "ROR" pot i nt er schi mba cel e doua j umatat i al e conf i g. debi t i adest i nat i ei ; exempl u:
r ol ax, 8 ; i nt er schi mba cont i nut ul l ui AL cu AH
I nst r uct i unea "RCL dest , 1" are ef ect ul dest : = dest *2+CF; acest l ucr une
7/25/2019 Limbajul_Assembler_-_lectia_2
12/37
per mi t e sa shi f t am l a st g. ( i . e. dubl am) r api d o val oar ea mul t i oct et :f acem"RCL" cu 1 l a pr i mul octet, apoi l a al doi l ea ( si i n el va i nt r a, pr i n
i nt er medi ul CF, bi t ul car e a i esi t di n pr i mul oct et ) , et c. Un pr ogr amdeacest t i p ( dar car e cer e o r ot i r e l a st anga, nu o shi f t ar e) est e pr opuscaexer ci t i u l a sf ar si t . Si mi l ar "RCR dest , 1" per mi t e shi f t ar ea l a dr eapt a( i . e.i nj umat at i r ea) r api da a unei val or i mul t i octet.
I nst r uct i uni l e l ogi ce sunt de f or ma "mnemoni c dest i nat i e, sur sa", sau"mnemoni c dest i nat i e" unde "dest i nat i e" poate f i r egi st r u sau di nmemor i e,"sur sa" poat e f i i medi at, r egi st r u sau memori e; oper anzi i nu pot f iambi i di nmemor i e si t r ebui e sa ai be aceeasi di mensi une; af ect eaza ODI TSZAPC
i nst r . sunt : 0 XXUX0
AND s, d ; f ace [ s] : = [ s] and [ d] ( conj unct i e bi t cu bi t )OR s, d ; f ace [ s] : = [ s] or [d] ( di s j uncti e bi t cu bi t )xOR s, d ; f ace [ s] : = [ s] xor [ d] ( di sj uncti e excl usi va bi t cu bi t )NOT d ; f ace [ d] : = not [ d] ( neaga f i ecar e bi t , i . e. compl ement f at a
de 1)
t abl el e operat i i l or pe bi t i :
x | y | x and y | x or y | x xor y x | not x- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0 | 0 | 0 | 0 | 0 0 | 1
0 | 1 | 0 | 1 | 1 1 | 01 | 0 | 0 | 1 | 11 | 1 | 1 | 1 | 0
Obs: "NOT" nu af ect eaza PF, deoar ece "dest i nat i e" are un nr . par depozi t i i ,deci nr . de 1 si nr . de 0 au aceeasi par i t at e (i ar "NOT"i nt er schi mba 1
cu 0) .
Exempl ul 8: ( l a r ul ar ea cu TD se vor ur mar i AL, BL ( i n f er . Regi st er s) )~~~~~~~~~~~. model smal l. stack. dat a
a db 00110000b. codes ta r t :mov ax, @dat amov ds, ax
mov bl , 01010000bmov al , anot al ; AL=11001111bmov al , aand al , bl ; AL=00010000bmov al , aor al , bl ; AL=01110000bmov al , a
7/25/2019 Limbajul_Assembler_-_lectia_2
13/37
xor al , bl ; AL=01100000bmov ah, 4chi nt 21h
end st ar t
I nstr uct i uni l e l ogi ce pot f i f ol os i t e pent r u di verse art i f i ci i( cast i gam vi t eza l a execut i e) , ca de exempl u:- st er ger ea cont i nut ul ui unui r egi st r u:
xor ax, ax ; AX: =0000h
- set ar ea/ ster ger ea/ i nver sar ea unor bi t i / f l agur i :
l ahf ; i ncar c f l agur i l e i n AHor ah, 00010000b ; bi t ul 4 di n AH devi ne 1, r est ul r aman l a f eland ah, 11111011b ; bi t ul 2 di n AH devi ne 0, r est ul r aman l a f el
sahf ; sal vez AH i n f l agur i ; f at a de s i t uat i a i ni t i al a; s- a schi mbat AF: =1, PF: =0
mov al , 0f f h ; AL=11111111band al , 0aah ; AL=10101010b ( am st er s bi t i i de r ang par)and al , 0f h ; Al =00001010b ( am st er s t et r ada super i oar a a l ui AL)or al , 0f 0h ; AL=11111010b ( am set at t et r ada super i oar a a l ui AL)or al , 55h ; AL=11111111b ( am setat bi t i i de r ang par)
mov al , 0aah ; AL=10101010bxor al , 0f f h ; AL=01010101b; ef ect echi val ent cu "not al "xor al , al ; AL=00000000b; ef ect echi v. cu "mov al , 0", dar i n pl us
; f ace CF=0, ZF=1 ( "MOV" nu af ecteaza f l agur i l e)
- "AND" poat e f i f ol osi t pt . st er ger ea CF si act ual i zar ea SF:
; pr esupunem ca i ni t i al CF=1, SF=0mov al , 0f 1h; "MOV" nu modi f . f l agur i l e, deci CF=1, SF=0;
; vr em CF=0 caci n- am f acut i nca ni ci o pr el ucrare, i arSF sa
; r ef l ect e f apt ul ca AL, ca i nt r eg cu semn, est e negat i vand al , al ; AL nu i si schi mba val oar ea, dar acum CF=0, SF=1
; ( oper ati a nu a pr ovocat t r anspor t di n b7, i ar b7 est e1)
and al , 0f f h; acel asi ef ect
- s i mul ar ea adunari i s i i nmul t i r i i f ol os i nd op. l ogi ce s i shi f t ar i ( a
sevedea exerc i t i i l e de l a s fars i t ) .
7) I nst r uct i uni de compar at i e:
CMP opd1, opd2 ; cal cul eaza opd1- opd2, nu sal veaza r ezul t atul , simodi f i ca
f l agur i l e ca l a ADC: ODI TSZAPCX XXXXX
TEST opd1, opd2 ; cal c. opd1 AND opd2, nu sal veaza r ezul t at ul , simodi f i ca
f l agur i l e ca l a AND: ODI TSZAPC
7/25/2019 Limbajul_Assembler_-_lectia_2
14/37
0 XXUX0
Oper anzi i t r ebui e sa ai be aceeasi di mensi une; nu pot f i ambi i di n
memor i ei ar opd1 nu poat e f i i medi at .Obs. de ex. ca l a "CMP" r ezul t a conf i g. di f er i t e de f l agur i daca
opd1 opd2 ca val or if ar a semn
7/25/2019 Limbajul_Assembler_-_lectia_2
15/37
( vedem ca "A" ( above) si "B" ( bel ow) sunt f ol osi t e l a compar ar ea f ar asemn)
J L, J NGE ( l ess/ not great er or equal ) : sar e daca opd1 < opd2 ca val or i cusemnJ LE, J NG ( l ess or equal / not great er ) : sar e daca opd1 = opd2 ca val or icu semnJ G, J NLE ( great er / not l ess or equal ) : sar e daca opd1 > opd2 ca val or i cusemn( vedem ca "G" ( gr eat er ) si "L" ( l ess) sunt f ol osi t e l a compar ar ea cu
semn)
J E, J Z ( equal / zer o) : sar e daca opd1 = opd2J NE, J NZ ( not equal / not zer o) : sar e daca opd1 opd2
De exempl u:
mov al , 10000010bmov bl , 00000001bcmp al , bl ; di f er ent a al - bl est e 10000001 si r ezul t a:
CF=0, SF=1, PF=1, OF=0j l et 1 ; sar e, deoar ece al
7/25/2019 Limbajul_Assembler_-_lectia_2
16/37
Var i ant a di n dr eapt a est e mai buna i n cazur i l e i n care ramur i l e t hensau el sesunt pr ea mari ( >128 octet i ) si nu se poat e sar i pest e el e cu
i nstr uct i unide sal t condi t i onat ( "J xx" al t el e decat "J MP") ; var i ant a di n dr eapt af acesal t ur i condi t i onat e mi ci , i ar pest e r amur i l e t hen sau el se sar e cu"J MP",car e poat e f ace si sal t ur i mai mar i .
Not am ca l a i nst r ucti uni l e de sal t condi t i onat ( "J xx" al t el e decat"J MP")oper andul "adr " t r ebui e sa f i e o et i chet a di n pr ogr am, i n t i mp ca l a" J MP"el poat e f i dat s i pr i nt r - un r egi str u de 16 bi t i sau pr i nt r - o l ocat i edememor i e de 16 bi t i .
Exempl ul 9: pr ogr am car e pune i nt r - o var i abi l a x max. di nt r e 3 val orif ar a~~~~~~~~~~~ semn st ocat e i n var . a, b, c ( am i ndentat pt .l i zi bi l i t at e) :
. model smal l
. stack
. dat aa dw 3b dw 5c dw 2x dw ?
. codes ta r t :mov ax, @dat amov ds, axmov ax, a ; copi em var i abi l el e i n r egi st r imov bx, b ; caci nu put em f ace CMP cu ambi i operanzimov cx, c ; i n memor i ecmp ax, bxj b e1 ; sar e daca a
7/25/2019 Limbajul_Assembler_-_lectia_2
17/37
( l a rul ar ea cu TD se vor ur mar i a, b, c, x ( i n f er east r a Wat ch) , AX,BX, CX
( i n f er eastr a Regi ster s)) .
Exempl ul 10: Al gor i t mul l ui Eucl i d cu di f er ent e (cat t i mp nr . suntdi f er i t e,~~~~~~~~~~~~ scad pe cel mi c di n cel mar e; cand au devent i egal e,val oar ea
comuna est e cmmdc numerel or i ni t i al e) :. model smal l. stack. dat a
a dw 4db dw 6dx dw ?
. code
s ta r t :mov ax, @dat amov ds, ax
mov ax, amov bx, bi nceput :
cmp ax, bxj e egal e
j a ab ; j ump- ur i l e nu modi f i ca f l agur i l e, deci el e au r amas cadupa"CMP"
sub bx, ax ; ai ci aj ungem daca AXBX
sub ax, bxj mp i nceputegal e: ; ai ci aj ungemdaca AX=BXmov x, ax ; ai ci X: =2d ( adi ca cmmdc( 4d, 6d) )
mov ah, 4chi nt 21hend st ar t
( l a rul ar ea cu TD se vor urmar i a, b, x ( i n f er east r a Wat ch) , AX, BX( i nf er eastr a Regi ster s)) .
Exempl ul 11: Suma a doi vect or i :~~~~~~~~~~~~
. model smal l
. stack
. dat aa db 01h, 02h, 03h ; l a compi l are "a" se i nl oc. cu of f setul sau 0000hb db 10h, 20h, 30h ; l a compi l are "b" se i nl oc. cu of f setul sau 0003hx db ?, ?, ? ; l a compi l ar e "x" se i nl oc. cu of f set ul sau 0006h
. codes ta r t :mov ax, @dat amov ds, ax
mov si , 0 ; i ni t i al i zez cont or ul cu car e vom numar a i t er at i i l ei nceput :cmp si , 3
7/25/2019 Limbajul_Assembler_-_lectia_2
18/37
j ae s fars i tmov al , [ si +a] ; cand "a" apare i nt r e [ ] i nseamna const ant a adr esa
0000h
add al , [ si +b] ; cand "b" apare i nt r e [ ] i nseamna const ant a adr esa0003hmov [ si +x] , al ; cand "x" apare i nt r e [ ] i nseamna const ant a adr esa
0006hi nc s ij mp i nceputsf ar si t :nop ; acum x: 11h 22h 33h
mov ah, 4chi nt 21hend st ar t
( l a r ul ar ea cu TD se vor ur mar i i n f er . Wat ch: a, [ a+1] , [ a+2] , b,[ b+1] ,
[ b+2] , x, [ x+1] , [ x+2] , i ar i n f er . Regi sters: AL, SI ) .
Ul t i mel e t r ei exempl e sunt si i mpl ement ar i al e unor st r uct ur i de t i pi f - el se,whi l e, f or ; i mpl ement ar i l e nu sunt i nsa f i del e ( de ex. i n ci cl ul whi l ede l apenul t i mul exempl u avem doua pct . di n car e sar i m l a i nceput ulci cl ul ui ) ;put em r eal i za i nsa si i mpl ement ar i f i del e ( est e un exer ci t i u l asf ar si t ) .
Exempl ul 12: Tr anspuner ea unei mat r i ci l i ni ar i zate:~~~~~~~~~~~~
. model smal l. stack
. dat anl i n db 3 ; nr . de l i ni incol db 3 ; nr . de col oanea db 01h, 02h, 03h, 04h, 05h, 06h, 07h, 08h, 09h
; mat r . 3x3, cu l i ni i l e st ocat e i n mem. una dupa al t a; dpv. matemat i c, mat r i cea est e: 1 2 3; 4 5 6; 7 8 9
. codes ta r t :mov ax, @dat amov ds, ax
mov bx, of f set amov cl , 0 ; numaram l i ni i l e cu CLl i ni e:
mov ch, 0 ; numar am col oanel e cu CHcol oana:
mov al , clmul nl i nmov si , ax ; acum SI =of f set ul l i ni ei de i ndi ce CLmov al , chcbw ; acum AX=CH ( i ndi cel e col oanei ) scr i s ca wordadd si , ax ; acum SI =of f set ul el ement ul ui a[ CL] [ CH] i n l ocat i a
mat r i ci imov al , ch
7/25/2019 Limbajul_Assembler_-_lectia_2
19/37
mul nl i nmov di , ax ; acum DI =of f set ul l i ni ei de i ndi ce CHmov al , cl
cbw ; acum AX=CL scr i s ca wor dadd di , ax ; acum DI =of f set ul el ement ul ui a[ CH] [ CL] i n l ocat i amat r i ci i
mov al , [ bx+si ] ; AL: =a[CL] [ CH]xchg al , [ bx+di ] ; i nt er schi mb AL cu a[CH] [ CL]mov [ bx+si ] , al ; a[CL] [ CH] : =ALi nc ch ; t r ec l a col oana ur matoar ecmp ch, clj b col oana
i nc cl ; t r ec l a l i ni a ur mat oar ecmp cl , nl i nj b l i ni e
; acum "a" are i n l ocat i e: 01h 04h 07h 02h 05h 08h 03h 06h 09h; adi ca est e mat r i cea: 1 4 7
; 2 5 8; 3 6 9
mov ah, 4chi nt 21hend st ar t
Coment ar i i :- put eam sa i ndexam cu doua var i abi l e "i ", "j " i n l oc de CL, CH;
put eam de asemenea f ol osi ar t i f i ci i pt . a f ace pr ogr amul mai r api d;- pt . a aduna doua mat r i ci e suf . sa parcur gem l ocat i a l or ca pe unvect or( cu un si ngur i ndi ce) , f ar a a i mpar t i pr el ucrarea pe l i ni i si col oane;
- l a r ul ar ea cu TD vom ur mar i i n f er . Wat ches: a, [ a+1] , . . . , [ a+8]
i ar i n f er . Regi sters : CL, CH, SI , DI .
Exempl ul 13: Ex. ce ar ata ca oper andul unui "J MP" poat e f i si r egi st r u~~~~~~~~~~~~ sau di n memor i e. model smal l. stack. dat a
x dw ?y dw ?
. codes ta r t :mov ax, @dat amov ds, ax
l ea ax, et 1 ; echi val ent cu "mov ax, of f set et 1"
mov x, of f set et 2mov y, of f set et 3mov bx, of f set yj mp axnop ; se sare pest e ast a
et 1:j mp [ x]nop ; se sare pest e ast a
et 2:j mp [ BX] ; deci sal t l a adr . st ocat a i n mem. l a adr . st ocat a i n BXnop ; se sare pest e ast a
et 3:mov ah, 4ch
7/25/2019 Limbajul_Assembler_-_lectia_2
20/37
i nt 21hend st ar t
( l a rul ar ea cu TD se va ur mar i l a car e/ pest e car e l i ni i sar ei ndi cat or uli nst r uct i uni i cur ent e - va sar i "NOP"- ur i l e, semn ca s- au execut at
acel e"J MP") .
9) I nstr ucti uni de ci c l ar e:
I mpl ement eaza st r uctur i de ci cl ar e de t i p "f or ", cu t est l a sf ar si t ;nu af ect eaza f l agur i l e si sunt de f orma ur matoar e ( unde "adr " est e cal a"J xx" condi t i onat e, deci t r ebui e sa avem "depl " i nt r e - 128. . 128) :
LOOP adr ; decr em. CX cu 1 si daca obt . ( Cx) 0 se sar e l a "adr "LOOPZ adr ; decr em. CX cu 1 si daca obt . ( Cx) 0 si ZF=1 se sar e l a
"adr"LOOPE adr ; i dem
LOOPNZ adr ; decr em. CX cu 1 si daca obt . ( Cx) 0 si ZF=0 se sare l a"adr"
LOOPNE adr ; i demObser vat i i :- subl i ni emca test ul ( CX) 0 se f ace DUPA ce s- a decrement at CX ( i ardecr ement area ramane f acut a chi ar daca i n ur ma t est ari i condi t i ei nu
se f acesal t ul ) ;
i n par t i cul ar l a LOOP daca i ni t i al ( CX) =0, i nt ai se decrem. CX sidevi nef f f f h, apoi deoarece este 0 se sar e;
- daca "adr " est e i nai nt e ( avem "depl " pozi t i v) , at unci nu avem unci cl uci doar un sal t condi t i onat ( doar daca "adr " est e i napoi a l ui "LOOPxx"
arel oc ci cl ar ea, caci dupa sal t ul i napoi execut i a aj unge l a un mom. dat
i ar l a"LOOPxx", i ar sal t , et c. ) - evi dent , acest cur s al execut i ei poat e f ischi mbat de pr ezent a al t or " J xx" , "LOOPxx".
Exempl ul 14: Suma a doi vect or i , var i ant a cu "LOOP":~~~~~~~~~~~~
. model smal l
. stack
. dat aa db 01h, 02h, 03h ; l a compi l are "a" se i nl oc. cu of f setul sau 0000hb db 10h, 20h, 30h ; l a compi l are "b" se i nl oc. cu of f setul sau 0003hx db ?, ?, ? ; l a compi l ar e "x" se i nl oc. cu of f set ul sau 0006h
. codes ta r t :mov ax, @dat amov ds, ax
mov cx, 3 ; i ni t i al i zez cont or ul cu nr . i t er at i i l or de ef ectuatmov s i , 0 ; i ni t i al i zez i ndi cel e i n vect or ii nceput :
7/25/2019 Limbajul_Assembler_-_lectia_2
21/37
mov al , [ si +a] ; cand "a" apare i nt r e [ ] i nseamna const ant a adr esa0000h
add al , [ si +b] ; cand "b" apare i nt r e [ ] i nseamna const ant a adr esa
0003hmov [ si +x] , al ; cand "x" apare i nt r e [ ] i nseamna const ant a adr esa0006h
i nc s il oop i nceput
; acum x: 11h 22h 33hmov ah, 4chi nt 21hend st ar t
( l a r ul ar ea cu TD se vor ur mar i i n f er . Wat ches: x, [ x+1] , [ x+2] i ar i nf e r .Regi ster s: CX, SI , AL).
Obs. ca ci cl ul "f or " si mul at de "LOOP" ar e t est ul l a sf ar si t si nuacoper acazul gener al cand nr . de i t er at i i poat e f i si 0 ( el f ace macar oi t erat i e) .Put em si mul a un ci cl u "f or " cu t est l a i nceput ast f el ( dar at unci
sal tulest e i nai nt e si nu "LOOP" ar e r ol ul esent i al i n ci cl ar e ci un "J MP" pusl asf ar si t ) :
mov cx, n ; n = nr . de i t er at i i ce t r ebui e ef ect uat e + 1et 1:l oop et 2
j mp et 3et 2:. . .
j mp et 1et 3:. . .
Put em f ace ci cl ar i numar at e de CX si cu "i nc cx", "dec cx", "j cxz et ".
Exempl ul 15: Caut ar ea unui car act er i nt r - un st r i ng:~~~~~~~~~~~~. model smal l. stack. dat a
s db "abcaabc"c db ' c '
. codes ta r t :mov ax, @dat amov ds, ax
mov cx, of f set csub cx, of f set s ; CX = l ung. si r ul ui = 7mov al , cmov si , 0f f f f hi nceput :
i nc si ; l a pr i ma i ncr ement are SI devi ne 0000hcmp al , [ si +s]
7/25/2019 Limbajul_Assembler_-_lectia_2
22/37
l oopne i nceput ; i es l a pr i ma i nt al n. a l ui AL(i . e. ' c' ) sau dupat er m. s i rul ui
; acum SI este i ndi cel e pr i mei apar i t i i a car acter ul ui i n s i r , adi ca
2, ; i ar of f set ul apar i t i ei est e SI + of f set ul l ui s, adi ca 0 + 2 = 2mov ah, 4chi nt 21hend st ar t
( l a rul ar ea cu TD se va ur mar i i n f er . Wat ches: [ byt e pt r si +s] , i ar i nf e r .Regi ster s: CX, SI , AL).
10) I nstr ucti uni pent r u str i ngur i :
Toat e i nst r . pt . si r ur i consi dera i mpl i ci t ca si r ul sur sa est e poi nt at
deDS: SI , i ar s i r ul desti nat i e de ES: DI ; pt . s i r ul sur sa se poat e f ol osisi unal t r eg. segment , dar t r ebui e i ndi cat expl i ci t ; sensul de par cur ger e asi r ur i l or est e dat de f l agul DF si est e spr e adr ese mar i ( SI , DI cresc)dacaDF=0 si spre adr ese mi ci daca DF=1; i nst r uct i uni l e nu au oper anzi si auf orma:
mnemoni c
sau
pref i x mnemoni c
unde "mnemoni c" i ndi ca oper ati a ef ect uata i ar "pr ef i x" i ndi ca f apt ul caoper at i a respect i va se va f ace r epet at pana l a i ndepl i ni r ea uneicondi t i i ;f l agur i l e sunt modi f . doar de execut area i nst r . "mnemoni c" , nu de"pref i x" ;"mnemoni c" poat e f i :
MOVSB/ MOVSW/ MOVSD; t r ansf er a un oct et / wor d/ dwor d de l a sur sa l a dest i nat i e, apoi; modi f i ca SI si DI cu 1/ 2/ 4, r esp. - 1/ - 2/ - 4 ( i n f uncti e de DF);; nu modi f i ca f l agur i l e
LODSB/ LODSW/ LODSD; t r ansf era un oct et / word/ dwpr d de l a sursa i n AL/ AX/ EAX, apoi; modi f i ca SI cu 1/ 2/ 4, r esp. - 1/ - 2/ - 4 ( i n f uncti e de DF) ;; nu modi f i ca f l agur i l e
STOSB/ STOSW/ STOSD; t r ansf er a un oct et / word/ dwor d di n AL/ AX/ EAX l a dest i nat i e, apoi; modi f i ca DI cu 1/ 2/ 4, r esp. - 1/ - 2/ - 4 ( i n f uncti e de DF) ;; nu modi f i ca f l agur i l e
CMPSB/ CMPSW/ CMPSD; compar a oct et ul / wor dul / dwordul de l a sur sa si dest i nat i e ca l a; i nst r . "CMP" (deci f ace sur sa- dest i nat i e f ar a a sal va r ezul t at ul )
7/25/2019 Limbajul_Assembler_-_lectia_2
23/37
; si set eaza cor espunzat or f l agur i l e: ODI TSZAPC apoi; X XXXXX; modi f i ca SI si DI cu 1/ 2/ 4, r esp. - 1/ - 2/ - 4 ( i n f uncti e de DF) ;
SCASB/ SCASW/ SCASD; compara AL/ AX/ EAX cu byteul / wordul / dwordul de l a dest i nat i e ca l a
i nst r .; "CMP" ( deci f ace AL/ AX/ EAX - dest i nat i e f ar a a sal va r ezul t . ); si set eaza cor espunzat or f l agur i l e: ODI TSZAPC apoi; X XXXXX; modi f i ca DI cu 1/ 2/ 4, r esp. - 1/ - 2/ - 4 ( i n f uncti e de DF) ;
"pr ef i x" poat e f i :
REP ; r epet a pana cand ( CX) =0;; dupa f i ecare r ep. se decr ement eaza CX cu 1
REPZ/ REPE ; r epet a pana cand ( CX) =0 sau ZF=0;; dupa f i ecare r ep. se decr ement eaza CX cu 1
REPNZ/ REPNE ; r epet a pana cand (CX) =0 sau ZF=1;; dupa f i ecare r ep. se decr ement eaza CX cu 1
O i t er at i e decur ge ast f el : oper at i a "mnemoni c", decr ement are CX, t est ;dacai nsa de l a bun i nceput CX=0, nu se f ace ni ci o i t er at i e.
Pr acti c, CX i ni t i al este nr . de i t er at i i pe car e i s i pr opune sa- l f aca"REPxx", i ar l a s f ars i t ul f i ecare i i t erat i i se t esteaza condi t i a r ef .
l a ZF( i n cazul REPZ/ REPE/ REPNZ/ REPNE) si daca este sat i sf acut a se i ese.
Exempl ul 16:~~~~~~~~~~~~. model smal l. stack. dat a
nul equ 00h; si mbol ul "nul " se va i nl ocui cu val . 00h or i unde va apar ea i n
progr am;; ai ci "nul " nu se al oca ca o var i abi l a
a db "abcdef " , nul; s i r t er mi nat cu car acter ul nul ( put eam pune si di r ect ". . . ,
00h") ;; "a" est e pr i ma var i abi l a al ocat a ( ar e deci of f set ul 0) , i ar de l a
; of f set ul sau se pun i n memor i e 7 car actere: ' a' , . . . , ' f ' , 00h; ( deci acest nul se al oca)
b db "abcef ", nul; "b" ar e of f set ul 7
x dw ?. codes ta r t :assume es: @data ; pozi t i onarea i mpl i ci t a a l ui DS e t ot pe segm. dedat emov ax, @dat amov ds, axmov es, ax ; avem un si ngur segm. de date, car e va f i si sur sa sidest i nat i e
7/25/2019 Limbajul_Assembler_-_lectia_2
24/37
; af l u l ungi mea l ui "a" ( un f el de "st r l en" di n l bj C)mov di , of f set a
mov cx, 0f f f f hmov al , nulcl d ; DF: =0 si ast f el si r ul se va par cur ge spr e adr . mar ir epnz scasb ; cum CX pl eaca de l a o val . mare, i nai nt e ca el sa
at i nga 0; "scasb" va aj unge sa conchi da ca octet ul cur ent di n
s i r; est e egal cu nul ( di n AL) , va pune ZF: =1 si se va
i esi ;; i n acel moment CX pr i vi t ca nr . cu semn est e egal cu; - l ungi mea si r ul ui "a" ( f ar a nul ) - 2
neg cxdec cxdec cx
mov x, cx ; acum x = l ungi mea si r ul ui "a" ( f ar a nul ); put eam af l a acum l ungi mea si r ul ui "a" si cu:; mov ax, di; sub ax, of f set a; dec ax; mov x, ax
; af l am pr i ma pozi t i e unde di f er a "a" si "b"mov si , of f set amov di , of f set bmov cx, x ; l ungi mea l ui "a"cl dr epz cmpsb ; merg pana par curg t oata l ungi mea l ui "a" ( CX devi ne
0) sau ; gasesc o di f erent a ( "cmpsb" pune ZF: =0); pr i ma poz. unde di f er a est e l a SI + of f set a - 1
; i nl ocui m t oat e l i t er el e mi ci di n "a" cu l i t er e mar imov si , of f set a ; oper am pe acel asi st r i ng ca sur sa si dest i nat i e;mov di , of f set a ; r eami nt i m si ca DS ar e ai ci acel asi cont i nut ca ESmov cx, x ; l ungi mea l ui "a"cl dci cl u:
l odsb ; i ncar c oct . cur ent di n "a" i n AL si i ncrem. SIcmp al , ' a'j b al t ceva ; daca oct . cur ent < ' a' at unci nu e l i t era mi cacmp al , ' z '
j a al t ceva ; daca oct . cur ent > ' z' at unci nu e l i t era mi casub al , 20h ; i nt ot deauna di f . l i t . mi ca- l i t . mar e cor espunzat oar e
e 20hst osb ; sal v. AL i n oct. cur ent di n "a" si i ncremDI ( acum
SI =DI )al t ceva:
l oop ci cl u ; decrem. CX si daca i nca nu e 0 mai pr el ucr ez uncar .
; acum "a" cont i ne "ABCDEF", nul
mov ah, 4chi nt 21hend st ar t
7/25/2019 Limbajul_Assembler_-_lectia_2
25/37
( l a r ul ar ea cu TD ur mar i m i n f er . Regst er s: CX, SI , DI , AL i ar i n f er .Wat ches: a, [ byt e pt r s i ] , [ byt e pt r di ] ) .
Exempl ul 17: I dent i f i car ea numel ui f i si er ul ui ( cu ext . ) di nt r - o cal ecompl et a~~~~~~~~~~~~. model smal l. stack. dat a
nul equ 00hp db "c: \ bor l andc\ bi n\ t asm. exe", nulf db 100 dup( ?) ; buf f er de 100 octeti nei ni t i al i zat ix dw ?
. codes ta r t :assume es: @dat a
mov ax, @dat amov ds, axmov es, ax
; caut s fars i tul s i rul ui "p"mov di , of f set pmov al , nulmov cx, 0f f f f hcl dr epnz scasbdec didec di
; acum DI poi nt eaza ul t i mul car act er di n "p" de di nai nt e de nul ;
; mer g i napoi pana gasesc ' \ 'mov x, dimov al , ' \ 'mov cx, 0f f f f hst d ; f ac DF: =1 ca sa se parcur ga si r ur i l e spr e adr . mi cir epnz scasbi nc di
; acum DI poi nt eaza ' \ ' di n "p"; copi ez de l a DI pana l a nul ( i ncl usi v)
sub x, di ; acum x=l ungi mea numel ui . ext al f i si er ul ui , adi ca ( ai ci ) 8i nc x ; numar i n l ungi me si un nulmov si , dii nc si ; acum SI poi nt eaza pr i mul car act er de dupa ' \ 'mov di , of f set f
mov cx, xcl d ; acum copi ez spr e dr eapt ar ep movsb
; acum "f " cont i ne "t asm. exe", nul
mov ah, 4chi nt 21hend st ar t
( l a r ul ar ea cu TD se vor ur mar i i n f er . Regi st er s: AL, SI , DIi ar i n f er . Wat ches: p, f , x, [ byt e pt r s i - 2] , [ byt e pt r s i - 1] , [ byt e
pt r s i ] ,[ byt e pt r di - 2] , [ byt e pt r di - 1] , [ byt e pt r di ] , [ byt e pt r di +1] ) .
7/25/2019 Limbajul_Assembler_-_lectia_2
26/37
Exempl ul 18: Pr ogr amcar e i si dupl i ca o par t e a sa, apoi execut a noulcod:
~~~~~~~~~~~~. model t i ny. stack. dat a. codeor g 100hs ta r t :mov ax, csmov ds, axmov es, ax
mov ax, 0et 1:i nc ax
et 2:
mov cx, of f set et 2sub cx, of f set et 1mov si , of f set et 1mov di , of f set xr ep movsbx db 100 dup( 90h) ; "90h" este codul unei i nst r . "nop"
; cand se aj unge ai ci s- au execut at i n t ot al doua "i nc ax", deci AXest e 2mov ah, 4chi nt 21hend st ar t
Coment ar i i :
- "x" est e o var i abi l a decl ar at a i n segment ul de cod si i ni t i al i zat a cuunnumar de 90h- ur i ( codul l ui "nop") ; ea se al oca chi ar i n acel l oc si
as t f eli nt r e "r ep movsb" si "mov ah, 4ch" apar i n zona de cod 100 de
i nstr uct i uni"nop";
- " r ep movsb" copi aza zona de cod di nt r e "et1" si "et2" ( zona cecont i ne oi nst r ucti une "i nc ax") de l a of f set ul "x"; deoar ece "x" a f ost
i ni t i al i zat acu un numar suf i ci ent de mare de 90h- ur i , nu exi st a r i scul ca aceast a
copi esa aj unga pest e i nst r uct i unea "mov ah, 4ch" ; i n pl us, i n ur ma
suprascr i er i ipr i mi l or oct et i de dupa "x" cu copi a l ui " i nc ax" r aman i n cont i nuar e
ni stei nst r . "nop" i nt r egi ( caci f i ecar e ar e doar un octet) , deci cand
aj ungeexecut i a ai ci gasest e cod val i d;
- i n ansambl u r ul ar ea va exec. pr i mel e i nst r uct i uni "mov ax, cs", . . . ,"i nc ax"( cel di nt r e "et 1" s i "et 2") , . . . , "r ep movsb", apoi copi a l ui " i nc ax"
de l ai nceput ul l ui "x", apoi "nop"- ur i l e r amase, si i n f i nal "mov ah, 4ch","i nt 21h"; deci i n t ot al se vor execut a doua " i nc ax" si ast f el AX va
f i 2;
7/25/2019 Limbajul_Assembler_-_lectia_2
27/37
- l a rul area cu TD se va ur mar i i n f er . Regi st er s AX; event ual se vaur mar ii n f er . CPU ( se deschi de cu Vi ew/ CPU) zona de cod si cum se
i nl ocui estepr i mul "nop" cu copi a l ui "i nc ax" ( i nst r . "i nc ax" are tot un si nguroct et ) .
11) Accesar ea argument el or di n l i ni a de comanda:
St i m ca un pr ogr am se poat e l ansa de pe pr ompt er ul i nt er pr et or ul ui decomenzi ( "command. com") cu argument e i n l i ni a de comanda - pr i n el eput emt r ansmi t e di ver se date de i nt r are pr ogr amul ui ; de exempl u:
c: \ wor k>c: \ bor l andc\ bi n\ t asm/ zi f i s . asmai ci :
- "c: \ bor l andc\ bi n\ t asm / zi f i s. asm" est e l i ni a de comada ( pr esc." l dc" ) ;- "c: \ bor l andc\ bi n\ t asm" est e speci f i cat or ul pr ogr amul ui l ansat ;- "/ zi " si "f i s. asm" sunt ar gument el e i n l dc ( si r ur i maxi mal e decar act er eneal be, separ at e pr i n car act er e al be) ;
- s i r ul " / z i f i s . asm" ( obt i nut di n l dc pr i n el i mi nar easpeci f i cat orul uipr og. execut at ) s. n. " coada" l dc ( si obs. ca de r egul a i ncepe cu un
bl ank) .Event ual el e redi r ect ar i i ncl use i n l dc nu sunt consi der at e ar gument e
( el esunt t r at at e de i nt er pr et or si nu devi n dat e de i nt r ar e al e pr og.
l ansat ) ;de exempl u i n l dc:
c: \ wor k>t ype f i s. t xt > f i s1. t xt
si ngur ul ar gument est e "f i s. t xt ".Ne punem pr obl ema cum put em accesa di nt r - un pr ogr am asm argument el e i n
l dccu car e a f ost l ansat ( di nt r - un pr og. C se pot accesa cu aj ut or ulpr i mi l or 2par amet r i ai l ui "mai n", numi t i de r egul a "argc", "argv") .
Cand si st emul i ncarca un pr ogr am ( i ndi f er ent daca est e " . com" sau". exe")
pent r u a f i execut at , i i al oca o zona de memori e ce cont i ne l a i nceputunpr eambul de 256 ( 100h) oct et i numi t PSP ( "pr ogr amsegment pr ef i x") sii ncont i nuare i magi nea di n memor i e a progr amul ui ( cu zona cod, de dat es tat i ce,st i va, et c. ) . La i nceput ul r ul ar i i pr ogr amul ui DS si ES cont i n i mpl i ci tadr esa de segment a PSP ( i ar ul t er i or i i put em f ace sa poi nt eze zona dedat ecu i nst r uct i uni de f orma "mov ax, @data", "mov ds, ax" ) .PSP cont i ne di ver se i nf . asoci at e de si st em pr ocesul ui r espect i v
( r ul ar i i
7/25/2019 Limbajul_Assembler_-_lectia_2
28/37
r espect i ve a pr ogr amul ui ) , pr i nt r e car e coada l dc ( t er mi nata cu uncaracterCR, avand codul ASCI I 13d, r esp. 0dh) si l ungi mea ei . Mai exact :
- l a of f set ul 80h i n PSP est e un oct et ce cont i ne l ungi mea cozi i l dc( i n car enu se numar a si CR de l a sf ar si t ) ;
- de l a of f set ul 81h l a of f set ul 0f f h i n PSP est e st ocat a coada l dc, cutotcu CR de l a sf ars i t ( deci pe o l ungi me de max. 127 oct et i ) .
Recomandam ca pr ogr amat orul sa copi eze coada l dc di n PSP i nt r - unstr i ngal ocat i n zona de dat e a pr ogr amul ui i ar event ual el e pr el ucrar iul t er i oar eal e ar gument el or sa l e f aca pl ecand de l a acest st r i ng.
Exempl ul 19: Pr ogr amcar e i si af i saza coada l dc, apoi f i ecar e ar gument
i n~~~~~~~~~~~~ par t e.Pr ogr amul i si va copi a mai i nt ai coada l dc i nt r - un st r i ng di n zona de
dat e,apoi i t er at i v va copi a de ai ci cat e un ar gument i n al t st r i ng si - l vaaf i sa.Pt . af i sar e vom f ol osi t ot i nt r er uper ea 21h, dar cu al t i par amet r i ,
anume:
AH = 9 ( f unct i a "di spl ay st r i ng" a i nt r er uper i i 21h)DS = adr . de segment a st r i ngul ui af i satDX = of f set ul st r i ngul ui af i sat ( i n segment ul sau)apoi apel am "i nt 21h"
St r i ngul de af i sat t r ebui e sa se ter mi ne cu ' $' ( af i sar ea car acterel orvai ncepe de l a adr esa DS: DX si se va opr i l a i nt al ni r ea pr i mul ui ' $' ) ;acest' $' nu va f i af i sat .
. model smal l
. stack
. dat aseg_psp dw ?l dc_n dw ?l dc db 127 dup(?) ; sa i ncapa l dc f ara , dar cu un 0 adaugat de
noi
buf f db 1000 dup ( ?). codes ta r t :mov ax, @dat amov es, ax ; acum ES poi nteaza dat el e, dar DS i nca poi nt eazaPSP
mov cl , ds: [ 80h] ; l ungi mea cozi i l dc ( f ar a CR de l a sf ar si t )mov ch, 0mov es: [ l dc_n] , cx ; sal vam l ungi mea cozi i l dc pt . event ual e al t e
f ol osi r imov si , 81h ; acum DS: SI poi nt eaza coada l dc di n PSPl ea di , l dc ; acum ES: DI poi nt eaza st r i ngul "l dc" di n zona de
dat e
7/25/2019 Limbajul_Assembler_-_lectia_2
29/37
r ep movsb ; copi ez coada l dc ( f ara ) i n st r i ngul " l dc"mov byt e pt r es: [ di ] , 0 ; adaug un car act er 0 l a sf ar si t ul st r i ngul ui
" l dc"
mov es: [ seg_psp] , ds ; sal v. DS ( adr . de seg. a PSP) pt . event . al t ef ol osi r imov ds, ax ; acum si DS poi nt eaza datel e; copi ez "l dc" i n "buf f " si pun ' $' l a sf ar si t ul copi ei ( i n l oc
de 0)mov cx, l dc_nl ea s i , l dcl ea di , buf fr ep movsbmov al , 13 ; car act erul st osbmov al , 10 ; caracterul st osbmov al , ' $'
st osb; af i sez "buf f " ( car e acum cont i ne coada l dc, t er mi nat a cu ' $' i n l oc de
)l ea dx, buf f ; DS poi nt eaza dej a segment ul l ui "buf f "mov ah, 9i nt 21h
; copi ez i t er at i v cat e un ar gument di n "l dc" i n "buf f " si - l af i sezl ea s i , l dcl ea di , buf f
e t :l odsbcmp al , ' 'j e et
cmp al , 0j e sfet 1: ; a i nceput un ar gument si - l copi em i n "buf f "st osbl odsbcmp al , ' 'j e et 2cmp al , 0j e et 2j mp et 1et 2: ; s-a t er mi nat un ar gument si - l af i sam ( di n "buf f ")mov al , 13st osbmov al , 10
st osbmov al , ' $'st osbmov ah, 9l ea dx, buf fi nt 21hl ea di , buf fj mp ets f :
mov ah, 4chi nt 21hend st ar t
7/25/2019 Limbajul_Assembler_-_lectia_2
30/37
Coment ar i i :- i nai nt e de a i ni t i al i za DS cu val . l ui "@dat a" a tr ebui t sa accesezvar i abi l el e "l dc_n" si "seg_psp" decl arat e i n segment ul de dat e cu
pr eci zar ea expl i ci t a a r egi st r ul ui segment , anume ES; i nt r - adevar ,dacanu asi f i pr eci zat r eg. segment , compi l at or ul ar f i f ol osi t i mpl i c i t
DS,dar acest a i nca nu poi nt a segment ul de dat e;
- l a sf ar si t ul si r ur i l or af i sat e am adaugat car act er el e ( cod ASCI I13d)si ( cod ASCI I 10d) , care f ormeaza capul de l i ni e i n MS- DOS; f ara
el enu s -ar f i t recut l a l i ni e noua i nt re af i sar i ( t ot ul s -ar f i af i sat pe
os i ngura l i ni e) ;
- put em compi l a, l i nkedi t a si r ul a pr ogr amul di r ect de pe pr ompt er ,f ara sa- l
i ncar cam i n TD; i n t ot al vom vedea pe ecran ceva de t i pul :
C: \ WORK>c: \ borl andc\ bi n\ t asm pr og. asmTurbo Assembl er Ver si on 3. 1 Copyr i ght ( c) 1988, 1992 Bor l andI nt er nat i onal
Assembl i ng f i l e: 1. asmErr or messages: NoneWar ni ng messages: NonePasses: 1Remai ni ng memor y: 455k
C: \ WORK>c: \ bor l andc\ bi n\ t l i nk pr og. objTurbo Li nk Ver si on 5. 1 Copyr i ght ( c) 1992 Bor l and I nt ernat i onal
C: \ WORK>pr og. exe a bb ccca bb ccc
abbccc
C: \ WORK>_
obs. ca i n l i ni a de comanda put em l asa or i cat e bl ank- ur i i nt r ear gument e( pr ogr amul de mai sus est e f acut a. i . sa l e i dent i f i ce cor ect or i cum) ;
- si di n TD put emr ul a pr ogr amul cu argument e i n l i ni a de comanda;pent r uaceast a i ncarcam progr amul i n TD normal , apoi set am argument el e di n
meni ul"Run/ Ar gument s. . . ", apoi r ul am ca de obi cei ; put em vedea rezul t at el eaf i sat e i n di ver se moment e vi zual i zand ecranul ut i l i zat or ul ui cu Al t -
F5( sau di n meni ul "Wi ndow/ User Screen") , di n car e r eveni m cu ori ce
t asta.- l a rul area cu TD put emseta de ex. argument el e ( di n"Run/ Ar gument s. . . ")l a "a bb ccc", i n f er . Regi st er s vom ur mar i : CX, AL i ar i n f er .
Wat ches
7/25/2019 Limbajul_Assembler_-_lectia_2
31/37
vom ur mar i : l dc_n, l dc, buf f , [ byt e pt r SI - 1] , [ byt e pt r SI ] ,[ byt e pt r SI +1] , [ byt e pt r DI - 1] , [ byt e pt r DI ] , [ byt e pt r DI +1] .
Exerci t i i :- - - - - - - - - -
I n gener al pr ogr amel e se vor r ul a cu TD; cel e ref er i t oar e l a ar gument ei nl i ni a de comanda se vor l ansa de pe prompter ( cu ar gument e) .Pr ogr amel e mar cat e cu ( *) se vor r eal i za i n cl asa.
I I . 1) ( cat e 1 punct pent r u f i ecar e st r uct ur a si mul at a)Scr i et i pr ogr ame demonst r at i ve i n car e sunt si mul ate cu "CMP" si " J xx"str uctur i l e de cont r ol whi l e, do ( di n l bj . C) , r epeat ( di n l bj .
Pascal ) ,swi t ch ( di n l bj . C) r esp. case ( di n l bj . Pascal ) .
I I . 2) ( 2. 5 puncte) ( *)Pr ogr am de or donar e a tr ei var i abi l e byt e x, y, z, decl ar at e cu
i ni t i al i zarei n pr ogr am( i n f i nal Se va ver i f i ca CU TD ca x
7/25/2019 Limbajul_Assembler_-_lectia_2
32/37
1=pr i m.
I I . 7) ( 3 puncte)
Progr am car e cal cul eaza suma di vi zor i l or unui numar nat ur al . Numarulest edat i nt r - o var i abi l a n de t i p wor d decl ar at a cu i ni t i al i zar e i n
progr am;suma va f i st ocat a i n f i nal i nt r - o var i abi l a s de t i p wor d.
I I . 8) ( 3 punct e) ( *)Progr am car e cal cul eaza suma ci f r el or i n baza 10 al e unui numar
nat ur al .Numar ul est e dat i nt r - o vari abi l a n de t i p word decl ar at a cu
i ni t i al i zarei n pr ogr am; suma va f i st ocat a i n f i nal i nt r - o var i abi l a s de t i p
word.
I I . 9) ( 2. 5 puncte) ( *)Pr ogr am car e cal cul eaza f act or i al ul unui numar nat ur al . Numar ul est edat i nt r - o var i abi l a n de t i p wor d decl ar at a cu i ni t i al i zar e i n
progr am;f act or i al ul va f i s tocat a i n f i nal i nt r- o var i abi l a s de t i p word.
I I . 10) ( 2. 5 puncte) ( *)Progr am car e cal cul eaza 1+2+. . . +n, unde n est e o var i abi l a word
decl ar at acu i ni t i al i zare (numar nat ur al ) i n pr ogr am. Suma va f i st ocat a i n
f i nali nt r - o var i abi l a s de t i p wor d.
I I . 11) ( cat e 2 punct e pent r u f i ecar e di n cel e doua oper at i i ) ( *)Progr ame car e cal cul eaza suma/ di f erent a a doua numera nat ural emul t i oct et
f ol osi nd ci cl ur i LOOP. Numer el e vor f i date pr i n cod, sub f or ma adoua
var i abi l e a, b de t i p byt e i ni t i al i zat e cu cat e un si r de 5 octeti -el e
se vor aduna/ scadea byte cu byte, cat e o per eche l a f i ecar e i t er ati e,cu
t r anspor t / i mprumut corespunzat or pent r u per echea urmatoar e. Pent r ust ocar ea r ezul t at ul ui se va decl ar a o var i abi l a c de t i p byte ur mat a
de5 octet i nei ni t i al i zat i . Numar ul de byt es ( 5) va f i dat i nt r - o
var i abi l a
n decl ar at a cu i ni t i al i zar e si va f i l uat de acol o ( si event uali ncar cat
i n CX) .
I I . 12) ( cat e 10 punct e pent r u f i ecar e di n cel e doua oper at i i )La f el ca l a pr obl ema I I . 11, dar cu i nmul t i r e si i mpar t i r e.
I I . 13) ( 2. 5 puncte) ( *)Pr ogr am pent r u eval uar ea expr esi ei ( ( a+b) - ( a+c) ) - ( d- e) , a, b, c, d, e
f i i ndvar i abi l e de t i p wor d decl ar at e cu i ni t i al i zar e i n pr ogr am cu
r espect i vval or i l e 10, 20, 15, 4, 3. Se va f ol osi ur mat or ul al gor i t m:
7/25/2019 Limbajul_Assembler_-_lectia_2
33/37
( a) push a, push b( acum st i va cont i ne ( conveni m var f ul spr e st anga) : 20, 10)
( c) pop doua val or i , cal cul ez suma l or si push aceasta suma
( acum st i va cont i ne val oar e pr i mei par ant eze, adi ca: 30)( d) push a, push c( acum st i va cont i ne opz. par ant ezei 2 si val . par ant ezei 1: 15,
10, 30)( d) l a f el ca (c )
( acum st i va cont i ne val . par ant ezel or 1, 2, adi ca: 25, 30acest i a sunt opz. pt . par ant eza 3, cea care i ncl ude par ant ezel e
1, 2)( e) pop doua val or i , cal cul ez di f er ent a l or si push aceast a di f er nt a
( acum st i va cont i ne val oar e par ant ezei mar i 3, adi ca: 5obs. ca ( e) di f er a de ( C) doar pr i n f apt ul ca se f ace scader e, nuadunare)
( f ) push d, push e( acum st i va cont i ne opz. par ant ezei 4 si val . par ant ezei 3: 3, 4,
5)( g) l a f el ca ( e)
( acum st i va cont i ne val . par ant ezel or 3, 4, adi ca: 1, 5acest i a sunt opz. ul t i mei op. di n expr esi a mar e)
( h) l a f el ca ( e)( acum st i va cont i ne val oar ea f i nal a: 4)
I n f i nal val oar ea expr esi ei ( 4) se va st oca i nt r - o var i abi l a x.
I I . 14) ( 4 puncte) ( *)Pr ogr am pent r u eval uar ea unei expr esi i oar ecar e i n f or ma post f i xat a
( f ormapost f i xat a pl eaca de l a repr ezent ar ea oper at i ei ca f unct i e cu numel ef unct i ei l a sf ar si t x+y = ( x, y) + si el i mi nar ea par ant ezel or si
vi rgul ei ;ast f el ( a+b) *c = ab+c* i ar a*c+b*c = ac*bc*+) .Expr esi a are ca oper anzi numer e byte si ca operat or i "+" s i " - "
bi nar i .Ea va f i dat a sub f or ma unei var i abi l e i ni t i al i zat a l a decl ar ar e cu unst r i ng ce cont i ne expr esi a si se ter mi na cu "$" , de exempl u expr esi a
di npr obl ema I I . 13 va f i dat a ast f el :
e db 10, 20, ' +' , 10, 15, ' +' , ' - ' , 4, 3, ' - ' , ' - ' , ' $'
Al gor i t mul de eval uar e gener al i zeaza cel di n pr obl ema I I . 13, si anume:( 0) Not am cu i poz. cur ent a i n e si cu e( i ) byt e- ul de l a aceast a
poz i t i e;
( a) i : =0( b) Daca e( i ) =' $' sal t l a ( f )( c) Daca e( i ) ' +' , ' - ' ( adi ca e oper and) at unci push e( i )
si sal t l a ( e)( d) Daca e( i ) =' +' at unci pop doua val or i , cal c. suma l or , push
rezul t at ulsi sal t l a ( e)
Daca e( i ) =' - ' at unci pop doua val or i , cal c. di f . l or , pushrezul t at ul
si sal t l a ( e)( e) i : =i +1 s i sal t l a ( b)( f ) Pop o val oar e ( este rezul t at ul f i nal al expr esi ei ) s i o sal vez i n
x.
7/25/2019 Limbajul_Assembler_-_lectia_2
34/37
I I . 15) ( 2. 5 puncte) ( *)Pr ogr am car e cal cul eaza suma bi t i l or ( numar ul bi t i l or egal i cu 1) di n
r epr ezent area i nt er na a unui numar nat ur al . Numarul est e dat i nt r - ovar i abi l a n de t i p word decl ar at a cu i ni t i al i zar e i n pr ogr am; suma vaf i
st ocat a i n f i nal i nt r - o var i abi l a s de t i p wor d. Se vor f ol osi op. deshi f t ar e si op. l ogi ce pent r u a mut a/ sel ecta bi t i i .
Ex: nr. 11001000 00001111 - - > suma bi t i l or = 7
I I . 16) ( 2. 5 puncte)Pr ogr am car e const r ui est e i magi nea i n ogl i nda a conf i gur at i ei di n
l ocat i aunei var i abi l e wor d decl ar at a cu i ni t i al i zar e i n pr ogr am; i magi nea se
vaconstr ui i n aceeasi l ocat i e. Se vor f ol osi op. de shi f t ar e, r ot i r e,l ogi ce.
Ex: nr . 11001000 00001111 - - > 11110000 00010011
I I . 17) ( 3 puncte) ( *)Pr ogr am car e r ot est e cu 1 l a st anga i n mod uni f or m bi t i i di nt r - un si r
deoct et i decl ar at s i i ni t i al i zat i n program( bi t ul semni f i cat i v car e
i esedi n octet ul af l at l a adr esa n sa i nt r e i n bi t ul zer o al octet ul ui
af l atl a adr esa n+1) . I ndi cat i e: f ol osi r ea r epet at a de "RCL oct et , 1".
r ang 7 0 7 0 7 0Exempl u: 10000001 10000010 11000100 - - > 00000011 00000101
10001001
adr . 1 2 3
I I . 18) ( 3 puncte) ( *)Pr ogr am car e r eal i zeaza adunar ea a+b ( de 16 bi t i ) f ol osi nd op. l ogi ce
sishi f t ar i , conf or m ur mat or ul ui al gor i t m:( a) f ac c : = a xor b si obt i n cel e 16 ci f r e al e sumei daca n- am t i ne
contde t r anspor t ur i l e de pe f i ecar e pozi t i e;
( b) f ac d : = a and b si obt i n t r anspor t ur i l e de l a cel e 16 poz. al esumei
( acest ea t r ebui e adunat e l a pozi t i i shi f t at e l a st g. cu 1, darpot
apar ea noi t r anspor t ur i )
( c) daca d=0. . . 0, STOP ( avemc=a+b)( e) f ac e : = d shi f t at l a st g cu 1( f ) f ac a: =c, b: =e si sal t l a ( a)
Pent r u si mpl i t ate put em consi dera a=AX, b=BX, suma=CX; vom f ol osi catmai
put i ne l ocat i i supl i ment ar e ( c, d, e) , i ar acestea pot f i r egi str i i ,di n
memor i e sau di n st i va.
I I . 19) ( 3 puncte) ( *)Pr ogr am car e r eal i zeaza i nmul t i r ea a*b ( f ara semn, de 16 bi t i )
f ol osi ndshi f t ar i si adunar i , conf or m ur mat or ul ui al gor i t m ( car e se bazeaza pe
7/25/2019 Limbajul_Assembler_-_lectia_2
35/37
scr i erea l ui a ca pol i nom i n put er i l e l ui 2 s i apl .di s t r i but i vi tat i i , de
ex. 10 * b = ( 2 3 + 2 1) *b = b*2 3 + b* 2 1) :
( a) f ac c : = 0( b) daca a=0, STOP ( avem c=a*b)( c) daca a i mpar ( a and 0001h 0) f ac c : = c+b( d) f ac a: =a shi f t at l a dr . cu 1 ( i . e. i mpar t l a 2) ,
f ac b: =b shi f t at l a st g. cu 1 ( i . e. i nmul t esc cu 2) ,si sal t l a (b)
Pent r u si mpl i t ate put em consi dera a=AX, b=BX, pr odusul =CX, si caAL=BL=0
( pent r u ca r ez. sa i ncapa i n 16 bi t i ) ; vom f ol osi cat mai put i nel ocat i i
supl i ment ar e, i ar acest ea pot f i r egi st r i i , di n memor i e sau di nst i va.
I I . 20) ( 2 puncte) ( *)
Progr am care cal cul eaza maxi mumul el ement el or unui vect or de byt esf ol osi nd
un ci cl u LOOP. Vect or ul va f i dat sub f or ma unei var i abi l ei ni t i al i zat a l a
decl ar ar e cu un si r de byt es, i ar l ungi mea l ui pr i nt r - o var i abi l ai ni t i al i zat a de asemenea l a decl ar ar e.
I I . 21 ( 2 puncte)Ca l a pr obl ema I I . 20, dar progr amul va determi na numarul el ement el or
nul edi n vector.
I I . 22) ( 2 puncte)
Pr ogr am car e cal cul eaza pr odusul scal ar a doi vect or de byte ( vect or i isuntdat i sub f or ma a doua var i abi l e i ni t i al i zat e l a decl ar ar e cu cat e un
s i rde byt es, i ar l ungi mea l or pr i nt r - o var i abi l a i ni t i al i zat a de
asemenea l adecl ar ar e) .
I I . 23) ( 5 puncte)Pr ogr am pent r u sor t ar ea unui vect or de bytes. Vect orul va f i dat sub
f or maunei var i abi l e i ni t i al i zat a l a decl ar ar e cu un s i r de byt es, i ar
l ungi meal ui pr i nt r - o var i abi l a i ni t i al i zat a de asemenea l a decl ar ar e.
Vect or ulsor t at se va const r u i n aceeasi l ocat i e ca vect or ul sur sa.
I I . 24) ( 5 puncte)Pr ogr am car e det er mi na el ement el e di st i nct e di nt r - un vect or de bytes
sil e pune i nt r - un nou vect or . Vect or ul sur sa va f i dat sub f or ma uneivar i abi l e i ni t i al i zat a l a decl ar ar e cu un si r de byt es, i ar l ungi meal ui pr i nt r - o var i abi l a i ni t i al i zat a de asemenea l a decl ar ar e. Pent r uvect or ul r ezul t at se va decl ar a o var i abi l a byte ur mat a de ni st e
byt esnei ni t i al i zat i .
Ex: 4, 2, 1, 2, 2, 1, 3 - - > 4, 2, 1, 3
7/25/2019 Limbajul_Assembler_-_lectia_2
36/37
I I . 25) ( 5 puncte)Pr ogr am car e cal ul eaza combi nar i de n l uat e cat e k, f ol osi nd
t r i unghi ull ui Pascal ( const r ui t i nt r - un vector de n+1 l ocat i i t r ansf or matsuccesi v) .Numerel e n si K sunt dat e sub f orma a doua var i abi l e decl arate cui ni t i al i zar e, i ar pent r u vectorul de l ucru se va decl ar a o var i abi l aur mat a de un numar r ezonabi l de oct et i nei ni t ai l i zat i .
Toat e numerel e vor f i de t i p byt e.
I I . 26) ( 3 puncte)Pr ogr am car e det er mi na val oar e unui pol i nom i nt r - un punct , f ol osi nd
schemal ui Hor ner . Vect or ul coef i ci ent i l or se va da sub f or ma unei var i abi l ebyt e i ni t i al i zat a l a decl ar ar e cu un si r de byt es, gr adul si punctul
se
vor da sub f or ma unor var i abi l e byt e decl ar at e cu i ni t i al i zar e.
I I . 27) ( 15 puncte)Pr ogr am de i nmul t i r e a doua mat r i ci l i ni ar i zat e. Mat r i ci l e sur sa se
dausub f or ma unor var i abi l e i ni t i al i zat e l a decl ar ar e cu si r ur i de
byt es,di mensi uni l e l or se dau sub f or ma a t r ei var i abi l e byte decl arat e cui ni t i al i zar e, pent r u mat r i cea r ezul t at se va decl ar a o var i abi l a byt eur mata de un numar cor espunzator de bytes nei ni t i al i zat i .
I I . 28) ( 8 puncte)Progr am care cal cul eaza suma el ement el or maxi me al e col unei mat r i ci
l i ni ar i zat e ( di n f i ecar e col oana se i a cat e un si ngur el ement maxi m) .Mat r i cea se da sub f or ma unei var i abi l e i ni t i al i zat e l a decl ar ar e cuun
si r de bytes, di mensi uni l e ei se dau sub f orma a doua var i abi l e bytedecl arate cu i ni t i al i zare.
Ex: 1 2 38 1 5 - - > 8 + 2 + 5 = 151 2 4
I I . 29) ( 5 puncte) ( *)Pr ogr am car e si mul eaza f unct i a "s t r ncmp" di n l i mbaj ul C.Oper at i a se va apl i ca unor st r i ngur i decl ar at e cu i ni t i al i zar e i n
pr ogr am ( si t er mi nat e cu 0) i ar r aspunsul va f i st ocat i nt r - o var i abi l a x de
t i p byt esub f or ma: 1=mai mi c, 0=egal , 2=mai mar e.
I I . 30) ( 5 puncte)Pr ogr am car e numar a t oat e apar i t i i l e unui si r ca subcuvant i n al t si r .Oper at i a se va apl i ca unor st r i ngur i decl ar at e cu i ni t i al i zar e i n
pr ogr am ( si t er mi nat cu 0) i ar r aspunsul va f i st ocat i nt r - o var . n de t i pbyt e.
I I . 31) ( 4 puncte) ( *)Pr ogr am car e const r ui est e i magi nea i n ogl i nda a unui si r ( i magi nea se
va
7/25/2019 Limbajul_Assembler_-_lectia_2
37/37
const r ui i n aceeasi l ocat i e) . Oper at i a se va apl i ca unui st r i ngdecl ar at
cu i ni t i al i zar e i n pr ogr am si t er mi nat cu 0.
Ex: "abadc" - - > "cdaba"
I I . 32) ( 6 puncte) ( *)Progr am care se l anseaza cu ni st e numere natur al e date ca argument e i nl i ni a de comanda si af i saza suma l or.
Exempl u: prog 12 0 3 45 ==> af i saza: 60I ndi cat i e: f i ecar e ar gument ( car e est e st r i ng) va f i conver t i t l a
word,se aduna word- ur i l e, apoi suma se conver t est e l a st r i ng si se
af i seazacu "i nt 21h", f uncti a 9; di f er ent a i nt r e codul ASCI I al unei ci f r e sinumarul pe car e i l r epr ezi nt a est e 48d (ex: "123" => ( ' 1' - 48) *100 +( ' 2' - 48)*10 + ( ' 3' - 48) = 1*100 + 2*10 + 3 = 123) .
I I . 33) ( 4 puncte)Pr ogr am car e cal cul eaza "combi nar i de n l uat e cat e k" ( "n" si "k"
var i abi l edecl ar at e cu i ni t i al i zar e) f ol osi nd t r i unghi ul l ui Pascal . Pr ogr amul
vaf ol osi un si ngur vector, i n car e va gener a succesi v l i ni i l e di n
t r i unghi .Rezul t at ul f i nal va f i stocat i nt r - o al t a var i abi l a di n pr ogr am.
Bi bl i ograf i e:~~~~~~~~~~~~~1. "Gavi n' s Gui de to 80x86 Assembl y",
I nt r enet : ht t p: / / www. r edbr i ck. dcu. i e/ ~creech/ assembl y/ asm. ht ml2. "x86 Assembl y Language FAQ - General "I nt er net : ht t p: / / www. f aqs. or g/ f aqs/ assembl y- l anguage/ x86/ gener al /
3. "Mi cr opr ocesoarel e 8086/ 80286/ 80386 Pr ogr amarea i n l i mbaj deasambl are"
I r i na At hanasi u, Al exandr u Panoi u, ed. Teor a, 19924. "Li mbaj e si cal cul at or "
Vl ad Bazon, ed. Pet r i on5. "Progr amarea i n assembl er"
Dan Somnea, Teodor Vl adut , ed. Tehni ca, 1992
DANI EL DRAGULI CIoct ombri e, 2005
act ual i zat : 21 noi embr i e 2005