seanca 8 - procedura te avancuara
DESCRIPTION
Assembly - Procedura te Avancuara.pdfTRANSCRIPT
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 »»
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
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
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
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
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
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
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
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
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
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
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
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ëë
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
}
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ë
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
7/21/2019 Seanca 8 - Procedura Te Avancuara
http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 32/51
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
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
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
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
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ë
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
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
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
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
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
7/21/2019 Seanca 8 - Procedura Te Avancuara
http://slidepdf.com/reader/full/seanca-8-procedura-te-avancuara 43/51
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
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
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
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
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
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
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
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