Leksione 5 & 6

56
R. Vasili - Gjuha Assembly Universiteti i Gjirokastrës «Ε. Çabej» Simestri I Teknololgji Informacioni Leksione 5 dhe 6 R. Vasili - Gjuha Assembly Universiteti i Gjirokastrës «Ε. Çabej» Simestri I Teknololgji Informacioni

Transcript of Leksione 5 & 6

Page 1: Leksione 5 & 6

R. Vasili - Gjuha Assembly – Universiteti i Gjirokastrës

«Ε. Çabej»

Simestri I – Teknololgji Informacioni

Leksione 5 dhe 6

R. Vasili - Gjuha Assembly – Universiteti i Gjirokastrës

«Ε. Çabej»

Simestri I – Teknololgji Informacioni

Page 2: Leksione 5 & 6

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

Çeshtjet që do trajtohen

• Elementet bazë të gjuhës Assembly

• Shembull: Mbledhje dhe Zbritje me numra të plotë

• Asemblimi, Lidhja, dhe Ekzekutimi i Programeve

• Përcaktimi i të Dhënave

• Konstante Simbolike

• Programimi në Mënyrë Reale Adresimi(Real-

Address Mode)

Page 3: Leksione 5 & 6

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

Elementet Bazë të gjuhës Assembly

• Konstantet Integer

• Shprehjet Integer

• Konstantet e tipit karakter dhe string

• Fjalët e Rezervuara dhe identifikuesit

• Direktivat dhe instruksionet

• Etiketat (Labels)

• Mnemonikat dhe Operandët

• Komentet

• Shembuj

Page 4: Leksione 5 & 6

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

Konstatet Integer

• Shenjat e paraprirë(me opsion) + ose –

• Shifrat binare, dhjetore, hexadecimale, ose

oktale

• Karakterët unik të bazës:

• h – hexadecimal

• d – dhjetor

• b – binar

• r – real i koduar

Shembuj: 30d, 6Ah, 42, 1101b

Numrat Hexadecimal fillojnë me shkronjë: 0A5h

Page 5: Leksione 5 & 6

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

Shprehjet Integer

• Operatorët dhe nivelet e përparësisë(precedence):

• Shembuj:

Page 6: Leksione 5 & 6

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

Konstantet e tipit Karakter dhe String

• Mbyllni karakterin në thonjëza teke ose dopjo

• 'A', "x"

• Karakteri ASCII = 1 byte

• Mbyllni stringjet në thonjëza teke ose dopjo

• "ABC"

• 'xyz'

• Çdo karakter ka një byte të vetëm

• Thonjëza të Ndërthurur(Embedded):

• „Thuaj “Natën e Mirë,” Faleminderit'

Page 7: Leksione 5 & 6

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

Fjalë të Rezervuara dhe Identifikues

• Fjalët e Rezervuara nuk mund të përdoren si identifikues

• Mnemonika Instruksioni, direktiva, tipe atributesh,

operatorë, simbole të parapërcaktuar

• Shiko MASM reference

• Identifikuesit

• 1-247 karaktere, duke përfshirë shifrat

• Nuk merret parasysh nëse shkronjat janë të medha apo të

vogla

• Karakteri i parë duhet të jetë shkronjë, _, @, ?, ose $

Page 8: Leksione 5 & 6

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

Direktiva

• Komanda që njihen dhe veprojnë mbi asembluesin

• Nuk janë pjesë e setit të instruksioneve të Intel-it

• Përdoren për deklarim kodi, hapësire të dhenash,

zgjedhin modelin e kujtesës, deklarojnë proçedurat,

etj.

• Nuk merret parasysh nëse shkronjat janë të medha

apo të vogla

• Asemblues të ndryshëm kanë direktiva të

ndryshme

• Për shembull NASM nuk është i njëjtë me MASM.

Page 9: Leksione 5 & 6

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

Instruksione

• Asemblohen në kod makine nga asembluesi

• Ekzekutohen gjatë kohes runtime nga CPU-ja

• Ne do përdorim setin e instruksioneve Intel IA-32

• Një instruksion përmban:

• Etiketën(Label) (me opsion)

• Mnemonikën(Mnemonic) (nevojitet)

• Operandë(Operand) (varet nga instruksioni)

• Komente(Comment) (me opsion)

Page 10: Leksione 5 & 6

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

Etiketat

• Vepron si shenues vendi

• Shenon adresën (ofsetin) e kodit dhe të dhënave

• Ndjekin rregullat e identifikuesve

• Etiketa Data

• Duhet të jenë unike

• shembull: myArray (nut ndiqet nga dy pika)

• Etiketa Code

• Objektivi i instruksioneve jump dhe loop

• shembull: L1: (i ndjekur nga dy pika)

Page 11: Leksione 5 & 6

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

Mnemonikat dhe Operandët

• Mnemonika Instruksioni

• ndihmesa kujtese

• shembuj: MOV, ADD, SUB, MUL, INC, DEC

• Operandët

• konstante

• shprehje konstante

• regjistër

• kujtesë (data label)

Konstantet dhe shprehjet konstante shpesh quhen vlera

imediate (immediate values)

Page 12: Leksione 5 & 6

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

Comentet

• Komentet janë të dobishme!

• sqarojnë pikësynimet e programuesit

• se kur ato shkruhen, dhe prej kujt

• informacione rishikimi

• teknika kodimi të ndërlikuara

• sqarime specifike për aplicacionin

• Komente të një rreshti të vetëm(Single-line)

• Fillojnë me pikëpresje(;)

• Komente me shumë rreshta(Multi-line)

• Fillojnë me direktivën COMMENT dhe një karakter të

zgjedhur nga programuesi

• Përfundojnë me të njëjtin karakter të zgjedhur nga

përdoruesi

Page 13: Leksione 5 & 6

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

Shembuj të Formës së Instruksioneve

• Pa operandë

• stc ; vendos flamurin Carry

• Një operand

• inc eax ; regjistër

• inc myByte ; kujtesë

• Dy operandë

• add ebx,ecx ; regjistër, regjistër

• sub myByte,25 ; kujtesë, konstante

• add eax,36 * 25 ; regjistër, shprehje konstante

Page 14: Leksione 5 & 6

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

Në Vazhdim

• Elementet bazë të gjuhës Assembly

• Shembull: Mbledhje dhe Zbritje me numra të plotë

• Asemblimi, Lidhja, dhe Ekzekutimi i Programeve

• Përcaktimi i të Dhënave

• Konstante Simbolike

• Programimi në Mënyrë Reale Adresimi(Real-Address

Mode)

Page 15: Leksione 5 & 6

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

Shembull: Mbledhje dhe Zbritje me numra të plotë

TITULLI Mbledhje dhe Zbritje (AddSub.asm)

; Ky program shton dhe zbret numra të plotë 32-bit.

INCLUDE Irvine32.inc

.code

main PROC

mov eax,10000h ; EAX = 10000h

add eax,40000h ; EAX = 50000h

sub eax,20000h ; EAX = 30000h

call DumpRegs ; afisho regjistrat

exit

main ENDP

END main

Page 16: Leksione 5 & 6

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

Shembull Daljeje(output)

Programi output, shfaq regjistrat dhe flamujtë:

EAX=00030000 EBX=7FFDF000 ECX=00000101 EDX=FFFFFFFF

ESI=00000000 EDI=00000000 EBP=0012FFF0 ESP=0012FFC4

EIP=00401024 EFL=00000206 CF=0 SF=0 ZF=0 OF=0

Page 17: Leksione 5 & 6

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

Standarte kodimi të sugjeruara (1 nga 2)

• Disa përafrime të kapitalizimit(shkruajtje me

shkronja të mëdha)

• mos kapitalizo asgjë

• kapitalizo gjithçka

• kapitalizo gjithë fjalët e rezervuara, duke përfshirë

mnemonikat e instruksioneve dhe emrat e regjistrave

• kapitalizo vetëm direktivat dhe operatorët

• Sugjerime të tjera

• Emrat e identifikuesve të jenë përshkrues

• lini hapësira përreth operatorëve

• lini rreshta bosh midis proçedurave

Page 18: Leksione 5 & 6

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

• Dhëmbëzime dhe hapësira boshe

• etiketat e segmentit code dhe data – pa dhembëzim

• instruksionet e ekzekutueshme – futuni 4-5 hapësira

• komentet: fillojini në kolonën 40-45, të rradhitura

vertikalisht

• 1-3 hapësira midis instruksioneve dhe operandëve të

tyre

• P.sh.: mov ax,bx

• 1-2 rreshta bosh midis proçedurave

Standarte kodimi të sugjeruara (2 nga 2)

Page 19: Leksione 5 & 6

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

Version Alternativ i AddSub

TITLE Mbledhje dhe Zbritje (AddSubAlt.asm)

; Ky program shton dhe zbret numra të plotë 32-bit.

.386

.MODEL flat,stdcall

.STACK 4096

ExitProcess PROTO, dwExitCode:DWORD

DumpRegs PROTO

.code

main PROC

mov eax,10000h ; EAX = 10000h

add eax,40000h ; EAX = 50000h

sub eax,20000h ; EAX = 30000h

call DumpRegs

INVOKE ExitProcess,0

main ENDP

END main

Page 20: Leksione 5 & 6

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

Shabllon Programi

TITLE Program Shabllon (Template.asm)

; Pershkrimi i Programit :

; Autori:

; Data e krijimit:

; Rishikimi(versioni):

; Data: Modifikuar nga:

INCLUDE Irvine32.inc

.data

; (vendos ketu variablat)

.code

main PROC

; (ndërfut ketu instruksionët e ekzekutueshme)

exit

main ENDP

; (ndërfut këtu proçedura shtesë)

END main

Page 21: Leksione 5 & 6

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

Në Vazhdim

• Elementet bazë të gjuhës Assembly

• Shembull: Mbledhje dhe Zbritje me numra të plotë

• Asemblimi, Lidhja, dhe Ekzekutimi i Programeve

• Përcaktimi i të Dhënave

• Konstante Simbolike

• Programimi në Mënyrë Reale Adresimi(Real-Address

Mode)

Page 22: Leksione 5 & 6

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

Asemblimi, Lidhja, dhe Ekzekutimi i Programeve

• Cikli Assemble-Link-Execute

• make32.bat

• Skedar Liste(Listing File)

• Skedari i Skemës(Map file)

Page 23: Leksione 5 & 6

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

Cikli Assemble-Link Execute

• Diagrama e mëposhtme përshkruan hapat për krijimin a programeve

burimorë duke ekzekutuar programet e kompiluara.

• Nëse kodi burimor modifikohet, Hapat 2 deri 4 mund të përsëritën.

Source

File

Object

File

Listing

File

Link

Library

Executable

File

Map

File

Output

Step 1: text editor

Step 2:

assembler

Step 3:

linker

Step 4:

OS loader

Page 24: Leksione 5 & 6

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

Skedar Liste

• Përdoreni për të parë si kompilohen programi

• Përmban

• kodin burimor(source code)

• adresat

• kodi objekt (machine language)

• emrat e segmenteve

• simbolet(variabla, proçedura dhe konstante)

• Shembull: addSub.lst

Page 25: Leksione 5 & 6

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

Skedar skeme(Map File)

• Informacion për çdo segment programi:

• adresë startimi

• adresë përfundimi

• madhësia(size)

• tipi i segmentit

• Shembull: addSub.map (versioni 16-bit)

Page 26: Leksione 5 & 6

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

Në Vazhdim

• Elementet bazë të gjuhës Assembly

• Shembull: Mbledhje dhe Zbritje me numra të plotë

• Asemblimi, Lidhja, dhe Ekzekutimi i Programeve

• Përcaktimi i të Dhënave

• Konstante Simbolike

• Programimi në Mënyrë Reale Adresimi(Real-Address

Mode)

Page 27: Leksione 5 & 6

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

Përcaktimi i të Dhënave

• Tipe të brëndshme të Dhënash

• Instruksione Përcaktimi të Dhënash

• Përcaktimi i të Dhënave BYTE dhe SBYTE

• Përcaktimi i të Dhënave WORD dhe SWORD

• Përcaktimi i të Dhënave DWORD dhe SDWORD

• Përcaktimi i të Dhënave QWORD

• Përcaktimi i të Dhënave TBYTE

• Përcaktimi i të Dhënave Numra Realë

• Rënditja Little Endian

• Shtimi i Variablave në Programin AddSub

• Deklarimi i të Dhënave të Painicializuara

Page 28: Leksione 5 & 6

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

Tipe të brëndshme të Dhenash (1 nga 2)

• BYTE, SBYTE

• 8-bit numër i plote pa shenjë; 8-bit numër i plote

me shenjë

• WORD, SWORD

• 16-bit numër i plote me & pa shenjë

• DWORD, SDWORD

• 32-bit numër i plote me & pa shenjë

• QWORD

• 64-bit numër i plote

• TBYTE

• 80-bit numër i plote

Page 29: Leksione 5 & 6

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

• REAL4

• 4-byte IEEE numër i shkurtër(short) real

• REAL8

• 8-byte IEEE numër i gjatë(long) real

• REAL10

• 10-byte IEEE numër i zgjeruar(extended) real

Tipe të brëndshme të Dhenash (2 nga 2)

Page 30: Leksione 5 & 6

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

Instruksione Përcaktimi të Dhënash

• Një set për paraqitjën dhe përcaktimin e të dhënave të vendosura në hapësirën e kujtesës për një variabël.

• Mund të përcaktojë(me opsion) një emër (etiketë) në të dhëna

• Sintaksa:

[emri] direktiva inicializuesi [,inicializues] . . .

vlera1 BYTE 10

• Të gjithë inicializuesit përshtatën në të dhëna binare në kujtesë

Page 31: Leksione 5 & 6

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

Përcaktimi i të Dhënave BYTE dhe SBYTE

value1 BYTE 'A' ; konstante karakter

value2 BYTE 0 ; byte më i vogël pa shënjë

value3 BYTE 255 ; byte më i madh pa shënjë

value4 SBYTE -128 ; byte më i vogël me shënjë

value5 SBYTE +127 ; byte më i madh me shënjë

value6 BYTE ? ; byte i painicializuar

Secili nga sa vijojnë përcaktojnë një byte të thjeshtë hapësirë:

• MASM nuk ju parandalon nga inicializimi i një BYTE me vlerë

negative, por ai konsiderohet stil i keq.

• Nëse deklaroni një variabël SBYTE, korrigjuesi i gabimeve

(debugger) i Microsoft-it automatikisht do afishojë vlerën e tij

dhjetore me shenjë para.

Page 32: Leksione 5 & 6

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

Përcaktimi i Matricave me të Dhëna Byte

list1 BYTE 10,20,30,40

list2 BYTE 10,20,30,40

BYTE 50,60,70,80

BYTE 81,82,83,84

list3 BYTE ?,32,41h,00100010b

list4 BYTE 0Ah,20h,‘A’,22h

Shembuj përdorimi të shumë inicializuesve:

Page 33: Leksione 5 & 6

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

Përcaktimi i të Dhënave String (1 nga 3)

• Një string implementohet si një matricë karakteresh

• Pë lehtësi, zakonisht mbyllën në thonjëza

• Zakonisht ato përfundojnë me null

• Shembuj:

str1 BYTE “Shtypni emrin",0

str2 BYTE 'Error: halting program',0

str3 BYTE 'A','E','I','O','U'

greeting BYTE "Welcome to the Encryption Demo program "

BYTE "created by Kip Irvine.",0

Page 34: Leksione 5 & 6

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

Përcaktimi i të Dhënave String (2 nga 3)

• Për të vazhduar një string të vetëm përgjatë shumë

rreshtave, përfundoni çdo rresht me presje:

menu BYTE "Checking Account",0dh,0ah,0dh,0ah,

"1. Create a new account",0dh,0ah,

"2. Open an existing account",0dh,0ah,

"3. Credit the account",0dh,0ah,

"4. Debit the account",0dh,0ah,

"5. Exit",0dh,0ah,

"Choice> ",0

Page 35: Leksione 5 & 6

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

Përcaktimi i të Dhënave String (3 nga 3)

• Sekuenca e karaktereve End-of-line :

• 0Dh = carriage return

• 0Ah = line feed

str1 BYTE "Enter your name: ",0Dh,0Ah

BYTE "Enter your address: ",0

newLine BYTE 0Dh,0Ah,0

Ideja: Përcakto të gjitha stringjet e përdorur nga programet

tuaja në të njejtën zonë të segmentit të të dhënave.

Page 36: Leksione 5 & 6

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

Përdorimi i Operatorit DUP

• Përdor DUP për të alokuar (krijuar hapësirë për) një

matrice(array) ose string. Sintaksa:

numeruesi DUP ( argumenti )

• Numëruesi dhe argumenti duhet të jenë konstante

ose shprehje konstante

var1 BYTE 20 DUP(0) ; 20 bytes, të gjitha zero

var2 BYTE 20 DUP(?) ; 20 bytes, të painicializuar

var3 BYTE 4 DUP("STACK") ; 20 bytes: "STACKSTACKSTACKSTACK"

var4 BYTE 10,3 DUP(0),20 ; 5 bytes

Page 37: Leksione 5 & 6

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

Përcaktimi i të Dhënave WORD dhe SWORD

• Përcaktime Hapësire për numra të plotë 16-bit

• ose dopjo karaktere

• vlera të thjeshta ose shumëfishe

word1 WORD 65535 ; vlera më e madhe pa shenjë

word2 SWORD –32768 ; vlera më e vogël me shenjë

word3 WORD ? ; e painicializuar, pa shenjë

word4 WORD "AB" ; dopjo karaktere

myList WORD 1,2,3,4,5 ; matricë(array) me words

array WORD 5 DUP(?) ; matricë e painicializuar

Page 38: Leksione 5 & 6

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

Përcaktimi i të Dhënave DWORD dhe SDWORD

val1 DWORD 12345678h ; pa shenjë

val2 SDWORD –2147483648 ; me shenjë

val3 DWORD 20 DUP(?) ; matrice pa shenjë

val4 SDWORD –3,–2,–1,0,1 ; matrice me shenjë

Përcaktime Hapësire për numra të plotë 32-bit me & pa

shenjë:

Page 39: Leksione 5 & 6

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

Përcaktimi i të Dhënave QWORD, TBYTE, Reale

quad1 QWORD 1234567812345678h

val1 TBYTE 1000000000123456789Ah

rVal1 REAL4 -2.1

rVal2 REAL8 3.2E-260

rVal3 REAL10 4.6E+4096

ShortArray REAL4 20 DUP(0.0)

Përcaktime Hapësire për vlera quadwords,

tenbyte, dhe numra realë:

Page 40: Leksione 5 & 6

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

Rënditja Little Endian

• Të gjithë tipet e të dhënave më të mëdha se një byte

ruajnë byte-t e tyre individual në rend të kundërt(reverse

order). Byte-i më pak i rëndësishëm ndeshet në adresën

e parë (më të ulët) të kujtesës.

• Shembull:

val1 DWORD 12345678h

Page 41: Leksione 5 & 6

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

Shtim Variablash në AddSub

TITLE Mbledhje dhe Zbritje, Versioni 2 (AddSub2.asm)

; Ky program shton dhe zbret numra të plotë

; 32-bit pa shënjë dhe ruan shumën në një variabël.

INCLUDE Irvine32.inc

.data

val1 DWORD 10000h

val2 DWORD 40000h

val3 DWORD 20000h

finalVal DWORD ?

.code

main PROC

mov eax,val1 ; nis me 10000h

add eax,val2 ; shton 40000h

sub eax,val3 ; zbret 20000h

mov finalVal,eax ; ruan rezultatin (30000h)

call DumpRegs ; afishon regjistrat

exit

main ENDP

END main

Page 42: Leksione 5 & 6

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

Deklarim të Dhënash të Painicializuara

• Përdor direktivën .data? për të deklaruar një segment të painicializuar të dhënash:

P.sh.:

.data

smallArray DWORD 10 DUP(0)

.data?

bigArray DWORD 5000 DUP(?)

P.sh.:

.data

smallArray DWORD 10 DUP(0)

bigArray DWORD 5000 DUP(?)

• Brënda segmentit, deklaroni variablat me inicializuesit “?” :

smallArray DWORD 10 DUP(?)

Avantazhe: madhësia e skedarit të programeve EXE zvogëlohet.

Në këtë rast, kursejmë 4 x 5000 bytes!

Page 43: Leksione 5 & 6

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

Në Vazhdim

• Elementet bazë të gjuhës Assembly

• Shembull: Mbledhje dhe Zbritje me numra të plotë

• Asemblimi, Lidhja, dhe Ekzekutimi i Programeve

• Përcaktimi i të Dhënave

• Konstante Simbolike

• Programimi në Mënyrë Reale Adresimi(Real-Address

Mode)

Page 44: Leksione 5 & 6

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

Konstante Simbolike

• Direktiva e Shenjës së Barazimit

• Llogaritja e Madhësisë së Matricave dhe Stringjeve

• Direktiva ByteEQU

• Direktiva TEXTEQU

Page 45: Leksione 5 & 6

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

Direktiva e Shenjës së Barazimit

• emri = shprehje

• Shprehja është një 32-bit integer (shprehje ose

konstante)

• Mund të ripërcaktohet

• emri quhet konstante simbolike

• Përdorimi i simboleve është një stil i mirë programimi

COUNT = 500

.

.

mov al,COUNT

Page 46: Leksione 5 & 6

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

Llogaritja e Madhësisë së një Matrice Byte

• Numeruesi i pozicionit aktual : $

• heq adresat e listës

• diferenca është numri i byte-ve

list BYTE 10,20,30,40

ListSize = ($ - list)

Page 47: Leksione 5 & 6

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

Llogaritja e Madhësisë së një Matrice Word

Pjestoni numrin total të byte-ve me 2 (madhësia e një

word)

list WORD 1000h,2000h,3000h,4000h

ListSize = ($ - list) / 2

Page 48: Leksione 5 & 6

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

Llogaritja e Madhësisë së një Matrice Doubleword

Pjestoni numrin total të byte-ve me 4 (madhësia e një

doubleword)

list DWORD 1,2,3,4

ListSize = ($ - list) / 4

Page 49: Leksione 5 & 6

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

Direktiva EQU

• Përcakton një simbol ose si integer ose si shprehje teksti.

• emri EQU shprehje

• emri EQU simbol

• emri EQU <teksti>

• Nuk mund të ripërcaktohet

PI EQU <3.1416>

pressKey EQU <“Shtypni një tast për të vazhduar...",0>

.data

prompt BYTE pressKey

matrix1 EQU 10 * 10

matrix2 EQU <10 * 10>

.data

M1 WORD matrix1 ; 100

M2 WORD matrix2 ; 10 * 10

Page 50: Leksione 5 & 6

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

Direktiva TEXTEQU

• Përcakton një simbol ose si integer ose si shprehje text.

• emri TEXTEQU <teksti>

• emri TEXTEQU textmacro

• emri TEXTEQU %constExpr

• Thirret një text macro

• Mund të ripërcaktohet

continueMsg TEXTEQU <“Dëshironi të vayhdini (PO/JO)?">

rowSize = 5

.data

prompt1 BYTE continueMsg

count TEXTEQU %(rowSize * 2) ; vlerëson shprehjen

move TEXTEQU <mov>

setupAL TEXTEQU <move al,count>

.code

setupAL ; gjenëron: "mov al,10"

Page 51: Leksione 5 & 6

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

Në Vazhdim

• Elementet bazë të gjuhës Assembly

• Shembull: Mbledhje dhe Zbritje me numra të plotë

• Asemblimi, Lidhja, dhe Ekzekutimi i Programeve

• Përcaktimi i të Dhënave

• Konstante Simbolike

• Programimi në Mënyrë Reale Adresimi(Real-

Address Mode)

Page 52: Leksione 5 & 6

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

Programimi në Mënyrë Reale Adresimi(1 nga 2)

• Gjenero Programe 16-bit MS-DOS

• Avantazhet

• Mundëson thirrjen e funksioneve MS-DOS dhe BIOS

• Nuk ka kufizime në aksesin në kujtesë

• Disadvantazhe

• Duhet të jetë i informuar edhe me segmentin edhe me

ofsetin

• Nuk mund të thërrasë funksione Win32 (Windows 95

dhe më të reja)

• Kujtesë e kufizuar në 640K për programin

Page 53: Leksione 5 & 6

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

• Kërkesat

• INCLUDE Irvine16.inc

• Inicializimi i DS në segmentin e të

dhënave:

mov ax,@data

mov ds,ax

Programimi në Mënyrë Reale Adresimi(1 nga 2)

Page 54: Leksione 5 & 6

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

Mbledhje dhe Zbritje, Versioni 16-Bit

TITLE Mbledhje dhe Zbritje, Versioni 2 (AddSub2r.asm)

INCLUDE Irvine16.inc

.data

val1 DWORD 10000h

val2 DWORD 40000h

val3 DWORD 20000h

finalVal DWORD ?

.code

main PROC

mov ax,@data ; inicializo DS

mov ds,ax

mov eax,val1 ; merr vlerën e parë

add eax,val2 ; shto vlerën e dytë

sub eax,val3 ; zbrit vlerën e tretë

mov finalVal,eax ; ruaj rezultatin

call DumpRegs ; afisho regjistrat

exit

main ENDP

END main

Page 55: Leksione 5 & 6

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

Përmbledhje

• Shprehje Integer, konstante karakter

• Direktiva – e interpretuar nga asembluesi

• Instruksioni – ekzekutohet në kohën runtime

• Segmentet code, data, dhe stack

• Skedarët source, listing, object, map dhe të ekzekutueshëm

• Direktiva Përcaktimi të Dhënash :• BYTE, SBYTE, WORD, SWORD, DWORD, SDWORD,

QWORD, TBYTE, REAL4, REAL8, and REAL10

• operatori DUP, numeruesi i pozicionit aktual($)

• Konstante Simbolike• EQU dhe TEXTEQU

Page 56: Leksione 5 & 6

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

46 69 6E 69 73