seanca 8 - procedura te avancuara

51
Leksione Leksione 15 15 - 16 16  roce ura roce ura t vanc vancuara uara Gjuha Gjuha Assembly Assembly Department Departmenti i Matematikës & Informatikës i i Matematikës & Informatikës  n vers nvers e « . a e . a e»

Upload: anonymous-rrgvqj

Post on 05-Mar-2016

11 views

Category:

Documents


0 download

DESCRIPTION

Assembly - Procedura te Avancuara.pdf

TRANSCRIPT

Page 1: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 1/51

LeksioneLeksione 1515 -- 1616

roce uraroce ura tt vancvancuarauaraGjuhaGjuha AssemblyAssembly

DepartmentDepartmenti i Matematikës & Informatikësi i Matematikës & Informatikës

n versn vers ee «« . a e. a e »»

Page 2: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 2/51

PPëërmbledhjermbledhje

NdrNdry yshoretshoret LokaleLokale dhedhe Kuadrate Stive (Kuadrate Stive (StackStackFramesFramesThjeshtThjeshtëzimi i Shkrimit tëëzimi i Shkrimit të ProcedurProceduraveave

KrijimKrijimii ii ProgramProgrameve Shumëeve Shumë--ModulModulësheëshe

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 2

Page 3: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 3/51

KalimKalim ParametrParametri i -- RisRishhiikimkimKalimi i parametrit në gjuhën assembly ndryshonMë i kom likuar se ërdorimi në uhet e nivelit të lartë

Në gjuhë assemblyVendosen gjithë parametrat e kërkuar në një hap. ruajtjePastaj thirret (call) procedura

Përdoren dy tipe hapësire ruajtjeRegjistrat : përdoren regjistrat me qëllim të përgjthshëm ( registermethod )

Memoria: ërdoret stiva stack method

Mekanizmat e zakonshëm të kalimit të parametraveKalim-si as-vlerës: kalohet vlera e arametrit

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 3

Kalim-me-referencë: kalohet adresa e parametrit

Page 4: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 4/51

ParametrParametra Stivea StiveKonsideroni procedurën vijuese maxmaxint max int x int int z

int temp = x;if (y > temp) temp = y;if (z > temp) temp = z;return temp;

}

Thirr e rocedure: = 1 2

Parametra Regjistrimov eax, num1

Parametra Stiveush num3

mov ebx, num2mov ecx, num3call max

push num2push num1call max

Anasjelltë

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 4

mov mx, eax mov mx, eax

Page 5: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 5/51

KalimKalim ParametrParametrashash nnëë StStivëivëProcedura e thirrjes bën push parametrat në stivë (stack )Procedura maxmax merr parametrat nga stiva

Parametrat vendosen në stive në rend të kundërtnë rend të kundërtParametrat lokalizohen relativrelativishtisht meme ESPESP

Stiva

max PROC

mov EAX,[ESP+4]Kalimi iParametrave

E përdorur

high addr

ESPESP num3 ESP + 12

jge @1 mov EAX,[ESP+8]

@1: cmp EAX,[ESP+12]

në stivë push num3

ush num2Return Addr

ESP num2num1ESP

ESPESP + 4ESP + 8

ESP

jge @2 mov EAX,[ESP+12]

@2: ret

push num1call max

mov mx,EAX

E papërdorur

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 5

max ENDPadd ESP,12

Page 6: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 6/51

AAksksesiesimi imi i ParametrParametrave nëave në StStivëivëKurKur parametrparametratat janë kaluar në janë kaluar në st stivëivëVlerat e parametrave duken paspas adresës së kthimitadresës së kthimit ( (returnreturn addressaddress))

PërPër aksakseses në vlerat enë vlerat e parametrparametrave mund të përdorimave mund të përdorim ESPESP[ESP+4] për num1, [ESP+8] për num2, dhe [ESP+12] për num3

r o, mun n rys o r n a roce ur s

Një zgjedhje më e mirë është përdorimi iNjë zgjedhje më e mirë është përdorimi iregjistritregjistrit EBPEBP high addr

Stack

EBPEBPquhet tregues baze ( base pointerbase pointer )

EBPEBPnuk ndryshon gjatë procedurës

Used

num3num2

ESP + 8ESP + 12

s me op m n e nPërdor EBPEBPpër lokalizimin e parametrave

G atë kthimit n a rocedura EBPEBPduhet tëUnused

Return Addrnum1ESP + 4

ESP

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 6

restaurohet

Page 7: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 7/51

Përdorimi iPërdorimi i RegRegj jistristritit BPBP((Base PointerBase Pointer ))EBP përdoret për lokalizimin e parametrave në stivëSi çdo regjistër tjetër, EBP duhet ruajtur para se të përdoret

max PROC push EBP

Stack

, mov EAX,[EBP+8]

cmp EAX,[EBP+12]Kalim iarametrave

Used

high addr

ESPESP num3 EBP + 16

mov EAX,[EBP+12]@1: cmp EAX,[EBP+16]

jge @2

në stivë

push num3ush num2

Return Addr

ESP num2num1ESP

ESPSaved EBPESP

EBP + 8EBP + 12

EBP + 4EBP

mov EAX,[EBP+16]@2: pop EBP

ret

push num1call max

mov mx,EAX

Unused

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 7

max ENDPadd ESP,12

Page 8: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 8/51

Kush duhet të pastrojëKush duhet të pastrojë StStivënivën??Kur kthehemi nga një thirrje procedure …Kush duhet të largojë parametrat & të pastrojë stivën?

Pastrimi mund të bëhet nga procedura thirrëseadd ESP, 12 ; do të pastrojë stivën

Mund të përcaktohet me opsion një integer në instruksionin ret

ret 12 ; do të kthehet & do të pastrojë stivën Return instruction is used to clean up stack

ret n ; n është një konstante integer

EIP = [ESP]ESP = ESP + 4 + n

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 8

Page 9: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 9/51

Shembull Pastrimi i bërë ngaShembull Pastrimi i bërë nga ReturnReturn max PROC

Thirrësi

mov EBP, ESP mov EAX,[EBP+8]

pus num

push num2

push num1

Stack

cmp EAX,[EBP+12]

jge @1

mov EAX,[EBP+12]

call max

mov mx,EAX

E përdorur

high addr

ESPESP num3 EBP + 16

@1: cmp EAX,[EBP+16]

jge @2

e nevojshmee nevojshmeqë thirrësiqë thirrësitë astro ëtë astro ë

Return Addr

ESP num2num1ESP

ESPSaved EBPESP

EBP + 8EBP + 12

EBP + 4EBP

,

@2: pop EBP

ret 12

stivënstivën E

papërdorur

Pastrim i stivësPastrim i stivës

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 9

max ENDP

Page 10: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 10/51

ParametrParametraa RegistrRegistrii vs Atyrevs Atyre të Stivëstë StivësKalimi iKalimi i ParametrParametraveave nnëë RegRegj jistristraaAvantazhe : I volitshëm i lehtë në ërdorim i sh e të në akses

Disavantazhe : Vetëm pak parametra mund të kalohenDisponohet vetëm një numër i vogël regjistrash

Shpesh këto regjistra përdoren dhe duhet të ruhen në stivë

Vendosja e vlerve të regjistrit në stivë shfuqizon avantazhin e tyreKalimiKalimi ii ParametraveParametrave nënë StStivëivë

Avantazhe : Mund të kalohen mjaft parametra

un t a o en stru tura t m a t nas e matr caDisavantazhe : Aksesi i parametrave nuk është dhe aq i thjeshtë

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 10

Page 11: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 11/51

NNë vazhdimë vazhdim . . .. . .

NdrNdryyshoretshoret LokaleLokale dhedhe Kuadrate Stive (Kuadrate Stive (StackStackFramesFramesThjeshtThjeshtëzimi i Shkrimit tëëzimi i Shkrimit të ProcedurProceduraveave

KrijimKrijimii ii ProgramProgrameve Shumëeve Shumë--ModulModulësheëshe

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 11

Page 12: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 12/51

Ndryshore të Procedurave LokaleNdryshore të Procedurave LokaleNdryshoret eNdryshoret e procprocedurave lokale janë nga natyraedurave lokale janë nga natyra d diinaminamikkeeJanë të qenësishme kur thirret (invoked) procedura

Nuk mund tëNuk mund të r ruhet hapësirë për ndryshoretuhet hapësirë për ndryshoret lo lokkalale nëe nësegmentsegmentin e të dhënavein e të dhënave

r arsye se n a omo m t ap s r s es t statMbetet aktiv edhe pas kthimit nga procedura e thirrur

Dhe se ai nuk punon me procedura rekursive Ndryshoret lNdryshoret lo okkalale mund të ruhene mund të ruhen n nëë regregj jistristraa oosese ststivëivë

Registrat janë ideale për ndryshore lokale kur ...Ndr shoret anë të vo la në madhësi ërdoren sh esh (p.sh. numerues cikli )

Ndryshoret lokale ruhen në stivë kur …

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 12

. .Procedura bën thirrje Rekursive

Page 13: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 13/51

Kuadrat Stive (Kuadrat Stive ( Stack FrameStack Frame ))PëPërr çdo thirrjeçdo thirrje procedureprocedureThirrësi bën push parametrat në stivë

high addr

Stiva

Adresa e kthimit ruhet nga instruksioni CALLCALLProcedura ruan EBPEBPdhe vendos EBPEBPtek ESPESP

E përdorur

Parametrat

Registrat ruhen nga procedura

Kuadrat StiveKuadrat Stive ((Stack FrameStack Frame) )

e urn rEBP

VariablatLokale

Saved EBP

Hapësira e stives që ruhet përHapësira e stives që ruhet për … …

Parametrat

ESP

Regjistrate ruajtur

Ruajtjen e RegjistraveVariablat Lokale

papërdorurnjihet edhe sinjihet edhe siActivation RecordActivation Record

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 13

E dizenjuarE dizenjuar posaçerishtposaçerisht pëpërr çdoçdo procedurprocedurëë

Page 14: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 14/51

Shembull mbiShembull mbi NdryshoretNdryshoret LoLokkalaleeKonsideroni procedurën vijuese: median

Për llogaritjen e median së një matrice me numra të plotë

Së pariSë pari , kopjo matricën (për shmangjen e modifikimit të saj)në një matricë lokale

ytyt , r n t matr c n o a e

Së tretiSë treti , gjej një vlerë të plotë në mes të matricës së renditur

int medianmedian (int array[], int len) {int local[100]; // matrica lokale (100 int)for (i=0; i<len; i++)

local[i] = array[i]; // Kopjon matricënbubbleSort (local,len); // Rëndit matricën lokalereturn local len/2 // Kthen elementin e mesit

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 14

}

Page 15: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 15/51

Kuadrat Stive pëKuadrat Stive për Procedurer Procedurenn MedianMedianhigh addr

StStivaivamedianmedian PROCpush EBP

Thirrësiush len

ESPESP

E përdorur

array addr

len

mov EBP, ESPsub ESP, 400ush re s

push OFFSET arraycall median

ESP

EBP + 8EBP + 12

ESPEBPe urn r

MatricëLokale me

Saved EBP

. . .

pop {regs}

, +

ESP

Registrat erua tur

100 DWORD

,pop EBPret 8

susu ,,

AAlokonlokon 400 bytes400 bytesnnëë ststivëivë pëpërr

EBP – 400

E papërdorur

ESPmedianmedian ENDP

matricën lokalematricën lokaleVendos një kufi në maximum array length = 100 int

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 15

[EBP – 400] është adresa e matricës lokale në stivë

Page 16: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 16/51

ProcedurProceduraa MedianMedian –– slide 1slide 1 nganga 22high addr

Stackmedianmedian PROCpush EBP ; ruan EBP

=

EBP + 8EBP + 12

E përdorur

array addr

len

,

sub ESP, 400 ; matrica lokalepush ECXI RR RR +

ESPEBPe urn r

Local Arra

Saved EBPpush EDImov ECX, [EBP+12] ; lenmov ESI EBP+8 adr. matricës

EBP – 400

Registrate rua tur

100 DWORD

lea EDI, [EBP-400] ; adr. lokaleL1:

mov EAX, ESIE

papërdorur

ESP

mov [EDI], EAXadd ESI, 4add EDI, 4

KKopopjon matricën jon matricën

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 16

loop L1

Page 17: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 17/51

ProcedurProceduraa MedianMedian –– slide 2slide 2 nganga 22; Thërret procedurën sort për rënditjen e matricës lokale; ParametrParametratat kalohen në stivë

ush DWORD PTR EBP+12high addr

Stack

lea EDI, [EBP-400]push EDI ; adr. e matricës lokalecall sort ; rëndit matricën lokale

EBP + 8EBP + 12

E përdorur

array addr

len

mov ESI, [EBP+12] ; lenshr ESI, 1 ; ESI = len/2mov EAX, [EDI+ESI*4] ; local[len/2]

+ESPEBP

e urn r

MatricaLokale me

Saved EBP

pop EDIpop ESIpop ECX

EBP – 400

Registrate rua tur

100 DWORD

Restore Regs

mov ESP, EBP ; liro lokaletpop EBP ; restauro EBPret 8 ; return & cleanup

E papërdorur

ESP

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 17

medianmedian ENDPENDP

Page 18: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 18/51

NNë Vazhdimë Vazhdim . . .. . .

NdrNdry yshoretshoret LokaleLokale dhedhe Kuadrate Stive (Kuadrate Stive (StackStackFramesFramesThjeshtThjeshtëzimi i Shkrimit tëëzimi i Shkrimit të ProcedurProceduraveave

KrijimKrijimii ii ProgramProgrameve Shumëeve Shumë--ModulModulësheëshe

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 18

Page 19: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 19/51

Thjeshtëzimi iThjeshtëzimi i ShkrimitShkrimit tëtë ProcedurProceduravaveeDirektiva PROCPROC

Specifikon parametrat

re t va

Deklaron variabla lokalë

o rono ron rere t vt vaa ttdobishme që thjeshtëzondobishme që thjeshtëzonsh ri in esh ri in e rocedurroceduravavee

Direktiva PROTOPROTOSpecifikon prototipe procedure

Direktiva INVOKEINVOKE

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 19

Page 20: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 20/51

DireDirekktivtivaa PROCPROCDeklaron një procedurë me një listë parametrash me opsion

Sintaksa:

procEmer PROC [USES reglist], paramList

param1: type1 , param2: type2 , . . .

paramEmer :type

BYTE, SBYTE, WORD, SWORD, DWORD, … etj.

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 20

Page 21: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 21/51

Shembull meShembull me PROCPROCProcedura SwapSwap: shkëmben dy ndryshore të plota 32-bit

D arametra stive: tr1 and tr2

swap PROC USES esi edi ,

presja është e domosdoshme

, ptr2:PTR DWORD ; tregues te i nr i dytë

mov esi,ptr1 ; merr treguesit

s a eparametrave

mov edi,ptr2push DWORD PTR [esi] ; push numrin e parëpush DWORD PTR [edi] ; push numrin e dytë

pop DWORD PTR [esi] ; zëvendëso nr. e parëpop DWORD PTR [edi] ; zëvendëso nr. e dytëret

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 21

swap ENDP

Page 22: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 22/51

MASMMASM GGj jenereneronon Kodin VijuesKodin Vijuesswap PROC USES esi edi ,

ptr1:PTR DWORD,

swap PROCpush ebp

ptr2:PTR DWORD

mov esi, ptr1

mov e p, esppush esipush edi

Përdor esi edi

mov edi,ptr2push DWORD PTR [esi]ush DWORD PTR [edi]

,mov edi, [EBP+12] ;ptr2push DWORD PTR [esi]

pop DWORD PTR [esi]pop DWORD PTR [edi]ret

pop DWORD PTR [esi]pop DWORD PTR [edi]o edi

swap ENDP

pop esileaveret 8

ret

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 22

swap ENDP

Page 23: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 23/51

InstruInstruksksionionetet ENTERENTER ddhehe LEAVELEAVEInstruksioniInstruksioni ENTERENTER krijon kuadratkrijon kuadrat ststive për njëive për një procedurprocedurëë

Bën Push EBPEBPnë stivë push ebp

Vendos EBPEBPte baza e kuadratit të stivës mov bp,espRuan hapësirë për ndryshoret lokale sub esp,nbytes

ShembullShembull::myprocmyproc PROCPROC

myprocmyproc PROCPROC

ush eb en er ,

nbytes level

ss e u va ene u va enmeme

mov ebp, espsub esp, 8

IInstrunstruksksionionii LEAVELEAVEështë ekuivalent meështë ekuivalent memov esp, ebp

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 23

pop e p

Page 24: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 24/51

SpecifiSpecifikues Gjuhekues GjuheDDireirekktiv tivaa .MODEL.MODEL

Specifikon modelin e kujtesës së programit specifikuesin e

.MODEL.MODEL MemoryModelMemoryModel [,[, ModelOptionsModelOptions]]ShembullShembull:: . MODELMODEL latlat stdcallstdcall

SSpecifipecifikuesi i Gjuhës përcaktonkuesi i Gjuhës përcaktonSkemën e Emërtimit të Procedurave Marrëveshet e Kalimit të ParametraveOpsione: STDCALL, C, FORTRAN, SYSCALLSTDCALL, C, FORTRAN, SYSCALL, etj.

Ne jemi duke përdorurNe jemi duke përdorur specifispecifikuesin e gjuhëskuesin e gjuhës STDCALLSTDCALLArgumentet e Procedurës vendosen në stivë në rend të kundërt

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 24

Page 25: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 25/51

DireDirekktivtivaa LOCALLOCALDDireirekktivtivaa LOCALLOCALdedekklarlaronon njënjë listlistëë ndryshoreshndryshoresh lolokkalalee

Nd ek direkt direktivën PROCPROC

Çdo ndryshoreje i përcaktohet një tipSintaksa: LOCALLOCALvarlistvarlist

SSiintantaksaksa::

LOCALLOCALvar1:var1: type1type1 , var2:, var2: type2type2 ,, . . .. . .ShembullShembull::myprocmyproc PROCPROC

var :var : ,, ; var s t njvar2:var2: WORDWORD,, ; var2 është një WORD

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 25

Page 26: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 26/51

Shembull meShembull me LOCALLOCALPër njëPër një procedurprocedurëë myprocmyproc MASMMASM ggj jenereneronon::

myprocmyproc

LOCAL var1:DWORD,var2: WORD,

push ebpmov ebp, esp

var3[20]: BYTEmov eax, var1

add esp, -28mov eax, [EBP-4]mov bx EBP-6,

mov dl, var3. . .

mov dl, [EBP-26]. . .

remyprocmyproc ENDPENDP retmyprocmyproc ENDPENDP

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 26

Page 27: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 27/51

MMë tepër përë tepër për NdryshoretNdryshoret LoLokkalaleeNdryshoret lNdryshoret lookkalale mund të jenë të madhësive të ndryshmee mund të jenë të madhësive të ndryshmeKKrri ohen nëi ohen në ststivë n aivë n a dirdirekektivtivaa LOCALLOCAL::

8-bit: i përcaktohet byte -it tjetër të disponueshëm16-bit: i përcaktohet në mënyrë të ngjashme kufirit tjetërwor

32-bit: i përcaktohet kufirit tjetër doubleword

high addr

Stiva

e ue uLOCALLOCAL v1:BYTE,

v2:D ORD

EBP + 4ESPEBP

E përdorur

Return Addr

v1Saved EBP

EBP – 1

v3:WORD. . .

E papërdorur

v2 v3EBP – 10EBP – 8

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 27

ShembullShembull ENDP

Page 28: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 28/51

DireDirekktivtivaa PROTOPROTOKrijon një prototip procedure

Sintaksa:

procprocEmerEmer PROTOPROTO paramListparamList

PrototPrototiipepett kërkohen përkërkohen për ……

Thirrjen e procedurave të jashtme

PROTO shfaqet në krye të programit

I le enti i i rocedurës bëhet ë vonë në ro ra

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 28

Page 29: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 29/51

Shembuj meShembuj me PROTOPROTOPrototipi për procedurën ArraySumArraySum :

,

arrayPtr: PTR DWORD, ; array pointer

arrayLen: DWORD ; array length

Prototipi për procedurën swapswap :

swapswap PROTO,

ptr1:PTR DWORD, ; 1st int pointer

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 29

Page 30: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 30/51

DireDirekktivtivaa INVOKEINVOKEINVOKEINVOKE është një zëvendësim i fuqishëm për instruksioninCALLCALL

Ju lejon të kaloni argumentë të shumëfishtë

Sintaksa: INVOKEINVOKE procEmer paramList ParamList është një listë argumentësh procedure me opsion

MASMMASMkërkon që çdo procedure e thirrur nga direktiva

Argumentët mund të jenë :VleraVlera ImediateImediate dhe sh reh e të lota inte er ex ressions Emra ndryshoreshEmra ndryshoreshAdresAdresaa

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 30

EmraEmra RegRegj jistristrii

Page 31: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 31/51

Shembuj meShembuj me INVOKEINVOKEKonsideroni prototipet vijuese të procedurave:

: :, ,

swap PROTO, ptr1 :PTR DWORD, ptr2 :PTR DWORD

MASM Gjeneron

push ecx rray um , array,ecx pus arraycall ArraySumArraySum

ADDR është operatori i Adreses

INVOKEINVOKE swapswap, ADDR var1, esi eneronpush esi

push OFFSET var1

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 31

Page 32: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 32/51

Page 33: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 33/51

RRishkrim iishkrim i ProcedurProcedurësës MedianMedian -- 22; thirrje e procedurës sortsort

lea EDI sorted

MASM Gjeneron

-

INVOKE sort, edi, len

,

push [EBP+12]push EDI

mov ESI, lenshr ESI, 1

*

mov ESI, [EBP+12]shr ESI, 1

+ *,

ret

,pop EDIpop ESI

leaveret 8

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 33

Page 34: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 34/51

MMë Tepër përë Tepër për InstruInstruksksionioninin LEALEALEA kthen adresën edhe të operandëve direkt edhe indirekt

Përdoren ër marr en e adresës së n ë arametri stive a o tënjë ndryshoreje lokale

Operatori OFFSET mund të kthejë vetëm ofset konstantesh

Ofsetet e ndryshoreve globale deklarohen në data segment

Shembull: shembull PROC, count:DWORD

LOCAL temp[20]:BYTE

,mov esi, OFFSET temp ; operand i pavlefshëmlea edi, count ; ok

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 34

lea esi, temp ; ok

Page 35: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 35/51

Në vazhdimNë vazhdim . . .. . .

NdrNdry yshoretshoret LokaleLokale dhedhe Kuadrate Stive (Kuadrate Stive (StackStackFramesFramesThjeshtThjeshtëzimi i Shkrimit tëëzimi i Shkrimit të ProcedurProceduraveave

KrijimKrijimii ii ProgramProgrameve Shumëeve Shumë--ModulModulësheëshe

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 35

Page 36: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 36/51

Çfarë ështëÇfarë është ReRekkursionursionii??The process created when . . .

Procedura A thërret procedurën B, e cila në kthimthërret procedurën A

Duke përdorur një graph në të cilin çdo nyje ështënjë procedurë & çdo brinjë është një thirrje

,A

BE

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 36

Page 37: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 37/51

KKalalkkululimi iimi i FaFakktorialtorialitit (1(1 nganga 3)3)Ky funksion llogarit faktorialin e numrit të plotë n n

int factorial (int n) * *

recursive calls backing up

v er e re e n n ru e n ç o ua ra s ve

if(n == 0)return 1;

=

4! = 4 * 3! 4 * 6 = 24

=

return n * factorial (n-1); }

3! = 3 * 2!

2! = 2 * 1! 2 * 1 = 2

3 * 2 = 6

1! = 1 * 0!

0! = 1

1 * 1 = 1

1 = 1

Pasi çdo instancë thirrjekthehet, prodhimi i kthyerre ti shumëzohet me vlerën

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 37

(base case)

e mëparshme të n -së

Page 38: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 38/51

KKalalkkululimi iimi i FaFakktorialtorialitit (2(2 nganga 3)3)FactorialFactorial PROCPROC

push ebp,

mov eax,[ebp+8] ; eax = ncmp eax,0 ; n > 0?a L1 ; o: vazhdo

mov eax,1 ; no: return 1 jmp L2

L1: dec eax pus eax ; Factoria n-1call FactorialFactorial

ReturnFact : ,

mul ebx ; eax = eax * ebxL2: pop ebp ; return EAX

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 38

FactorialFactorial ENDPENDP

Page 39: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 39/51

KKalalkkululimi iimi i FaFakktorialtorialitit (3(3 nganga 3)3)

12 n

n-1ebp 0

11

Diagrama në të djathtë tregon disare kuadrateve të arë të stivës eturn act

ebp 1

10 n-2

të krijuar nga thirrjet rekursivetek FactorialFactorial

ReturnFact

ebp 2

9 n-3

Çdo thirrje rekursive përdor 12bytes të hapësirës së stivës për:

ReturnFact

ebp 3

(etc...)

parame r n n n

Adresën e kthimit (return address)

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 39

Page 40: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 40/51

Në vazhdimNë vazhdim . . .. . .

NdrNdry yshoretshoret LokaleLokale dhedhe Kuadrate Stive (Kuadrate Stive (StackStackFramesFramesThjeshtThjeshtëzimi i Shkrimit tëëzimi i Shkrimit të ProcedurProceduraveave

KrijimKrijimii ii ProgramProgrameve Shumëeve Shumë--ModulModulësheëshe

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 40

Page 41: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 41/51

ProgramProgramee MultiMulti--ModuleModuleSkedarët e mëdha ASMASM është e vështirë të menaxhohenMund të ndahet një program module të shumëfishtë

Çdo modul është një skedar i veçantë ASMASMÇdo modul është asembluar në një skedar të veçantë OBJOBJ

skedar të vetëm EXEEXE

Ky proces quhet lidhje statikelidhje statike (static linking) Mund të lidhni gjithashtu sked. OBJ me 1 ose më shumë librari

Avantazhet:

Modulet e veçantë shkruhen, mirëmbahen, dhe korigjohen më lehtëModulet mund të ripërdoren në programe të ≠ nëse shkruhen siç duhet

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 41

Page 42: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 42/51

Krijimi i njëKrijimi i një ProgramProgramii MultiMulti--ModuleModuleHapat që ndiqen për krijimin e njëHapat që ndiqen për krijimin e një programprogramii multimulti--modulemodule

Krijoni një modul të veçantë për çdo set procedurash të lidhura

r on n s e ar p r s r e nc u e e q p rm anprototipe procedurash për procedurat e jashtme (ato që thirren

midis moduleve)Përdorni directivën INCLUDEINCLUDEpër të bërë prototprototiipepett eprocedurave tuaja të disponueshme për çdo modul

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 42

Page 43: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 43/51

Page 44: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 44/51

MModulodulii KryesorKryesorTITLETITLE Array Summation Main Module (main.asm)INCLUDEINCLUDE sum.inc

.data.dataprompt1 BYTE «Jepni një numër të plotë me shenjë: ", 0 " ,

array DWORD Count DUP(?)

.code.code

call ClrscrINVOKE ReadArray, ADDR prompt1, ADDR array, CountINVOKE ArraySum, ADDR array, Count

INVOKE DisplaySum, ADDR prompt2, eaxcall CrlfINVOKE ExitProcess,0

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 44

END main

Page 45: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 45/51

Skedari nëSkedari në INCLUDEINCLUDE; Skedari i përfshirë për Programin ArraySum (sum.inc)

.686 .. ,

.STACK.STACKINCLUDEINCLUDE Irvine32.inc

ReadArrayReadArray PROTO,ptrPrompt:PTR BYTE, ; vargu prompt

ptrArray:PTR DWORD, ; tregon tek matrica array ze: ; ma s a e ma r c s

ArraySumArraySum PROTO,ptrArray:PTR DWORD, ; tregon tek matrica

count: DWORD ; madhësia e matricësDisplaySumDisplaySum PROTO,

trProm t:PTR BYTE, ; var u rom t

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 45

theSum: DWORD ; shuma e matricës

Page 46: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 46/51

ModulModulii Read ArrayRead ArrayTITLETITLE Moduli i Leximit të Matricës (readArray.asm)INCLUDEINCLUDE sum.inc

.ReadArrayReadArray PROC USESPROC USES ecx edx esi,

prompt: PTR BYTE, array: PTR DWORD, arraysize: DWORD ,

mov edx, prompt ; adresa e promptmov esi, array ; adresa e matricës

: call ReadInt ; lexo integer në EAXcall Crlf ; shko te rreshti tjetër dalësmov [esi],eax ; ruaj në matricë

a es , ; numr e r p oloop L1ret

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 46

ea rrayea rrayENDEND

Page 47: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 47/51

ModulModulii SShhumuma e Matricësa e MatricësTITLETITLE Moduli Shuma e Matricës ( Arraysum.asmArraysum.asm )INCLUDE sum.inc

..ArraySumArraySum PROC USESPROC USES ecx esi,

ptrArray: PTR DWORD, ; trego tek matricaarraySize: DWORD ; madhësia e matricës

mov eax, 0 ; vendos shumën në zeromov esi, ptrArray

mov ecx, arraySize cmp ecx, ; array s ze <= jle L2 ; po: dil

L1: add eax, [esi] ; shto çdo nr të plotë te shuma a es , ; rego e nr e r p o

loop L1 ; persërit sa madhësia e matricësL2: ret ; kthe shumën në EAXArra Sum ENDPENDP

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 47

ENDEND

Page 48: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 48/51

ModulModulii ShfaqShfaq ShumënShumënTITLE Moduli Shfaq Shumën (displaySum.asm)

INCLUDE Sum.inc

.code.codeDisplaySumDisplaySum PROC USES eax edx, ,

theSum: DWORD ; shuma e matricës

mov edx, ptrPrompt ; trego tek prompt call WriteStringmov eax, theSumcall WriteInt ; shfaq EAX

retDisplaySumDisplaySum ENDPENDP

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 48

Page 49: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 49/51

Skedar Masiv (Skedar Masiv ( Batch FileBatch File ) i Përshtatur) i PërshtaturREM make ArraySum.batREM Skedar masiv i përshtatur për programin Shuma e Matricës

@echo offcls

assem m mo u ur mor n s e are

MLML --ZiZi --cc --FlFl --coffcoff main.asmmain.asm displaySum.asmdisplaySum.asm arraySum.asmarraySum.asm readArray.asmreadArray.asm

REMREM lilidhja e skedarëvedhja e skedarëve objeobjekkt (OBJ)t (OBJ) për të prodhuar skedarin e ekzekutueshëmpër të prodhuar skedarin e ekzekutueshëm

LINK32 main.ob dis la Sum.ob arra Sum.ob readArra .ob irvine32.libLINK32 main.ob dis la Sum.ob arra Sum.ob readArra .ob irvine32.lib

kernel32.lib /kernel32.lib /OUT:arraySum.exeOUT:arraySum.exe /SUBSYSTEM:CONSOLE /DEBUG/SUBSYSTEM:CONSOLE /DEBUG:terminateauseause

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 49

Page 50: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 50/51

PërmbledhjePërmbledhjeParametraParametra StStiveive

Më të ërshtatshëm se arametrat e re istrave Kalimi sipas vlevlerësrës ose sipas referencreferencësësInstructionet ENTERENTER dhe LEAVELEAVE

NdryshoretNdryshoret LoLokkalaleeTë krijuar në stivë duke zvogëluar treguesin e stivës

DDireirekktiv tivaa MASMMASM të lidhura metë lidhura me procedurproceduratatPROCPROC,, USESUSES,, LOCALLOCAL,, PROTOPROTO,, dhedhe INVOKEINVOKE

arrëves je t irrje ,,

ThirrjeThirrje ReRekkursiveursive PProcedurerocedure

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 50

rogramrograme S ume S um -- o uo u s es e ee ustom a eustom a e

Page 51: Seanca 8 - Procedura Te Avancuara

7/21/2019 Seanca 8 - Procedura Te Avancuara

http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 51/51

FaleminderitFaleminderit

Procedura të Avancuara Gjuha Assembly © Roland Vasili– Slide # 51