leksione 9-10

60
Leksione 9-10: Proçedurat Leksione 9-10: Proçedurat Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine

Upload: tyfgffcjyvd

Post on 29-Mar-2015

304 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: leksione 9-10

Leksione 9-10: ProçeduratLeksione 9-10: Proçedurat

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine

Page 2: leksione 9-10

HyrjeHyrje

• Lidhja me një Librar i të jashtme• Lidhja me një Librar i të jashtme• Libraria e lidhur Book• Operime Stive(stack)• Përcaktimi dhe përdorimi i Proçedurave• Projektimi i programit duke përdorur Procedurat

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine2

Page 3: leksione 9-10

Libraria e LidhLibraria e Lidhuur r BookBook

• Hyrje në Libraritë e Lidhura• Hyrje në Libraritë e Lidhura• Thirrja e një proçedure Librarie• Lidhja me një Library• Proçedura Librarie – Hyrje• Proçedura Librarie – Hyrje• Gjashtë Shembuj

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine3

Page 4: leksione 9-10

Hyrje në Hyrje në LibrarLibraritë e Lidhitë e Lidhuurara

• Një skedar që përmban proçedura të kompiluara në kod makine• I konstruktuar nga një ose më shumë skedarë OBJ

• Për të ndërtuar një librari, . . .• Fillojmë me një ose më shumë skedare burimorë ASM• Fillojmë me një ose më shumë skedare burimorë ASM• Asemblojmë secilin prej tyre në skedarë OBJ• Krijojmë një skedar libtarie bosh(prapashtesa .LIB)• Krijojmë një skedar libtarie bosh(prapashtesa .LIB)• Shtojmë skedarin(et) OBJ te skedari i librarisë, duke

përdorur programin ndihmës ndihmës -- Microsoft LIB utility

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine4

Page 5: leksione 9-10

Thirrja e një Thirrja e një ProProççedureedure LibrarLibrarieie

• Thirrja e një Proçedure Librarie me përdorimin e instrunksionit CALL. Disa proçedura kërkojnë argumentë hyres. Direktiva INCLUDE kopjon prototipet e proçedurave hyres. Direktiva INCLUDE kopjon prototipet e proçedurave (deklarations).

• Shembulli i mëposhtëm afishon në konsolë "1234":

INCLUDE Irvine32.inc.code

mov eax,1234h ; argumenti hyr ës

• Shembulli i mëposhtëm afishon në konsolë "1234":

mov eax,1234h ; argumenti hyr ëscall WriteHex ; shfaq numrin hexcall Crlf ; fundi i rreshtit

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine5

Page 6: leksione 9-10

LiLidhjadhja me njëme një LibrarLibrarii

• Programet lidhen te libraria Irvine32.lib duke përdorur komandën e lidhësit (linker) brenda një skedari batch me emër make32.bat.

• Vini re dy skedaret LIB: Irvine32.lib, dhe kernel32.lib• Vini re dy skedaret LIB: Irvine32.lib, dhe kernel32.lib

• Skedari i fundit është pjesë e Microsoft Win32 Software Development Kit (SDK)

Your program Irvine32.liblinksto

links to

Programi JuajProgrami Juaj

kernel32.lib

executes

links to

can link to

kernel32.dll

executes

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine6

Page 7: leksione 9-10

Në vazhdimNë vazhdim

• Lidhja me një Librari të jashtme• Lidhja me një Librari të jashtme• Libraria e lidhur Book• Operime Stive(stack)• Përcaktimi dhe përdorimi i Proçedurave• Projektimi i programit duke përdorur Procedurat

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine7

Page 8: leksione 9-10

ProProççeduredura a LibrarLibrarieie -- HyrjeHyrje (1 (1 nganga 4)4)

CloseFile – Mbyll një skedar disku të hapur

Clrscr – Mbyll konsolen, lokalizon kursorin në këndin e majtë lartClrscr – Mbyll konsolen, lokalizon kursorin në këndin e majtë lart

CreateOutputFile – Krijon skedar të ri disku për shkrim në output mode

Crlf – Shkruan sekuencën e fundit të rreshtit te dalja standarte

Delay - Ndalon ekzekutimin e programit për interval n milisekonda

DumpMem - Shkruan bllokun e kujtesës te dalja standarte në hex

DumpRegs – Afishon regjistrat e përdorimit të përgjithshëm dhe flamujt (në hex)DumpRegs – Afishon regjistrat e përdorimit të përgjithshëm dhe flamujt (në hex)

GetCommandtail – Kopjon command-line args në tabelë bytesh

GetMaxXY - Merr numrat e kolonave, rreshtave në baferin e dritarës së konsoles

GetMseconds - Kthen milisekondat e kaluara nga mesnataGetMseconds - Kthen milisekondat e kaluara nga mesnata

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine8

Page 9: leksione 9-10

ProProççeduredura a LibrarLibrarieie -- HyrjeHyrje ((22 nganga 4)4)

GetTextColor – Kthen ngjyrat e sfondit dhe të planit të parë të tekstit aktiv në dritarën e konsolës

Gotoxy - Lokalizon kursorin te rreshti dhe shtylla në konsolë

IsDigit - Vendos flamurin Zero nëse AL përmban kod ASCII për shifrat dixhitale dhjetore (0–9)

MsgBox, MsgBoxAsk – Afishon boks mesazhi popup

OpenInputFile – Hap skedar ekzistues për hyrje

ParseDecimal32 – Konverton string integer pa shenjë në binar

ParseInteger32 - Konverton string integer me shenjë në binarParseInteger32 - Konverton string integer me shenjë në binar

Random32 - Gjeneron numër të plotë 32-bit pseudo të rastit në rangun nga 0 në FFFFFFFFh

Randomize – Përcakton elementin e gjeneratorit numrave të rastitRandomize – Përcakton elementin e gjeneratorit numrave të rastit

RandomRange - Gjeneron numër të plotë pseudo të rastit në një rang specifik

ReadChar – Lexon një karakter të vetëm nga hyrja standarte

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine9

ReadChar – Lexon një karakter të vetëm nga hyrja standarte

Page 10: leksione 9-10

ProProççeduredura a LibrarLibrarieie -- HyrjeHyrje ((33 nganga 4)4)

ReadFromFile – Lexon një skedar disku të hapur për hyrje në një buffer

ReadDec - Lexon 32-bit numër dhjetor të plotë pa shenjë nga tastiera

ReadHex - Lexon 32-bit numër hexadecimal të plotë nga tastieraReadHex - Lexon 32-bit numër hexadecimal të plotë nga tastiera

ReadInt - Lexon 32-bit numër dhjetor të plotë pa shenjë nga tastiera

ReadKey – Lexon një karakter nga buffer-i i hyrjes së tastierës

ReadString – Lexon një string nga Hyrja standarte, e përfunduar nga [Enter]

SetTextColor – Vendos ngjyrat e planit të parë dhe sfondit të të gjithë nënsekuencave të tekstit të dalë në konsolë

StrLength – Kthen gjatësinë e një vargu karakteresh (string)

WaitMsg – Afishon një mesazh, pret për shtypjen e tastit Enter

WriteBin – Shkruan numër të plotë 32-bit pa shenjë në format binar ASCII.WriteBin – Shkruan numër të plotë 32-bit pa shenjë në format binar ASCII.

WriteBinB – Shkruan një numër të plotë në format byte, word, ose doubleword WriteChar – Shkruan një karakter të vetëm në Daljen standarte

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine10

Page 11: leksione 9-10

ProProççeduredura a LibrarLibrarieie -- HyrjeHyrje ((44 nganga 4)4)

WriteDec – Shkruan një numër të plote 32-bit pa shenjë në format dhjetor

WriteHex - Shkruan një numër të plote 32-bit pa shenjë në format hexadecimal

WriteHexB – Shkruan byte, word, ose doubleword në format hexadecimal

WriteInt - Shkruan një numër të plote 32-bit me shenjë në format dhjetor

WriteString – Shkruan string të përfunduar me null te dritarja e konsolësWriteString – Shkruan string të përfunduar me null te dritarja e konsolës

WriteToFile - Shkruan buffer-in në një skedar të hapur për Dalje(output file)

WriteWindowsMsg – Afishon mesazhin e gabimit më aktual të gjenëruar nga MS-WindowsMS-Windows

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine11

Page 12: leksione 9-10

ShembullShembull 11

Pastron ekranin, vonon programin për 500 milisekonda, pastaj zbraz flamujtë dhe regjistrat.

.codecall Clrscrmov eax,500mov eax,500call Delaycall DumpRegs

EAX=00000613 EBX=00000000 ECX=000000FF EDX=00000000

Shembull Daljeje(output):

EAX=00000613 EBX=00000000 ECX=000000FF EDX=00000000

ESI=00000000 EDI=00000100 EBP=0000091E ESP=000000F6

EIP=00401026 EFL=00000286 CF=0 SF=1 ZF=0 OF=0

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine12

Page 13: leksione 9-10

ShembullShembull 22

Afishon një string të përfunduar me null dhe zhvendos kursorin në krye të rreshtit tjetër të ekranit.

.datastr1 BYTE “Gjuha Assembly është e thjeshtë!",0

.codemov edx,OFFSET str1call WriteStringcall WriteStringcall Crlf

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine13

Page 14: leksione 9-10

Shembull Shembull 2a2a

Afishon një string të përfunduar me null dhe zhvendos kursorin në krye të rreshtit tjetër të ekranit (përdor çiftin e ndërthhurur CR/LF).

.datastr1 BYTE "Assembly language is easy!",0Dh,0Ah,0

e ndërthhurur CR/LF).

str1 BYTE "Assembly language is easy!",0Dh,0Ah,0

.codemov edx,OFFSET str1call WriteStringcall WriteString

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine14

Page 15: leksione 9-10

ShembullShembull 33

IntVal = 35

Afishon një numër të plotë pa shenjë në format binar, dhjetor, dhehexadecimal, secili në një rresht të veçantë.

IntVal = 35.code

mov eax,IntValcall WriteBin ; display binarycall WriteBin ; display binarycall Crlfcall WriteDec ; display decimalcall Crlfcall WriteHex ; display hexadecimalcall WriteHex ; display hexadecimalcall Crlf

Shembull Daljeje(output):

0000 0000 0000 0000 0000 0000 0010 00113523

Shembull Daljeje(output):

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine15

23

Page 16: leksione 9-10

SembullSembull 44

Pret një hyrje stringu nga përdoruesi. EDX tregon te stringu dheECX përcakton numrin maksimal të karakterëve që përdoruesi lejohet të kalojë.

.datafileName BYTE 80 DUP(0)

lejohet të kalojë.

fileName BYTE 80 DUP(0)

.codemov edx,OFFSET fileNamemov edx,OFFSET fileNamemov ecx,SIZEOF fileName – 1call ReadString

Një byte null shtohet automatikisht te stringu.

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine16

Page 17: leksione 9-10

ShembullShembull 55

Gjëneron dhe afishon 10 numra të plotë pseudo të rastit me shenjë në rangun 0 – 99. E kalon çdo numër të tillë të plotë teWriteInt në EAX dhe e afishon atë në rresht të veçantë.

.codemov ecx,10 ; loop counter

WriteInt në EAX dhe e afishon atë në rresht të veçantë.

mov ecx,10 ; loop counter

L1: mov eax,100 ; ceiling valuecall RandomRange ; generate random intcall WriteInt ; display signed intcall WriteInt ; display signed intcall Crlf ; goto next display lineloop L1 ; repeat loop

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine17

Page 18: leksione 9-10

ShembullShembull 66

Afishon një string të përfunduar me null, me karaktere të verdha në sfond blu.

.datastr1 BYTE "Color output is easy!",0

.codemov eax,yellow + (blue * 16)call SetTextColorcall SetTextColormov edx,OFFSET str1call WriteStringcall Crlf

Ngjyra e sfondit para se t’i shtohet ngjyrës së planit të parë shumëzohet me 16.

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine18

shumëzohet me 16.

Page 19: leksione 9-10

Në vazhdimNë vazhdim

• Lidhja me një Librari të jashtme• Lidhja me një Librari të jashtme• Libraria e lidhur Book• Operime Stive(stack)• Përcaktimi dhe përdorimi i Proçedurave• Projektimi i programit duke përdorur Proçedurat

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine19

Page 20: leksione 9-10

OperOperime Stive(stack)ime Stive(stack)

• Stiva gjatë kohës së ekzekutimit (Runtime Stack)• Stiva gjatë kohës së ekzekutimit (Runtime Stack)• Operimi PUSH• Operimi POP• Instruksionet PUSH dhe POP• Përdorimi i instruksioneve PUSH dhe POP• Shembull: Këmbim i mbrapshtë i një Stringu• Shembull: Këmbim i mbrapshtë i një Stringu• Instruksione që kanë të bejnë me stivën.

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine20

Page 21: leksione 9-10

StStiva gjatë kohës së ekzekutimitiva gjatë kohës së ekzekutimit

• Imagjinoni një stivë pjatash . . .• Pjatat shtohen vetëm nga kreu(top)• Pjatat hiqen vetëm nga kreu(top)• Struktura LIFO

789

10 top

234567

12

bottom

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine21

Page 22: leksione 9-10

StStiva gjatë kohës së ekzekutimitiva gjatë kohës së ekzekutimit

• Menaxhohet nga NJ.Q.P.(CPU), duke përdorur dy regjistra• SS (stack segment)• ESP (stack pointer) *

Offset

00000006 ESP00001000

00000FFC

00000FF8

00000FF4

00000FF0

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine22

* SP në Mënyrën Reale të Adresimit

Page 23: leksione 9-10

OperiOperimimi PUSH PUSH (1 (1 nganga 2)2)

• Një operim 32-bit push zvogëlon treguesin e stivesme 4 dhe kopjon vlerën e vendndodhjes së treguar nga treguesi i stivës.nga treguesi i stivës.

BEFORE AFTER

00000006 00000006

ESP

00001000

00000FFC 000000A5

ESP00001000

00000FFC

00000FF8

00000FF4

00000FF0

00000FF8

00000FF4

00000FF0 00000FF000000FF0

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine23

Page 24: leksione 9-10

OperiOperimimi PUSHPUSH (2 (2 nganga 2)2)

• E njëjta stivë pas vendosjes së dy numrave të tjerë të plotë:

Offset

0000000600001000

Offset

00000FFC 000000A5

ESP

00000FF8

00000FF4

00000001

00000002

00000FF0

Stiva rritet për nga poshtë stives. Hapësira nën treguesin ESP është gjithnjë e disponueshme (përveç rastit kur stiva tejmbushet[overflowed]).

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine24

tejmbushet[overflowed]).

Page 25: leksione 9-10

OperiOperimimi POPPOP

• Kopjon vlerën e stivës stack[ESP] në një regjistër ose variabël.• Shton n te treguesi ESP, ku n është ose 2 ose 4.

• Vlera e n-së varet nga atributi i operandit që merr të dhenat• Vlera e n-së varet nga atributi i operandit që merr të dhenat

BEFORE AFTER

00000006

000000A5

00000006

000000A5

00001000

00000FFC

00001000

00000FFC000000A5

00000001

00000002 ESP

000000A5

00000001 ESP

00000FFC

00000FF8

00000FF4

00000FFC

00000FF8

00000FF4

00000FF0 00000FF0

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine25

Page 26: leksione 9-10

InstruInstruksksionionëtët PUSH dPUSH dhehe POPPOP

• PUSH sintaksa:• PUSH r/m16• PUSH r/m16• PUSH r/m32• PUSH imm32• PUSH imm32

• POP sintaksa:• POP r/m16• POP r/m32

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine26

Page 27: leksione 9-10

Përdorimi iPërdorimi i PUSH dPUSH dhehe POPPOP

Ruajnë dhe rimarrin vlerat e regjistrave kur ato përmbajnë vlera të rendësishme. Instruksionet PUSH dhe POP përseritën në rend të kundërt.

push esi ; push reg jistr atpush ecx

rend të kundërt.

push ecxpush ebx

mov esi,OFFSET dwordVal ; afisho një kujtesëmov ecx,LENGTHOF dwordValmov ecx,LENGTHOF dwordValmov ebx,TYPE dwordValcall DumpMem

pop ebx ; rimerr regjistratpop ecxpop esi

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine27

Page 28: leksione 9-10

ShembullShembull: : Cikël i përseritur(Cikël i përseritur(Nested LoopNested Loop))

Kur krijojmë një cikël të përseritur, para se të futemi te cikli i brendshëm, bëjmë push numëruesin e ciklit të jashtëm :

mov ecx,100 ; vendos numeruesin e ciklit të jashtëm

L1: ; fillon cikli i jashtëm

push ecx ; ruan numëruesin e ciklit të jashtëmpush ecx ; ruan numëruesin e ciklit të jashtëm

mov ecx,20 ; vendos numeruesin e ciklit tëbrendshëm

L2: ; fillon cikli i brendshëmL2: ; fillon cikli i brendshëm

;;loop L2 ; përserit ciklin e brendshëmloop L2 ; pop ecx ; rimerr numeruesin e ciklit të jashtëm

loop L1 ; përserit ciklin e jashtëm

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine28

Page 29: leksione 9-10

ShembullShembull: : KembimKembim ii mbrapshtëmbrapshtë ii njënjë StringuStringu

• Përdorim një cikël me adresim të indeksuar• Bejmë Push çdo karakter në stivë• Bejmë Push çdo karakter në stivë• Fillojmë me kreun e stringut, bejmë pop stivën në rend të

kundërt, ndërfutim çdo karakter mbrapa te stringu• Kodi burimor• Kodi burimor

• Pyetje: Pse duhet vendosur çdo karakter në EAX para se të behet push?

Sepse vetëm vlera word (16-bit) ose doubleword (32-bit) mund të bëhen push në stivë.

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine29

Page 30: leksione 9-10

Rradha JuajRradha Juaj. . .. . .

• Duke përdorur si pikë fillimi programin e Këmbimit të mbrapshtë të një Stringu,

• #1: Modifikoni programin në mënyrë që përdoruesi të mund të bejë hyrje të një stringu që përmban nga 1 deri në 50 të bejë hyrje të një stringu që përmban nga 1 deri në 50 karaktere.

• #2: Modifikoni programin në mënyrë që ai të bejë hyrje një • #2: Modifikoni programin në mënyrë që ai të bejë hyrje një listë me numra të plotë 32-bitësh nga përdoruesi, dhe pastaj të afishojë numrat me renditje të kundert.

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine30

Page 31: leksione 9-10

Instruksione tInstruksione të tjera Stiveë tjera Stive

• PUSHFD dhe POPFD• Bën push dhe pop registrin EFLAGS• Bën push dhe pop registrin EFLAGS

• PUSHAD ben push regjistrat me qëllim të përgjithshëm me 32-bit në stivëme 32-bit në stivë• renditja: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI

• POPAD bën pop të njëjtat regjistra si më sipër nga stiva me renditje të kundërtme renditje të kundërt• PUSHA dhe POPA bëjnë të njëjtën gje për regjistrat me

16-bit16-bit

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine31

Page 32: leksione 9-10

Rradha JuajRradha Juaj. . .. . .

• Shkruani një program që bën sa vijojnë:• Shkruani një program që bën sa vijojnë:• Përcakton vlera të plota te EAX, EBX, ECX, EDX, ESI,

dhe EDI• Përdor PUSHAD për të bërë push regjistrat me qëllim • Përdor PUSHAD për të bërë push regjistrat me qëllim

të përgjithshëm në stivë• Duke përdorur një cikël, programi juaj duhet të bëjë

pop çdo numër të plotë nga stiva dhe ta afishojë atë në pop çdo numër të plotë nga stiva dhe ta afishojë atë në ekran

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine32

Page 33: leksione 9-10

Në vazhdimNë vazhdim

• Lidhja me një Librari të Jashtme• Lidhja me një Librari të Jashtme• Libraria e Lidhur Book• Operime stive(stack)• Përcaktimi dhe përdorimi i proçedurave• Projektimi i programit duke përdorur Proçedurat

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine33

Page 34: leksione 9-10

Përcaktimi dhe përdorimi i Përcaktimi dhe përdorimi i ProProççedureduraveave

• Krijimi i Proçedurave• Dokumentimi i Proçedurave• Dokumentimi i Proçedurave• Shembull: Proçedura SumOf• Instruksionet CALL dhe RET• Instruksionet CALL dhe RET• Proçedura e përsëritur Calls• Etiketa(Labels) Lokale dhe Globale• Etiketa(Labels) Lokale dhe Globale• Parametra Proçedure• Symbole Flowchart• Symbole Flowchart• Operatori USES

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine34

Page 35: leksione 9-10

Ndërtimi i Ndërtimi i ProProççedureduraveave

• Probleme të mëdha mund të ndahen në probleme më të vogla për t’i bërë ato më të menaxhueshme

• Një procedure është ekuivalentja ASM e një funksioni • Një procedure është ekuivalentja ASM e një funksioni Java ose C++

• Më poshtë vijon një proçedurë në gjuhë assembly e • Më poshtë vijon një proçedurë në gjuhë assembly e quajtur shembull:

shembull PROCshembull PROC..ret

shembull ENDPshembull ENDP

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine35

Page 36: leksione 9-10

DoDokkumentiumentimimi i i ProProççedureduraveave

• Një përshkrim i të gjitha detyrave që kryhen nga proçedura.

Dokumentacion i sugjeruar për çdo proçedurë:

• Një përshkrim i të gjitha detyrave që kryhen nga proçedura.

• Merr(Receives): Një list me parametra hyrjeje; forma e përdorimit të tyre dhe kërkesat.

• Kthen(Returns): Një përshkrim i vlerave të kthyera nga proçedura.

• Kërkon(Requires): Listë fakultative e kërkesave të quajtura kushte paraprake(preconditions) që duhet të kënaqen para se të kushte paraprake(preconditions) që duhet të kënaqen para se të thirret proçedura.

Nëse proçedura thirret pa kënaqur kushtet paraprake, ajo mund të mos prodhojë daljen e pritur.

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine36

Page 37: leksione 9-10

ShembullShembull: Pro: Proççeduredura a SumOfSumOf

;-------------------------------------------------- -------SumOf PROCSumOf PROC;; Llogarit dhe kthen shumën e tre numrave të plotë 32-bit.; Percepton: EAX, EBX, ECX, si tre numra të plotë. Mund të; jenë me apo pa shenjë .; jenë me apo pa shenjë .; Kthen: EAX = shuma, dhe gjendjen e flamujve(Carry ,; Overflow, etj.) që ndryshon.; Kërkesat: asnjë; --------------------------------------------------- ------; --------------------------------------------------- ------

add eax,ebxadd eax,ecxret

SumOf ENDPSumOf ENDP

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine37

Page 38: leksione 9-10

InstruInstruksionet ksionet CALL dCALL dhehe RETRET

• Instruksioni CALL thërret një proçedurë• Instruksioni CALL thërret një proçedurë• Bën push ofset-in e instruksionit pasardhës në stivë• Kopjon adresën e proçedurës së thirrur në EIP

• Instruksioni RET na kthen nga një proçedurë• Instruksioni RET na kthen nga një proçedurë• Bën pop kreun e stivës në EIP

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine38

Page 39: leksione 9-10

Shembull me Shembull me CALLCALL--RETRET (1 (1 nganga 2)2)

main PROC00000020 call MySub

0000025 është ofset-i i00000020 call MySub00000025 mov eax,ebx..

main ENDP

0000025 është ofset-i iinstruksionit që vjen menjëherë pas instruksionitCALL

main ENDP

MySub PROC00000040 mov eax,edx00000040 është ofset-i i..ret

MySub ENDP

00000040 është ofset-i iinstruksionit të parë brendaMySub

MySub ENDP

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine39

Page 40: leksione 9-10

Shembull me Shembull me CALLCALL--RETRET ((22 nganga 2)2)

00000025 ESP 00000040Instruksioni CALL bën push vlerën 00000025

EIPpush vlerën 00000025 mbi stivë, dhe ngarkon00000040 në EIP

00000025 ESP

EIP

00000025Instruksioni RET bën popvlerën 00000025 nga stiva në EIP

EIP

(stiva paraekzekutimit të instruksionit RET)

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine40

(stiva paraekzekutimit të instruksionit RET)

Page 41: leksione 9-10

Thirrje e përsëritur(Thirrje e përsëritur(NestedNested)) ProProççeduredurashashmain PROC . . call Sub1 exit

Gjatë kohës që thirret, the stivapërmban të tre adresat që do

main ENDP

Sub1 PROC . . (ret to main)

përmban të tre adresat që do kthehen:

call Sub2 retSub1 ENDP

Sub2 PROC .

(ret to main)

(ret to Sub1)

(ret to Sub2) ESP . . call Sub3 retSub2 ENDP

(ret to Sub2) ESP

Sub3 PROC . . retSub3 ENDP

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine41

Sub3 ENDP

Page 42: leksione 9-10

Etiketa(Etiketa(LabelsLabels) ) LoLokkalalee ddhehe GlobalGlobalee

Një etiketë lokale është e dallueshme vetëm te instruksionet brenda së njëjtës proçedurë. Një etiketë globale është e dallueshme kudo.

main PROCjmp L2 ; gabim(error)

L1:: ; etiketë global e

dallueshme kudo.

L1:: ; etiketë global eexit

main ENDP

sub2 PROCL2: ; etiketë locale

jmp L1 ; okretret

sub2 ENDP

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine42

Page 43: leksione 9-10

ParametParametra ra ProProççedureduree (1 (1 nganga 3)3)

• Një proçedurë e mirë mund të jetë e përshtatshme • Një proçedurë e mirë mund të jetë e përshtatshme për përdorim në shumë programe të ndryshme

• Por jo nëse ajo referohet në emra specifik variablash

• Parametrat ndihmojnë për t’i bërë proçedurat më elastike për arsye se vlerat e parametrave mund të ndryshohen gjatë kohës së ekzekutimitndryshohen gjatë kohës së ekzekutimit

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine43

Page 44: leksione 9-10

ParametParametra ra ProProççedureduree ((22 nganga 3)3)

ArraySum PROC

Proçedura ArraySum llogarit shumën e një matrice. Ajo i referohet dy emrave specifik variablash:

ArraySum PROCmov esi,0 ; indeksi i matricësmov eax,0 ; vendos shumën në zeromov ecx,LENGTHOF myarray ; vendos numrin e element eve

L1: add eax, myArray [esi] ; shton çdo numër te shumaadd esi,4 ; tregon te numri tjetërloop L1 ; përserit sipas përmasave të

; matricës; matricësmov theSum ,eax ; ruan shumënret

ArraySum ENDP

Si do llogaritnit shumën e dy ose tre matricave me të njëjtin program?

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine44

Page 45: leksione 9-10

ParametParametra ra ProProççedureduree ((33 nganga 3)3)

Ky version i ArraySum kthen shumën e çfarëdo matrice të tipit doubleword adresa e së cilës ndodhet në ESI. Shuma kthehet në EAX:

ArraySum PROC; Përcepton: ESI tregon në një matricë me doublewords , ; ECX = numri elementeve të matricës.; Kthen : EAX = s huma

në EAX:

; Kthen : EAX = s huma;-------------------------------------------------- ---

mov eax,0 ; vendos shumën në zero

L1: add eax,[esi] ; shton çdo numër te shumaL1: add eax,[esi] ; shton çdo numër te shumaadd esi,4 ; tregon te numri tjetërloop L1 ; përserit sipas përmasave

; të matricësretret

ArraySum ENDP

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine45

Page 46: leksione 9-10

SSiimbolmbole Bllokskemash(e Bllokskemash(FlowchartFlowchart))

• Simbolet që vijojnë janë simbolet bazë për ndërtimin e bllokskemave(flowcharts):

begin / end

manual input

process (task) display

decisionprocedurecall

yes

nono

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine46

Page 47: leksione 9-10

Bllokskema për Bllokskema për begin

ArraySum Procedure

Bllokskema për Bllokskema për ProProççeduredurënënArraySumArraySum

begin

push esi, ecx

ArraySumArraySum eax = 0

add eax,[esi] push esi push ecx mov eax,0

add esi, 4

ecx = ecx − 1

mov eax,0

AS1: add eax,[esi] add esi,4 loop AS1

ecx > 0?yes

no

pop ecx pop esi

no

pop ecx, esi

end

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine47

Page 48: leksione 9-10

Rradha JuajRradha Juaj. . .. . .

Ndërtoni një bllokskemë që shpreh pseudokodin që vijon:pseudokodin që vijon:

Merr si hyrje notën e kontrollit nga përdoruesiif( nota > 70 )

afisho “Kalon"elseelse

afisho “Përserit"endifendif

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine48

Page 49: leksione 9-10

. . . (. . . (ZgjidhjaZgjidhja)) beginFillim

input exam gradeinput exam grade

yesno

Kalo noten e kontrollit

grade > 70?yesno

Nota

Afisho Afisho display "Pass"display "Fail"Afisho “Kalon”

Afisho “Përserit”

endFund

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine49

Page 50: leksione 9-10

Rradha JuajRradha Juaj. . .. . .

• Modifiko bllokskemën e mësipërme në mënyrë që përdoruesi të kalojë nota kontrolli derisa të shtypet përdoruesi të kalojë nota kontrolli derisa të shtypet

• –1

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine50

Page 51: leksione 9-10

OperatorOperatori i USESUSES• Shfaq listën e regjistrave që ruhen

ArraySum PROC USES esi ecxmov eax,0 ; vendos shumën në zeromov eax,0 ; vendos shumën në zeroetc.

MASM gjeneron kodin që duket me gold:MASM gjeneron kodin që duket me gold:

ArraySum PROCpush esipush ecxpush ecx..pop ecxpop ecxpop esiret

ArraySum ENDP

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine51

Page 52: leksione 9-10

Kur nuk duhet të bëjmëKur nuk duhet të bëjmë push push njënjë regregjjististëërr

Shuma e tre regjistrave ruhet në EAX në rreshtin (3), por instruksioni POP e zevëndëson atë me vlerën fillestare të EAX në rreshtin (4):

SumOf PROC ; shuma e tre numrave të plotëpush eax ; 1

në rreshtin (4):

push eax ; 1add eax,ebx ; 2add eax,ecx ; 3pop eax ; 4pop eax ; 4ret

SumOf ENDP

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine52

Page 53: leksione 9-10

Në vazhdimNë vazhdim

• Lidhja me një Librari të Jashtme• Lidhja me një Librari të Jashtme• Libraria e Lidhur Book• Operime stive(stack)• Përcaktimi dhe përdorimi i proçedurave• Projektimi i programit duke përdorur Proçedurat

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine53

Page 54: leksione 9-10

ProjektimiProjektimi ii programitprogramit duke duke përdorurpërdorurProçeduratProçeduratProçeduratProçedurat

• Top-Down Design (Zbërthimi funksional) përfshin sa • Top-Down Design (Zbërthimi funksional) përfshin sa vijojnë:• dizenjoni programin tuaj para se të filloni të kodoni• ndani detyrat e mëdha në më të vogla• përdorni strukture hierarkike të bazuar në thirrje

proçedureproçedure• testoni veç proçedurat individuale

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine54

Page 55: leksione 9-10

ProgramProgramii Mbledhja e Numrave të plotëMbledhja e Numrave të plotë(1 (1 nganga 4)4)

Përshkrimi: Shkruani një program që nxit përdoruesin për kalimin shumë numrave të plotë 32-bit, i ruan ato në për kalimin shumë numrave të plotë 32-bit, i ruan ato në një matricë, llogarit shumën e matricës, dhe e shfaq atë në ekran.

Hapat kryesorë:

• Nxit përdoruesin për kalimin shumë numrave• Nxit përdoruesin për kalimin shumë numrave

• Llogarit shumën e matricës

• Afisho shumën• Afisho shumën

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine55

Page 56: leksione 9-10

ProProççedureduraa DesignDesign (2 (2 nganga 4)4)

MainClrscr ; pastron ekraninClrscr ; pastron ekraninPromptForIntegers

WriteString ; afishon stringunReadInt ; lexon integer

ArraySum ; shuma e numr. të plotëDisplaySumDisplaySum

WriteString ; afishon stringunWriteInt ; afishon numrin e plotëWriteInt ; afishon numrin e plotë

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine56

Page 57: leksione 9-10

StruStrukkturturaa ChartChart (3 (3 nganga 4)4)

SummationProgram (main)

Clrscr PromptForIntegers ArraySum DisplaySum

WriteStringWriteString ReadInt WriteIntWriteInt

Ngjyra gri tregon

procedura procedura librarie

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine57

Page 58: leksione 9-10

ShembullShembull Daljeje(Daljeje(OutputOutput)) (4 (4 nganga 4)4)

Kalo një nr të plotë me shenjë: 550

Kalo një nr të plotë me shenjë : -23

Kalo nj ë nr të plotë me shenjë : - 96Kalo nj ë nr të plotë me shenjë : - 96

Shuma e numrave të plotë është: +431

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine58

Page 59: leksione 9-10

PërmbledhjePërmbledhje

• Proçedura –bllok i emertuar kodi të ekzekutueshëm• Runtime stack – strukturë LIFO• Runtime stack – strukturë LIFO

• mban adresat e kthyera, parametrat, variablat lokalë• PUSH – shton një vlerë te stiva(stack)• POP – heq vlerën nga stiva• POP – heq vlerën nga stiva

• Përdorni librarinë Irvine32 për të gjitha H/D standartedhe konvertimet e të dhenavedhe konvertimet e të dhenave• Deshironi të dini më shumë? Studioni librarinë me

kodin burimor në dosjen c:\Irvine\Examples\Lib32

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine59

Page 60: leksione 9-10

FundFund

Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine60