82
Leksione Leksione 19 - 20 20 Strukrurat Strukrurat dhe dhe Makrot Makrot Strukrurat Strukrurat dhe dhe Makrot Makrot Gjuha Gjuha Assembly Assembly Department Departmenti i Matematikës & Informatikës i i Matematikës & Informatikës Universit Universiteti eti «E. Çabej E. Çabej» Universit Universiteti eti «E. Çabej E. Çabej» Bazuar në slidet e Kip Rirvine për librin: Assembly Language for Intel-Based Computers 5/e, 2007.

L19-20 - Strukrurat Dhe Makrot

Embed Size (px)

DESCRIPTION

Assembly - Strukrurat Dhe Makrot

Citation preview

Page 1: L19-20 - Strukrurat Dhe Makrot

LeksioneLeksione 1199 -- 2020StrukruratStrukrurat dhedhe MakrotMakrotStrukruratStrukrurat dhedhe MakrotMakrot

Gjuha Gjuha AssemblyAssembly

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

UniversitUniversiteti eti ««E. ÇabejE. Çabej»»UniversitUniversiteti eti ««E. ÇabejE. Çabej»»

Bazuar në slidet e Kip Rirvine për librin:Assembly Language for Intel-Based Computers 5/e, 2007.

Page 2: L19-20 - Strukrurat Dhe Makrot

PërmbledhjePërmbledhje

�� StruStrukkturturatat�� StruStrukkturturatat

��MaMakkrorott

�� DireDirekktivtiva të Kushtëzuara a të Kushtëzuara AssemblyAssembly�� DireDirekktivtiva të Kushtëzuara a të Kushtëzuara AssemblyAssembly

�� Përcaktimi i Blloqeve PërsëritësePërcaktimi i Blloqeve Përsëritëse

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 2

Page 3: L19-20 - Strukrurat Dhe Makrot

StruStrukkturturatat -- PërmbledhjePërmbledhje

�� Përcaktimi i Përcaktimi i StruStrukkturturaveave�� Përcaktimi i Përcaktimi i StruStrukkturturaveave

�� DeDekklarilarim m NdryshoreNdryshoressh h StruStrukktureture

�� ReferReferim nëim në NdryshoreNdryshore StruStrukktureture�� ReferReferim nëim në NdryshoreNdryshore StruStrukktureture

�� ShembullShembull: : Afishim i Afishim i Orës sëOrës së SSiistemistemitt

�� StruStrukkturtura a të Ndërthururatë Ndërthurura ((NestedNested))�� StruStrukkturtura a të Ndërthururatë Ndërthurura ((NestedNested))

�� ShembullShembull: : Ecja e Ecja e PijanecitPijanecit

�� DeDekklarilarimimi ddhehe Përdorimi i Përdorimi i BashkimeveBashkimeve�� DeDekklarilarimimi ddhehe Përdorimi i Përdorimi i BashkimeveBashkimeve

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 3

Page 4: L19-20 - Strukrurat Dhe Makrot

StruStrukkturturaa

�� Një Një shabllonshabllon oosese motivmotiv ((patternpattern) i dhënë në një ) i dhënë në një grupgrup ndryshoreshndryshoresh të lidhur logjikishttë lidhur logjikisht. . grupgrup ndryshoreshndryshoresh të lidhur logjikishttë lidhur logjikisht. .

�� fushafusha –– element element strustrukktureture që përmban të dhënaqë përmban të dhëna

�� Aksesi i Aksesi i ProgramProgramit në njëit në një strustrukkturturëë::�� Aksesi i Aksesi i ProgramProgramit në njëit në një strustrukkturturëë::

�� tërë tërë strustrukkturturaa si një njësi si një njësi

�� fusha fusha individualindividualee�� fusha fusha individualindividualee

�� E dobishme për kalim E dobishme për kalim argumenteshargumentesh të të lidhurlidhur të të shumëfishtëshumëfishtë në një në një procedurprocedurëëshumëfishtëshumëfishtë në një në një procedurprocedurëë

�� shembullshembull: : informacioniinformacioni i i direktorisdirektorisë së skedarëveë së skedarëve

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 4

Page 5: L19-20 - Strukrurat Dhe Makrot

Përdorimi i Përdorimi i StruStrukkturturësës

Përdorimi i njëPërdorimi i një strustruktktureure përfshin tre hapa sekuencialëpërfshin tre hapa sekuencialë::

1. 1. PërcaktiminPërcaktimin e e strustrukkturturësës..

2. 2. DeDekklarlarimin eimin e një apo më shumë ndryshoreve të tipit të një apo më shumë ndryshoreve të tipit të strukturësstrukturës, , të quajtura ndryshore të quajtura ndryshore strustrukktureture ..strukturësstrukturës, , të quajtura ndryshore të quajtura ndryshore strustrukktureture ..

3. 3. Shkrimin e Shkrimin e instruinstruksksionioneveeve ekzekutuese (ekzekutuese (runtimeruntime)) që që aksesojnëaksesojnë strustrukkturturënën..

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 5

Page 6: L19-20 - Strukrurat Dhe Makrot

SSiintantaksa e Përcaktimit të ksa e Përcaktimit të StruStrukkturturësës

emri STRUCTemri STRUCT

deklarime-fushash

emri ENDSemri ENDS

• Deklarime-fushash janë identike me deklarime • Deklarime-fushash janë identike me deklarime ndryshoresh

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 6

Page 7: L19-20 - Strukrurat Dhe Makrot

StruStrukkturtura a COORDCOORD

� Struktura COORDCOORD që përdoret nga libraria programuese e MS-Windows identifikonkoordinatat X dhe Y në ekrankoordinatat X dhe Y në ekran

COORD STRUCTCOORD STRUCT

X WORD ? ; ofseti 00

Y WORD ? ; ofseti 02

COORD ENDSCOORD ENDS

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 7

Page 8: L19-20 - Strukrurat Dhe Makrot

StruStrukkturtura a NepunesNepunesStruktura është ideale për kombinimin e fushave të tipeve të ndryshme:

NepunesNepunes STRUCTSTRUCTNumId BYTE "000000000"Mbiemri BYTE 30 DUP(0)Mbiemri BYTE 30 DUP(0)Vitet WORD 0PagaHistorik DWORD 0,0,0,0

NepunesNepunes ENDSENDS

"000000000" (null) 0 0 0 0 0

NumID Mbiemri Vitet PagaHistorik

"000000000" (null) 0 0 0 0 0

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 8

Page 9: L19-20 - Strukrurat Dhe Makrot

DeDekklarilarimm NdryshoreNdryshoressh h StruStrukktureture�� Emri i Emri i StruStrukkturturësës është një tip i përcaktuar nga përdoruesi

Ndërfut inicializues zëvendësimi midis kllapave � Ndërfut inicializues zëvendësimi midis kllapave këndore:

< . . . >< . . . >< . . . >< . . . >

�� Kllapat bosheKllapat boshe <> ruajnë inicializuesit e paracaktuar të fushave të strukturëstë fushave të strukturës

� Shembuj:

.data.datapika1 COORD <5,10>.data.datapika1 COORD <5,10>pika2 COORD <>punonjes Nepunes <>

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 9

Page 10: L19-20 - Strukrurat Dhe Makrot

IniIniccializiializim i m i Fushave MatricoreFushave Matricore

� Për inicializimin e një apo më shumë elementëve të një fushe matricore përdoret operatori DUPDUP:të një fushe matricore përdoret operatori DUPDUP:

.data.data.data.datapunonjes Nepunes <,,,2 DUP(20000)>

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 10

Page 11: L19-20 - Strukrurat Dhe Makrot

MatricëMatricë StruStrukkturturaasshh

� Një matricë objektesh objektesh strustrukktureture mund të përcaktohet duke përdorur operatorin DUPDUP.

�Mund të përdoren edhe iininiccializializueuess

NumPikave = 3NumPikave = 3GjithePikat COORDCOORD NumPikave DUP(<0,0>)

RD_Depart Nepunes 20 DUP(<>)

llogaria Nepunes 10 DUP(<,,,4 DUP(20000) >)

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 11

Page 12: L19-20 - Strukrurat Dhe Makrot

ReferiReferim nëm në Ndryshore Ndryshore StruStrukkturetureNepunes STRUCT ; bytes

NumId BYTE "000000000" ; 9Mbiemri BYTE 30 DUP(0) ; 30Mbiemri BYTE 30 DUP(0) ; 30Vitet WORD 0 ; 2PagaHistorik DWORD 0,0,0,0 ; 16

Nepunes ENDS ; 57

.datapunonjes Nepunes <>

mov eax,TYPE Nepunes ; 57mov eax,SIZEOF Nepunes ; 57mov eax,SIZEOF punonjes ; 57mov eax,TYPE Nepunes.PagaHistorik ; 4mov eax,TYPE Nepunes.PagaHistorik ; 4mov eax,LENGTHOF Nepunes.PagaHistorik ; 4mov eax,SIZEOF Nepunes.PagaHistorik ; 16

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 12

Page 13: L19-20 - Strukrurat Dhe Makrot

. . . . . . vazhdimvazhdim

mov dx,punonjes.Vitetmov punonjes.PagaHistorik,20000 ; paga e parëmov punonjes.PagaHistorik,20000 ; paga e parëmov punonjes. PagaHistorik+4,30000 ; paga e dytëmov edx,OFFSET punonjes.Mbiemri

mov esi,OFFSET punonjesmov esi,OFFSET punonjesmov ax,(Nepunes PTR [esi]).Vitet

mov ax,[esi].Vitet ; operand i pavlefshëm (dykuptimësi)mov ax,[esi].Vitet ; operand i pavlefshëm (dykuptimësi)

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 13

Page 14: L19-20 - Strukrurat Dhe Makrot

Cikël Nëpërmjet një Cikël Nëpërmjet një Matrice PikashMatrice PikashVendos koordinatat X dhe Y të matricës GjithePikat për të rritur sekuencialisht vlerat (1,1), (2,2), ...

.dataNumPikave = 3GjithePikat COORD NumPikave DUP(<0,0>)GjithePikat COORD NumPikave DUP(<0,0>)

.codemov edi,0 ; indeksi i matricësmov ecx,NumPikave ; numeruesi i ciklitmov ecx,NumPikave ; numeruesi i ciklitmov ax,1 ; vlerat fillestare X, Y

L1:mov (COORD PTR GjithePikat[edi]).X,axmov (COORD PTR GjithePikat[edi]).Y,axmov (COORD PTR GjithePikat[edi]).Y,axadd edi,TYPE COORDinc axLoop L1

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 14

Loop L1

Page 15: L19-20 - Strukrurat Dhe Makrot

ShembullShembull: : Afishim i Afishim i Orës së Orës së SistemitSistemit (1 (1 nganga 3)3)

�Merr dhe afishon orën e sistemit në një vendndodhje të përzgjedhur të ekranit.

Përdor strukturat dhe :� Përdor strukturat COORDCOORD dhe SYSTEMTIMESYSTEMTIME:

SYSTEMTIME STRUCTwYear WORD ?

SYSTEMTIME STRUCTwYear WORD ?wMonth WORD ?wDayOfWeek WORD ?wDay WORD ?wDay WORD ?wHour WORD ?wMinute WORD ?wSecond WORD ?wMilliseconds WORD ?wMilliseconds WORD ?

SYSTEMTIME ENDS

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 15

Page 16: L19-20 - Strukrurat Dhe Makrot

ShembullShembull: : Afishim i Afishim i Orës së Orës së SistemitSistemit ((2 nga2 nga 3)3)

��GetStdHandleGetStdHandle merr manovruesin (handle) e daljes së konsolës standarde.

��SetConsoleCursorPositionSetConsoleCursorPosition pozicionon kursorin. ��SetConsoleCursorPositionSetConsoleCursorPosition pozicionon kursorin.

��GetLocalTimeGetLocalTime merr orën aktuale të ditës.

.datasysTime SYSTEMTIME <>XYPos COORD <10,5>XYPos COORD <10,5>consoleHandle DWORD ?.codeINVOKE GetStdHandle, STD_OUTPUT_HANDLEmov consoleHandle,eaxmov consoleHandle,eaxINVOKE SetConsoleCursorPosition, consoleHandle, XYPosINVOKE GetLocalTime, ADDR sysTime

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 16

Page 17: L19-20 - Strukrurat Dhe Makrot

ShembullShembull: : Afishim i Afishim i Orës së Orës së SistemitSistemit ((33 nganga 3)3)

� Afishon orënorën duke përdorur thirrje librariethirrje librarie:

mov edx,OFFSET TheTimeIs ; «Ora është"mov edx,OFFSET TheTimeIs ; «Ora është"call WriteStringmovzx eax,sysTime.wHour ; orëcall WriteDecmov edx,offset colonStr ; ":"mov edx,offset colonStr ; ":"call WriteStringmovzx eax,sysTime.wMinute ; minutacall WriteDeccall WriteDecmov edx,offset colonStr ; ":"call WriteStringmovzx eax,sysTime.wSecond ; sekondacall WriteDeccall WriteDec

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 17

Page 18: L19-20 - Strukrurat Dhe Makrot

StruStrukkturtura a të Ndërthururatë Ndërthurura ((1 1 nganga 22))

• Përcakton një strukturë që përmban një strukturë tjetër.

• Për inicializimin e çdo structure COORDCOORD përdoren • Për inicializimin e çdo structure COORDCOORD përdoren kllapat gjarpërushe.

COORD STRUCT

X WORD ? Rectangle STRUCT

UpperLeft COORD <>LowerRight COORD <>

Rectangle ENDS

X WORD ?

Y WORD ?

COORD ENDSRectangle ENDS

.datarect1 Rectangle { {10,10}, {50,20} }rect2 Rectangle < <10,10>, <50,20> >rect1 Rectangle { {10,10}, {50,20} }rect2 Rectangle < <10,10>, <50,20> >

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 18

Page 19: L19-20 - Strukrurat Dhe Makrot

StruStrukkturtura a të Ndërthururatë Ndërthurura ((22 nganga 22))

• Për aksesin e fushave të ndërthurura përdoret kualifikuesi i pikës (.).

• Për aksesin e plotë të strukturës ose të një prej

mov rect1.UpperLeft.X, 10

• Për aksesin e plotë të strukturës ose të një prej fushave të saj përdoret adresimi indirekt

mov rect1.UpperLeft.X, 10mov esi,OFFSET rect1mov (Rectangle PTR [esi]).UpperLeft.Y, 10

// përdorim i operatorit OFFSETmov edi,OFFSET rect2.LowerRightmov (COORD PTR [edi]).X, 50mov edi,OFFSET rect2.LowerRight.Xmov edi,OFFSET rect2.LowerRight.Xmov WORD PTR [edi], 50

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 19

Page 20: L19-20 - Strukrurat Dhe Makrot

ShembullShembull: : Ecja e PijanecitEcja e Pijanecit

� Simulim i Random-path

� Gjatë ekzekutimit të simulimit përdoret një� Gjatë ekzekutimit të simulimit përdoret njëstrukturë e ndërthurur për të grumbulluar gjithë të dhënat e pathit

Për zgjedhjen e drejtimit përdoret një strukturë � Për zgjedhjen e drejtimit përdoret një strukturë me dëgëzim të shumëfishtë

EcjaEcjaMax Max = 50= 50EcjaEcjaMax Max = 50= 50

EcjaPijanecitEcjaPijanecit STRUCTSTRUCT

path COORD path COORD EcjaEcjaMax Max DUP(<0,0>)DUP(<0,0>)

pathsUsedpathsUsed WORD 0WORD 0

EcjaPijanecitEcjaPijanecit ENDSENDS

Shiko kodin burimor

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 20

Shiko kodin burimor

Page 21: L19-20 - Strukrurat Dhe Makrot

DeDekklarilarimi & Përdorimi i mi & Përdorimi i BashkimeveBashkimeve

� Bashkimi ngjan me strukturën nga fakti se përmban fusha të shumëfishta

� Gjithë fushat e një bashkimi fillojnë në të njëjtin ofset

� (ndryshe nga struktura)� (ndryshe nga struktura)

� Ofron mënyra alternative për akses në të njëjta të dhënatë dhëna

� Sintaksa: emri_bashkimitemri_bashkimit UNIONUNION

fushat_e_bashkimitfushat_e_bashkimitfushat_e_bashkimitfushat_e_bashkimit

eemri_bashkimitmri_bashkimit ENDSENDS

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 21

Page 22: L19-20 - Strukrurat Dhe Makrot

ShembullShembull:: Bashkimi Bashkimi IntegerInteger

Integer UNION

Bashkimi Integer konsumon 4 bytes (i barabartë me fushën më të gjatë)

Integer UNIOND DWORD 0W WORD 0B BYTE 0

Integer ENDSInteger ENDS

D, W, dhe B shpesh quhen edhe fusha variantefusha variante (variant fieldsvariant fields).

Integer mund të përdoret për përcaktim të dhënash:

.dataval1 Integer <12345678h>

Integer mund të përdoret për përcaktim të dhënash:

val1 Integer <12345678h>val2 Integer <100h>val3 Integer <>

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 22

Page 23: L19-20 - Strukrurat Dhe Makrot

ShembullShembull:: Bashkimi Bashkimi IntegerInteger

Për aksesin e një bashkimi kërkohet emri i fushës fushës variantevariante:

mov val3.B, almov ax,val3.W

variantevariante:

mov val3.B, almov ax,val3.Wadd val3.D, eax

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 23

Page 24: L19-20 - Strukrurat Dhe Makrot

BashkimBashkim brënda një brënda një StruStrukktureture

Integer UNION

Bashkimi Integer mund të përfshihet brënda një strukture FileInfo:

Integer UNIOND DWORD 0W WORD 0B BYTE 0B BYTE 0

Integer ENDS

FileInfo STRUCTFileID Integer <>FileID Integer <>FileName BYTE 64 DUP(?)

FileInfo ENDS

.datamyFile FileInfo <>.codemov myFile.FileID.W, ax

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 24

mov myFile.FileID.W, ax

Page 25: L19-20 - Strukrurat Dhe Makrot

Në vazhdim ...Në vazhdim ...

�� StruStrukkturturatat�� StruStrukkturturatat

��MaMakkrorott

�� DireDirekktivtiva të Kushtëzuara a të Kushtëzuara AssemblyAssembly�� DireDirekktivtiva të Kushtëzuara a të Kushtëzuara AssemblyAssembly

�� Përcaktimi i Blloqeve PërsëritësePërcaktimi i Blloqeve Përsëritëse

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 25

Page 26: L19-20 - Strukrurat Dhe Makrot

MaMakkrorott

�� Hyrje mbi Hyrje mbi MaMakkrorott�� Hyrje mbi Hyrje mbi MaMakkrorott

�� Përcaktimi i Përcaktimi i MaMakkroroveve

�� Thirrja e Thirrja e MaMakkroroveve�� Thirrja e Thirrja e MaMakkroroveve

�� Shembuj me Shembuj me MaMakkroro

��MaMakkroro të Ndërthururtë Ndërthurur��MaMakkroro të Ndërthururtë Ndërthurur

�� Shembull Shembull ProgramProgramii: Wrappers: Wrappers

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 26

Page 27: L19-20 - Strukrurat Dhe Makrot

HyrjeHyrje mbimbi MakrotMakrot

��MMaakkroro11 është njëështë një blblllokok i emërtuar që përmban i emërtuar që përmban instruksione instruksione tëtë gjuhësgjuhës assembly assembly . . instruksione instruksione tëtë gjuhësgjuhës assembly assembly . .

�� Pas përcaktimitPas përcaktimit, , ajo mund të thirret një ose më ajo mund të thirret një ose më shumë herëshumë herë..shumë herëshumë herë..

�� Gjatë hapit parapërpunues të Gjatë hapit parapërpunues të asemblasemblueuessitit, , çdo çdo thirrje makro zgjerohet me një kopje të makrosthirrje makro zgjerohet me një kopje të makros..thirrje makro zgjerohet me një kopje të makrosthirrje makro zgjerohet me një kopje të makros..

�� Kodi i zgjerimit kalohet tek hapi i asemblimitKodi i zgjerimit kalohet tek hapi i asemblimit,, kur kur bëhet kontrolli i korrektësisëbëhet kontrolli i korrektësisë..

1Quhet gjithashtu procedurë makro.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 27

1Quhet gjithashtu procedurë makro.

Page 28: L19-20 - Strukrurat Dhe Makrot

PërcaktimiPërcaktimi ii MakroveMakrove

�Makroja duhet përcaktuar para se të përdoret.

� Parametrat janë me opsion.� Parametrat janë me opsion.

� Çdo parametër ndjek regullat e identifikuesve. Ai është një varg që i përcaktohet një vlerë Ai është një varg që i përcaktohet një vlerë gjatë thirrjes së makros.

��SSiintantaksaksa:��SSiintantaksaksa:

makro_emri MACRO [parameter-1, parameter-2,...]

listlistë instruksioneshë instruksioneshlistlistë instruksioneshë instruksionesh

ENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 28

Page 29: L19-20 - Strukrurat Dhe Makrot

Shembull i një Shembull i një MaMakrkroojeje: : mNewLinemNewLine

Në vijim tregohet si Në vijim tregohet si përcaktohetpërcaktohet dhe si dhe si thirretthirret një një makromakro..

mNewLine MACRO ; përcakton një makrocall Crlf

ENDMENDM.data

.codemNewLine ; thërret një makromNewLine ; thërret një makro

AAsemblsembluesi uesi do të zëvendësojë "mNewLine" me "call crlf".

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 29

Page 30: L19-20 - Strukrurat Dhe Makrot

MaMakkroroja ja mPutCharmPutChar

mPutchar MACRO charpush eax

Shkruan njëkarakter të vetëm te dalja standarde.

push eaxmov al,charcall WriteCharpop eax

Përcaktimi:

pop eaxENDM

.codemPutchar 'A'Thirrja:.codemPutchar 'A'Thirrja:

1 push eax1 mov al,'A' I parë në 1 mov al,'A'1 call WriteChar1 pop eax

Zgjerimi:

I parë në skedarin e listës(listing file)

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 30

Page 31: L19-20 - Strukrurat Dhe Makrot

ThirrjaThirrja ee MaMakkroroveve ((1 1 nganga 22))

� Kur thirret një makro, çdo argument që kalohet përshtatet me një parametër të deklaruar.përshtatet me një parametër të deklaruar.

� Kur makroja zgjerohet, çdo parametër zëvendësohet nga argumenti korrespondues. zëvendësohet nga argumenti korrespondues.

� Kur makroja zgjerohet, ai gjeneron kod burimor në gjuhë assembly.gjuhë assembly.

� Për parapërunuesin (preprocessor) argumentettrajtohen si tekst i thjeshtë.trajtohen si tekst i thjeshtë.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 31

Page 32: L19-20 - Strukrurat Dhe Makrot

ThirrjaThirrja ee MaMakkroroveve ((22 nganga 22))

macro

Marrëdhëniet midis makrove, argumentëve, dhe parametrave:

text

consistsof

macroinvocationstatement

argument

ofpasses

assemblycode

argument

replaces generates

parameter macrodeclared

inside

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 32

Page 33: L19-20 - Strukrurat Dhe Makrot

MaMakkrorojaja mWriteStrmWriteStr (1 (1 nganga 2)2)

Ofron një mënyrë të favorshme për afishimin e një vargu, duke kaluar si argument emrin e vargut.

mWriteStr MACRO bufferpush edxmov edx,OFFSET buffer

një vargu, duke kaluar si argument emrin e vargut.

mov edx,OFFSET buffercall WriteStringpop edx

ENDM.dataENDM.datastr1 BYTE "Welcome!",0.codemWriteStr str1mWriteStr str1

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 33

Page 34: L19-20 - Strukrurat Dhe Makrot

MaMakkrorojaja mWriteStrmWriteStr ((22 nganga 2)2)

Kodi i zgjeruar tregon sesi argumenti str1zëvendësoi parametrin me emër buffer:zëvendësoi parametrin me emër buffer:

mWriteStr MACRO bufferpush edxmov edx,OFFSET buffermov edx,OFFSET buffercall WriteStringpop edx

ENDM

1 push edx1 mov edx,OFFSET str11 mov edx,OFFSET str11 call WriteString1 pop edx

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 34

Page 35: L19-20 - Strukrurat Dhe Makrot

ArgumentArgument i Pavlefshëmi Pavlefshëm

� Nëse kalohet një argument i pavlefshëm, gabimi kapet kur asemblohet kodi i zgjeruar.kapet kur asemblohet kodi i zgjeruar.

� Shembull:

.code.codemPutchar 1234h

1 push eax1 push eax1 mov al,1234h ; gabim!1 call WriteChar1 pop eax1 pop eax

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 35

Page 36: L19-20 - Strukrurat Dhe Makrot

ArgumentArgument BBoshosh

� Nëse kalohet një argument bosh, gabimi kapet persëri kur asemblohet kodi i zgjeruar.persëri kur asemblohet kodi i zgjeruar.

� Shembull:

.code.codemPutchar

1 push eax1 push eax1 mov al,1 call WriteChar1 pop eax1 pop eax

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 36

Page 37: L19-20 - Strukrurat Dhe Makrot

Shembuj me Shembuj me MaMakkroro

�� mReadStrmReadStr – lexon varglexon varg nga hyrjanga hyrja standardstandardee�� mReadStrmReadStr – lexon varglexon varg nga hyrjanga hyrja standardstandardee

�� mGotoXYmGotoXY - lolokkaalizonlizon kkursorursorinin nnëë ekranekran

�� mDumpMemmDumpMem – zbraz (zbraz (dumpsdumps)) njënjë rangrang kujtesekujtese�� mDumpMemmDumpMem – zbraz (zbraz (dumpsdumps)) njënjë rangrang kujtesekujtese

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 37

Page 38: L19-20 - Strukrurat Dhe Makrot

mReadStrmReadStrMakroja mReadStr ofron një kapsulë të përshtatshme për thirrjen e procedurës ReadString.

mReadStr MACRO varNamepush ecxpush edxmov edx,OFFSET varNamemov edx,OFFSET varNamemov ecx,(SIZEOF varName) - 1call ReadStringReadStringpop edxpop edxpop ecx

ENDM.datafirstName BYTE 30 DUP(?)firstName BYTE 30 DUP(?).codemReadStr firstName

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 38

Page 39: L19-20 - Strukrurat Dhe Makrot

mGotoXYmGotoXYMakroja mGotoXY merr pozicionin e kursorit të konsolësduke thirrur procedurën e librarisë Gotoxy .

mGotoxy MACRO X:REQ, Y:REQpush edxmov dh,Ymov dh,Ymov dl,Xcall Gotoxypop edxpop edx

ENDM

REQ në të djathtë të X dhe Y i identifikon ata si parametrat e kërkuar.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 39

Page 40: L19-20 - Strukrurat Dhe Makrot

mDumpMemmDumpMemMakroja mDumpMem kanalizon thirrjet te procedura DumpMem e librarisë së lidhur.

mDumpMem MACRO address, itemCount, componentSizepush ebxpush ecxpush esipush ecxpush esimov esi,addressmov ecx,itemCountmov ebx,componentSizemov ebx,componentSizecall DumpMempop esipop ecxpop ebxpop ebx

ENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 40

Page 41: L19-20 - Strukrurat Dhe Makrot

mDumpmDumpMakroja mDumpmDump afishon një ndryshore, duke përdoruratributet e njohur të saj. Nëse <useLabel> është jobosh, atëhere afishohet emri i ndryshorës.

mDump MACROMACRO varName:REQ, useLabelIFB <varName>EXITM

atëhere afishohet emri i ndryshorës.

EXITMENDIFcall CrlfIFNB <useLabel>IFNB <useLabel>mWrite «Emri i ndryshorës: &varName"

ELSEmWrite " "

ENDIFENDIFmDumpMem OFFSET varName, LENGTHOF varName,TYPE varName

ENDMENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 41

ENDMENDM

Page 42: L19-20 - Strukrurat Dhe Makrot

mWritemWriteMakroja mWrite shkruan një vargu-literal te daljastandarde. Ajo është një shembull i mirë i një makroje që përmban edhe kod edhe të dhëna.

mWrite MACRO textLOCAL string.data ;; data segment

përmban edhe kod edhe të dhëna.

.data ;; data segmentstring BYTE text,0 ;; përcakton varg lokal.code ;; code segmentpush edxmov edx,OFFSET stringpush edxmov edx,OFFSET stringcall Writestringpop edx

ENDMENDM

Direktiva LOCAL pengon vargun për t’u bërë një etiketëglobale.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 42

globale.

Page 43: L19-20 - Strukrurat Dhe Makrot

MaMakkroro të Ndërthururtë NdërthururMakroja mWriteLn përmban një makro të ndërthurur (një makroqë thirret nga një makro tjetër).

mWriteLn MACRO textmWrite textcall Crlfqë thirret nga një makro tjetër). call Crlf

ENDM

mWriteLn "Një Program Shembull për Makrot"mWriteLn "Një Program Shembull për Makrot"

2 .data2 ??0002 BYTE " Një Program Shembull për Makrot ",02 ??0002 BYTE " Një Program Shembull për Makrot ",02 .code2 push edx2 mov edx,OFFSET ??00022 call Writestring2 call Writestring2 pop edx1 call Crlf

Etiketa Lokale si rezultat i

directivës LOAD

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 43

Niveli i ndërthurjes (nesting level)directivës LOAD

Page 44: L19-20 - Strukrurat Dhe Makrot

Rradha juajRradha juaj. . .. . .

� Shkruani një makro të ndërthurur me emër mAskForStringqë pastron ekranin, lokalizon kursorin në një rresht dhe kolonë të dhënë, nxit përdoruesin, dhe bën hyrje të një kolonë të dhënë, nxit përdoruesin, dhe bën hyrje të një vargu. Përdorni çfarëdo makro kemi parë gjer tani.

� Përdorni kodin dhe të dhënat vijuese për të testuar makron � Përdorni kodin dhe të dhënat vijuese për të testuar makron tuaj:

.data.dataacctNum BYTE 30 DUP(?).codemain proc

mAskForString 5,10,«Jepni Numrin e Llogarisë: ", \mAskForString 5,10,«Jepni Numrin e Llogarisë: ", \acctNum

Zgjidhja . . .

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 44

Zgjidhja . . .

Page 45: L19-20 - Strukrurat Dhe Makrot

. . . Zgjidhja

mAskForString MACRO row, col, prompt, inbufmAskForString MACRO row, col, prompt, inbufcall ClrscrmGotoXY col, rowmWrite promptmReadStr inbufmReadStr inbuf

ENDM

Shiko programin e zgjidhjes

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 45

Page 46: L19-20 - Strukrurat Dhe Makrot

Shembull Shembull ProgramProgramii: : WrappersWrappers

� ProgramiWraps.asm demonstron makro të ndryshme nga ky kapitull. Ai tregon se si makrot mund të thjeshtëzojnë kalimin e argumentave ndryshme nga ky kapitull. Ai tregon se si makrot mund të thjeshtëzojnë kalimin e argumentave regjistër tek procedurat e librarive.

� Shiko kodin burimor� Shiko kodin burimor

TITLE TITLE ProcedurProceduraa MakroMakro WrappersWrappers ((Wraps.ASMWraps.ASM)); Ky program demonstron makrot si wrappers për ; procedura librarie. Përmbajtjet: mGotoxy, mWrite,; Ky program demonstron makrot si wrappers për ; procedura librarie. Përmbajtjet: mGotoxy, mWrite,; mWriteLn, mWriteStr, mReadStr, dhe mDumpMem.; Rinovimi i fundit: 12/16/14INCLUDE Irvine32.incINCLUDE Macros.inc ; përcaktimi i makroveINCLUDE Macros.inc ; përcaktimi i makrove.data.dataarray DWORD 1,2,3,4,5,6,7,8firstName BYTE 31 DUP(?)lastName BYTE 31 DUP(?)

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 46

lastName BYTE 31 DUP(?)

Page 47: L19-20 - Strukrurat Dhe Makrot

Shembull Shembull ProgramProgramii: : WrappersWrappers• .code• main PROC• mGotoXY 20,0• mWriteLn "Shembull i një Programi Makro "• mWriteLn "Shembull i një Programi Makro "

• mGotoXY 0,5• mWrite «Ju lutem jepni emrin: "• mReadStr firstName• call Crlf• call Crlf

• mWrite "Ju lutem jepni mbiemrin: "• mReadStr lastName• call Crlf• ; Afisho emrin e plotë të personit:• ; Afisho emrin e plotë të personit:• mWrite «Emri juaj është "• mWriteStr firstName• mWrite " "• mWriteStr lastName

• ; Afisho një dump të matricës:• call Crlf• mDumpMem OFFSET array,LENGTHOF array, TYPE array• exit• main ENDP

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 47

• main ENDP• END main

Page 48: L19-20 - Strukrurat Dhe Makrot

Në vazhdim ...Në vazhdim ...

�� StruStrukkturturatat�� StruStrukkturturatat

��MaMakkrorott

�� DireDirekktivtiva të Kushtëzuara a të Kushtëzuara AssemblyAssembly�� DireDirekktivtiva të Kushtëzuara a të Kushtëzuara AssemblyAssembly

�� Përcaktimi i Blloqeve PërsëritësePërcaktimi i Blloqeve Përsëritëse

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 48

Page 49: L19-20 - Strukrurat Dhe Makrot

DirektivaDirektiva tëtë KushtëzuaraKushtëzuara AssemblyAssembly

�� Kontroll për Kontroll për MMungesëungesë ArgumentArgumenteshesh�� Kontroll për Kontroll për MMungesëungesë ArgumentArgumenteshesh

�� IniIniccializializues të Paracaktuarues të Paracaktuar ArgumentArgumenteshesh

�� Shprehje Shprehje BooleanBoolean�� Shprehje Shprehje BooleanBoolean

�� DirectivDirectivat at IFIF, , ELSEELSE, d, dhehe ENDIFENDIF

�� DirectivDirectivat at IFIDNIFIDN ddhehe IFIDNI IFIDNI �� DirectivDirectivat at IFIDNIFIDN ddhehe IFIDNI IFIDNI

�� OperatorOperatorë ë SpecialSpecialëë

�� FunFunksksionione e MaMakkroro�� FunFunksksionione e MaMakkroro

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 49

Page 50: L19-20 - Strukrurat Dhe Makrot

KontrollKontroll përpër MungesëMungesë ArgumenteshArgumentesh

� Direktiva IFB kthen true nëse argumenti i saj është bosh. Për shembull:

IFB <row> ;; nëse row është bosh,

EXITM ;; dil nga makroja

ENDIF

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 50

Page 51: L19-20 - Strukrurat Dhe Makrot

Shembull me Shembull me mWriteStringmWriteString

mWriteStr MACRO string

Afishon një mesazh gjatë asemblimit nëse parametri stringështë bosh:

mWriteStr MACRO stringIFB <string>

ECHO -----------------------------------------ECHO * Gabim: mungesë parametri në mWriteStrECHO * Gabim: mungesë parametri në mWriteStrECHO * (nuk gjenerohet kod)ECHO -----------------------------------------EXITM

ENDIFENDIFpush edxmov edx,OFFSET stringcall WriteStringcall WriteStringpop edx

ENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 51

Page 52: L19-20 - Strukrurat Dhe Makrot

IniIniccializializuesit uesit ee Paracaktuar të Paracaktuar të ArgumentArgumentëveëve

� Një argument i paracaktuar initializues automatikishtpërcakton një vlerë tek parametri kur argumenti i njëmakro lihet bosh. Për shembull, mWriteln mund të makro lihet bosh. Për shembull, mWriteln mund të thirret me ose pa një argument string:

mWriteLn MACRO text:=<" ">mWrite textcall Crlf

Shembull dalje:mWrite textcall Crlf

ENDM.codemWriteln "Line one"

Line one

Line threemWriteln "Line one"mWritelnmWriteln "Line three"

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 52

Page 53: L19-20 - Strukrurat Dhe Makrot

Shprehje Shprehje BBuuleanleanee

Një Shprehje Buleane mund të formohet duke përdorur operatorët vijues:përdorur operatorët vijues:

� LT - Less than (më i vogël se)

� GT - Greater than (më i madh se)

EQ - Equal to ( )� EQ - Equal to (i barabartë me)

� NE - Not equal to (jo i barabartë me)

� LE - Less than or equal to (më i vogël ose i barabartë me)� LE - Less than or equal to (më i vogël ose i barabartë me)

� GE - Greater than or equal to (më i madh ose i barabartë me)

Vetëm konstantet e kohes-asembluese mund të krahasohen duke përdorur këta operatorë.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 53

Page 54: L19-20 - Strukrurat Dhe Makrot

DireDirekktivtivat at IFIF, , ELSEELSE, , dhedhe ENDIFENDIF

Një bllok instruksionesh asemblohet vetëm nëse shprehja buleane vlerësohet në true. Nëse shprehja buleanevlerësohet në false mund të asemblohet një bllok alternativ vlerësohet në false mund të asemblohet një bllok alternativ instruksionesh.

IFIF shprehje-buleane

instruksioneinstruksione

[ELSEELSE

instruksione]

ENDIFENDIF

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 54

Page 55: L19-20 - Strukrurat Dhe Makrot

Shembull i ThjeshtëShembull i ThjeshtëDirektiva vijuese IF lejon që nëse një konstante me emërRealMode është e barabartë me 1, të asemblohen dy instruksione MOV :

IF RealMode EQ 1mov ax,@datamov ds,ax

instruksione MOV :

mov ax,@datamov ds,ax

ENDIF

RealMode mund të përcaktohet në kodin burimor me këdo prej RealMode mund të përcaktohet në kodin burimor me këdo prej mënyrave vijuese:

RealMode = 1

RealMode EQU 1RealMode EQU 1

RealMode TEXTEQU 1

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 55

Page 56: L19-20 - Strukrurat Dhe Makrot

DirectivatDirectivat IFIDNIFIDN dhedhe IFIDNIIFIDNI

�� IFIDNIFIDN krahason dy simbole dhe kthen true nëse janë të barabartë (me ndjeshmëri-shkronjash kapitale)

�� IFIDNIIFIDNI gjithashtu krahason dy simbole, duke përdorur një krahasim pa ndjeshmëri shkronjash kapitalekapitale

� Sintaksa: IFIDNIIFIDNI <symbol>, <symbol><symbol>, <symbol>

instruksioneinstruksioneinstruksioneinstruksione

ENDIFENDIF

Mund të përdoret për pengimin e thirrësit të një makroje që të kalojë një argument që mund të bie ndesh me përdorimin e regjistrit brënda një makroje.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 56

regjistrit brënda një makroje.

Page 57: L19-20 - Strukrurat Dhe Makrot

Shembull me Shembull me IFIDNIIFIDNIPengon përdoruesin nga kalimi i EDX si argument të dytë tekmakroja mReadBuf :

mReadBuf MACRO bufferPtr, maxCharsIFIDNI <maxChars>,<EDX>ECHO Paralajmërim: Argumenti i dytë nuk mund të jetë EDXECHO Paralajmërim: Argumenti i dytë nuk mund të jetë EDXECHO **************************************EXITM

ENDIFENDIF. .

ENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 57

Page 58: L19-20 - Strukrurat Dhe Makrot

OperatorëOperatorë SpecialëSpecialë

� Operatori i zëvendësimit (&&) zgjidh referencat dykuptimshe në emra parametri brënda një makroje.dykuptimshe në emra parametri brënda një makroje.

� Operatori i zgjerimit (%%) zgjeron makrot e tekstitose konverton shprehjet konstante në paraqitje teksti.teksti.

� Operatori tekst-literal (<><>) groupon një apo më shumëkaraktere dhe simbole në një literal të thjeshtë karaktere dhe simbole në një literal të thjeshtë teksti. Ai pengon parapërpunuesin nga interpretimi i elementëve të listës si argumentë të veçantë.

� Operatori karakter-literal (!!) dëtyron parapërpunuesin(preprocessor) të trajtojë një operator të parapër-caktuar si një karakter ordiner.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 58

caktuar si një karakter ordiner.

Page 59: L19-20 - Strukrurat Dhe Makrot

ZëvendësimiZëvendësimi ((&&))Teksti i kaluar si regName zëvendësohet brënda përcaktimit të drejtpërdrejtë të vargut:

ShowRegister MACRO regName.datatempStr BYTE " &regName=",0. . ..codeShowRegister EDX ; thirrje e makrosShowRegister EDX ; thirrje e makros

Zgjerim në Makro:

tempStr BYTE " EDX=",0

Zgjerim në Makro:

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 59

Page 60: L19-20 - Strukrurat Dhe Makrot

Zgjerimi (Zgjerimi (ExpansionExpansion)) ((%%))Dëtyron që të bëhet vlerësimi i shprehjes së plotë (integer expression). Pasi është bërë vlerësimi i shprehjes, vlera e saj kalohet si argument tek makroja:

mGotoXY %(5 * 10),%(3 + 4)

saj kalohet si argument tek makroja:

Parapërpunuesi gjenëron kodin vijues:

1 push edx1 push edx1 mov dl,501 mov dh,71 call Gotoxy1 pop edx1 pop edx

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 60

Page 61: L19-20 - Strukrurat Dhe Makrot

TeTekskstt--Literal (Literal (<><>))

Gjatë thirrjes së parë të makros kalohen tre argumentë. Thirrja e dytë kalon një argument të vetëm:

mWrite "Line three", 0dh, 0ah

Thirrja e dytë kalon një argument të vetëm:

mWrite <"Line three", 0dh, 0ah>

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 61

Page 62: L19-20 - Strukrurat Dhe Makrot

KKaraarakkterter--Literal (Literal (!!))

Deklarata vijuese në mënyrë të nxituar përfundon përcaktimin e tekstit kur arrihet karakteri i parë >.

BadYValue TEXTEQU Warning: <Y-coordinate is > 24>

përcaktimin e tekstit kur arrihet karakteri i parë >.

Deklarata vijuese vazhdon përcaktimin e tekstit gjersa të Deklarata vijuese vazhdon përcaktimin e tekstit gjersa të arrihet në karakterin përfundimtar >.

BadYValue TEXTEQU <Warning: Y-coordinate is !> 24>

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 62

Page 63: L19-20 - Strukrurat Dhe Makrot

FunFunksksionionee MaMakkroro ((11 nganga 22))

� Një funksion makro kthen një numër të plotë (integer) ose një konstante vargu (string constant)

� Vlera kthehet nga direktiva EXITM

� Shembull: Makroja IsDefined mbështjellëse për direktivën .Shembull: Makroja IsDefined mbështjellëse për direktivën IFDEF.

IsDefined MACRO symbolIFDEF symbolIFDEF symbol

EXITM <-1> ;; TrueELSE

EXITM <0> ;; FalseEXITM <0> ;; FalseENDIF

ENDM

Vini re sesi asembluesi përcakton True dhe False.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 63

Vini re sesi asembluesi përcakton True dhe False.

Page 64: L19-20 - Strukrurat Dhe Makrot

FunFunksksionionee MaMakkroro ((22 nganga 22))

� Kur thërrasim një funksion makro, argumenti(ët) duhet të mbyllen në kllapa

Kodi vijues lejon që dy instruksione MOV të � Kodi vijues lejon që dy instruksione MOV të asemblohen vetëm nëse është përcaktuar simboli RealMode:RealMode:

IF IsDefined( RealMode )mov ax,@datamov ds,axmov ds,ax

ENDIF

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 64

Page 65: L19-20 - Strukrurat Dhe Makrot

Në vazhdim ...Në vazhdim ...

�� StruStrukkturturatat�� StruStrukkturturatat

��MaMakkrorott

�� DireDirekktivtiva të Kushtëzuara a të Kushtëzuara AssemblyAssembly�� DireDirekktivtiva të Kushtëzuara a të Kushtëzuara AssemblyAssembly

�� Përcaktimi i Blloqeve PërsëritësePërcaktimi i Blloqeve Përsëritëse

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 65

Page 66: L19-20 - Strukrurat Dhe Makrot

Përcaktimi i Përcaktimi i BlBlllooqeve Përsëritëseqeve Përsëritëse

�� DireDirekktivtiva a WHILEWHILE�� DireDirekktivtiva a WHILEWHILE

�� DireDirekktivtiva a REPEATREPEAT

�� DireDirekktivtiva a FORFOR�� DireDirekktivtiva a FORFOR

�� DireDirekktivtiva a FORCFORC

�� ShembullShembull: : LiListë e stë e LiLidhurdhur�� ShembullShembull: : LiListë e stë e LiLidhurdhur

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 66

Page 67: L19-20 - Strukrurat Dhe Makrot

DireDirekktivtiva a WHILEWHILE

� Direktiva WHILE persërit një bllock instruksionesh gjersa një shprehje konstante e veçantë është true.

� Sintaksa:

WHILEWHILE ShprehjeKonstanteShprehjeKonstanteWHILEWHILE ShprehjeKonstanteShprehjeKonstante

instruksioneinstruksione

ENDMENDMENDMENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 67

Page 68: L19-20 - Strukrurat Dhe Makrot

Shembull me Shembull me WHILEWHILE

Gjeneron numra të plotë Fibonacci midis 1 dhe F0000000h gjatë kohës së asemblimit:

.dataval1 = 1val2 = 1val2 = 1DWORD val1 ; dy vlerat e paraDWORD val2val3 = val1 + val2

WHILE val3 LT 0F0000000hDWORD val3val1 = val2val1 = val2val2 = val3val3 = val1 + val2

ENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 68

Page 69: L19-20 - Strukrurat Dhe Makrot

DireDirekktivtiva a REPEATREPEAT

� Direktiva REPEAT persërit një bllok instruksionesh një numër fiks herësh.

� Sintaksa:

REPEATREPEAT ShprehjaKonstShprehjaKonstREPEATREPEAT ShprehjaKonstShprehjaKonst

instruksioneinstruksione

ENDMENDMENDMENDM

ShprehjaKonst, është një shprehje e plotë konstante pa shenjë, që përcakton numrin e persëritjeve.shenjë, që përcakton numrin e persëritjeve.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 69

Page 70: L19-20 - Strukrurat Dhe Makrot

Shembull me Shembull me REPEATREPEAT

Kodi vijues gjenëron 100 përcaktime të dhënash integer nësekuencën 10, 20, 30, . . .

iVal = 10REPEAT 100

sekuencën 10, 20, 30, . . .

REPEAT 100DWORD iValiVal = iVal + 10

ENDMENDM

Si mund t’i përcaktojmë një emër të dhënash kësaj liste meSi mund t’i përcaktojmë një emër të dhënash kësaj liste menumra të plotë (integer)?

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 70

Page 71: L19-20 - Strukrurat Dhe Makrot

Rradha juajRradha juaj . . .. . .

Cili do të jetë numri i fundit i plotë i gjenëruar nga cikli vijues? 500

rows = 10columns = 5

vijues? 500

columns = 5.dataiVal = 10REPEAT rows * columns

DWORD iValDWORD iValiVal = iVal + 10

ENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 71

Page 72: L19-20 - Strukrurat Dhe Makrot

DireDirekktivtiva a FORFOR� Direktiva FOR persërit një bllok instruksionesh në mënyrë persëritëse sipas një liste simbolesh të ndarë me presje.ndarë me presje.

� Çdo simbol në listë shkakton një persëritje të ciklit.

� Sintaksa:� Sintaksa:

FOR FOR parameter,<arg1,arg2,arg3,...>parameter,<arg1,arg2,arg3,...>

instruksioneinstruksione

ENDMENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 72

Page 73: L19-20 - Strukrurat Dhe Makrot

Shembull me Shembull me FORFORStruktura vijuese Window përmban ngjyrat e frame, titlebar, background, dhe foreground. Përcaktimi i fushave bëhet duke përdorur një direktivë FOR :

Window STRUCTFOR color,<frame,titlebar,background,foreground>

bëhet duke përdorur një direktivë FOR :

FOR color,<frame,titlebar,background,foreground>color DWORD ?

ENDMWindow ENDS

Window STRUCTframe DWORD ?titlebar DWORD ?

Kodi i gjeneruar:titlebar DWORD ?background DWORD ?foreground DWORD ?

Window ENDS

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 73

Window ENDS

Page 74: L19-20 - Strukrurat Dhe Makrot

DireDirekktivtiva a FORCFORC

� Direktiva FORC përsërit një bllok instruksioneshduke përsëritur mbi një varg karakteresh. Çdo karakter i vargut shkakton një përsëritje të ciklit.karakter i vargut shkakton një përsëritje të ciklit.

� Sintaksa:

FORC FORC parameter, <parameter, <stringstring>>

instruksioneinstruksioneinstruksioneinstruksione

ENDMENDM

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 74

Page 75: L19-20 - Strukrurat Dhe Makrot

Shembull me Shembull me FORCFORCSupozojmë se na nevojitet të mbledhim shtatë sete me të dhëna të plota për një eksperiment. Emrat e etiketave të tyre do të jenë Group_A, Group_B, Group_C, e kështu me

FORC code,<ABCDEFG>Group_&code WORD ?

tyre do të jenë Group_A, Group_B, Group_C, e kështu me rradhë. Direktiva FORC krijon ndryshoret si në vijim:

Group_&code WORD ?ENDM

Kodi i gjenëruar:

Group_A WORD ?Group_B WORD ?Group_C WORD ?Group_D WORD ?Kodi i gjenëruar: Group_D WORD ?Group_E WORD ?Group_F WORD ?Group_G WORD ?

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 75

Group_G WORD ?

Page 76: L19-20 - Strukrurat Dhe Makrot

ShembullShembull: : Listë e LidhurListë e Lidhur ((11 nganga 55))

�Mund të përdoret direktiva REPT për krijimin e një liste të lidhur të veçantë gjatë kohës së një liste të lidhur të veçantë gjatë kohës së asemblimit.

� Çdo nyje përmban një tregues te nyja tjetër.

� Një tregues null në nyjen e fundit shënon fundin e listës

data link data link data link null

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 76

Page 77: L19-20 - Strukrurat Dhe Makrot

ShembullShembull: : Listë e LidhurListë e Lidhur ((22 nganga 55))

� Çdo nyje në listë përcaktohet nga një strukturëListNode:ListNode:

ListNode STRUCTNodeData DWORD ? ; të dhënat e nyjesNextPtr DWORD ? ; tregues te nyja tjetërNextPtr DWORD ? ; tregues te nyja tjetër

ListNode ENDS

TotalNodeCount = 15TotalNodeCount = 15NULL = 0Counter = 0

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 77

Page 78: L19-20 - Strukrurat Dhe Makrot

ShembullShembull: : Listë e LidhurListë e Lidhur ((33 nganga 55))

� Direktiva REPEAT gjenëron nyjet.

� Çdo ListNode inicializohet me një numërues dhe � Çdo ListNode inicializohet me një numërues dhe një adresë që tregon 8 bytes përtej vendndodhjes së nyjes aktuale:

.dataLinkedList LABEL PTR ListNodeREPEAT TotalNodeCount

Counter = Counter + 1Counter = Counter + 1ListNode <Counter, ($ + Counter * SIZEOF ListNode)>

ENDM

Vlera e $ nuk ndryshon—ajo mbetet e fiksuar në vendndodhjen e etiketës LinkedList.

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 78

Page 79: L19-20 - Strukrurat Dhe Makrot

ShembullShembull: : Listë e LidhurListë e Lidhur ((44 nganga 55))

Vlerat vijuese hekzadecimale në çdo nyje tregojnë sesi çdo fushë NextPtrNextPtr pëmban adresën e nyjes së saj pasardhëse.

00000000 00000001

fushë NextPtrNextPtr pëmban adresën e nyjes së saj pasardhëse.

ofseti përmbajtjet

00000000 00000001

00000008

00000008 00000002

00000010

NextPtrNextPtr

00000010

00000010 00000003

00000018

00000018 0000000400000018 00000004

00000020

00000020 (etj.)

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 79

Page 80: L19-20 - Strukrurat Dhe Makrot

ShembullShembull: : Listë e LidhurListë e Lidhur ((55 nganga 55))

1

Shiko kodin burimor të programit

123445678Shembull dalje: 89101112

Shembull dalje:

12131415

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 80

Page 81: L19-20 - Strukrurat Dhe Makrot

PërmbledhjePërmbledhje

� Përdor një strukturë për përcaktimin e tipeve komplekse

� përmban fusha të tipeve të ndryshme

�Makro –bllok i emërtuar instruksionesh

� të zevendësuar nga parapërpunuesi i asembluesit

� Direktiva të kushtëzuar assembly

IFIF, , IFNBIFNB, , IFIDNIIFIDNI, ..., ...�� IFIF, , IFNBIFNB, , IFIDNIIFIDNI, ..., ...

� Operatorët: &&, , %%,, <><>,, !!

Direktiva për Persëritje blloku (assembly time)� Direktiva për Persëritje blloku (assembly time)

�� WHILEWHILE,, REPEATREPEAT,, FORFOR,, FORCFORC

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 81

Page 82: L19-20 - Strukrurat Dhe Makrot

FaleminderitFaleminderit

Strukrurat dhe Makrot Gjuha Assembly © Roland Vasili–Slide # 82