+ All Categories
Home > Documents > Limbajul_Assembler_-_lectia_2

Limbajul_Assembler_-_lectia_2

Date post: 25-Feb-2018
Category:
Upload: diana-draghici
View: 213 times
Download: 0 times
Share this document with a friend

of 37

Transcript
  • 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