You are on page 1of 68

Transferimi i t dhenave, Adresimi,

dhe Aritmetika

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

Vshtrim i prgjithshm

Instruksione Transferimi t Dhenash


Mbledhja dhe Zbritja
Veprime & Direktiva t lidhura me t Dhna
Adresimi Indirekt
Instruksionet JMP dhe LOOP

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

Instruksione Transferimi t Dhnash


Tipe Operandesh
Komente pr Operandet e
Instruksionit
Operand t drejtprdrejt Kujtes
Instruksioni MOV
Zgjerimi me Zero & me Shenjn
Instruksioni XCHG
Instruksionet Direct-Offset

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

Tipe Operandesh
Tre tipe baz operandesh:
Immediate nj konstante e plot (8, 16, or 32 bits)
Vlera kodohet me instruksionin

Register emri i nj regjistri


Emri i registrit konvertohet n nj numr dhe kodohet
me instruksionin

Memory referenc n nj vendndodhje n


kujtes
Adresa e kujtess kodohet me instruksionin, ose nj
regjistr mban adresn e vendndodhjeje kujtese

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

Komente pr Operandet e
Instruksionit
Operandi

Prshkrimi

r8

Regjistr 8-bit me prdorim t prgjithshm: AH, AL, BH, BL, CH, CL, DH, DL

r16

Regjistr 16-bit me prdorim t prgjithshm: AX, BX, CX, DX, SI, DI, SP, BP

r32

Regjistr 32-bit me prdorim t prgjithshm: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP

reg

fardo regjistr me prdorim t prgjithshm

sreg

Regjistr segmenti 16-bit: CS, DS, SS, ES, FS, GS

imm

Vler imediate 8-, 16-, ose 32-bit

imm8

Vler imediate byte 8-bit

imm16

Vler imediate word 16-bit

imm32

Vler imediate dobleword 32-bit

r/m8

Operand 8-bit q mund t jet regjistr me prdorim t prgjithshm ose byte kujtese

r/m16

Operand 16-bit q mund t jet regjistr me prdorim t prgjithshm ose word kujtese

r/m32

Operand 32-bit q mund t jet regjistr me prdorim t prgjithshm ose doubleword kujtese

mem

Operand Kujtese 8-, 16-, 32-bit

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

Operand t drejtprdrejt Kujtes


Operand i drejtprdrejt Kujtese sht nj
emr reference n hapsirn e kujtess
Emri i referencs (etiketa(label))
vlersohet automatikisht nga asembluesi
.data
var1 BYTE 10h
.code
mov al,var1
mov al,[var1]

; AL = 10h
; AL = 10h

Format alternativ

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

Instruksioni MOV
Zhvendos nga burimi n destinacion. Sintaksa:
MOV destinacion,burim
Nuk lejohet t prdorn dy operator kujtese njkohsisht
Nuk mund t prdoren si destinacion CS dhe EIP
Nuk mund t kemi zhvendosje vlere immediate me segment
.data
count BYTE 100
wVal WORD 2
.code
mov bl,count
mov ax,wVal
mov count,al
mov al,wVal
mov ax,count
mov eax,count

; gabim
; gabim
; gabim

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

Rradha juaj . . .

Sqaroni pse secila nga instruksionet MOV q vijojn jan t


pavlefshme:
.data
bVal BYTE
100
bVal2 BYTE
?
wVal WORD
2
dVal DWORD 5
.code
mov esi,wVal

Prmasa t ndryshme

mov eip,dVal

EIP nuk mund t jet destinacioni

mov 25,bVal

Vlera immediate nuk mund t jet


destinacioni
Nuk lejohen zhvendosje nga kujtesa n
kujtes

mov bVal2,bVal

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

Zgjrim me Zero (Zero Extension)


Kur kopjoni nj vler m t vogl n nj destinacion m t madh,
instruksioni MOVZX mbush (zgjron) gjysmn e siprme t
destinacionit me zero.
0

10001111

Burimi
Source

00000000

10001111

Destinacioni
Destination

mov bl,10001111b
movzx ax,bl

; zgjrim me zero

Destinacioni duhet t jet regjistr.

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

Zgjrim me Shenjn (Sign Extension)


Instruksioni MOVSX mbush gjysmn e siprme t destinacionit
me kopjim t vlers s bit-it t shenjs s operandit burimor.

11111111

10001111

Burimi
Source

10001111

Destinacioni
Destination

mov bl,10001111b
movsx ax,bl

; Zgjerim me shnjn

Destinacioni duhet t jet regjistr.

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

10

Instruksioni XCHG
XCHG shkmben vlerat e dy operandeve. T paktn njri prej
operandve duhet t jet regjistr. Nuk lejohen operand
immediate.
.data
var1 WORD 1000h
var2 WORD 2000h
.code
xchg ax,bx
xchg ah,al
xchg var1,bx
xchg eax,ebx

;
;
;
;

xchg var1,var2

; gabim: dy operand kujtese

shkmben
shkmben
shkmbim
shkmben

regj. 16-bit
regj. 8-bit
mem, reg
regj. 32-bit

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

11

Operand Direkt-Ofset
Nj konstante ofset shtohet n nj etiket(label) t dhnash
pr t prodhuar nj adres reale. Adresa vlersohet pr t
marr vlern n vendndodhjen e saj n kujtes.
.data
arrayB BYTE 10h,20h,30h,40h
.code
mov al,arrayB+1
mov al,[arrayB+1]

; AL = 20h
; simbol alternativ

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

12

Operand Direkt-Ofset (vazhdim)


Nj konstante ofset shtohet n nj etiket(label) t dhnash
pr t prodhuar nj adres reale. Adresa vlersohet pr t
marr vlern n vendndodhjen e saj n kujtes.
.data
arrayW WORD 1000h,2000h,3000h
arrayD DWORD 1,2,3,4
.code
mov ax,[arrayW+2]
; AX = 2000h
mov ax,[arrayW+4]
; AX = 3000h
mov eax,[arrayD+4]
; EAX = 00000002h
; Mund t asemblohen instruksionet q vijojn?
mov ax,[arrayW-2]
; ??
mov eax,[arrayD+16]
; ??

do t ndodh kur ato do ekzekutohen?


Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

13

Rradha juaj . . .

Shkruani nj program q bn rnditjen e tre vlerave doubleword n


vlera n matricn q vijon si: 3, 1, 2.
.data
arrayD DWORD 1,2,3

Hapi 1: kopjojm vlern e par n EAX dhe e shkmbejm at


me vlern n pozicionin e dyt.
mov eax,arrayD
xchg eax,[arrayD+4]

Hapi 2: Shkmbejm EAX me vlern e tret t matrics dhe e


kopjojm vlern n EAX te pozicioni i par i matrics.
xchg eax,[arrayD+8]
mov arrayD,eax

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

14

N Vazhdim

Instruksione Transferimi t Dhenash


Mbledhja dhe Zbritja
Veprime & Direktiva t lidhura me t Dhna
Adresimi Indirekt
Instruksionet JMP dhe LOOP

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

15

Mbledhja dhe Zbritja

Instruksionet INC dhe DEC


Instruksionet ADD dhe SUB
Instruksioni NEG
Implementimi i Shprehjeve Aritmetike
Flamuj q preken nga Aritmetika

Zero
Sign
Carry
Overflow

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

16

Instruksionet INC dhe DEC


Shto 1, zbrit 1 nga operandi destinacion

operandi mund t jet regjister ose kujtes


INC destinacion
Logjika: destinacion

destinacion + 1

DEC destinacion
Logjika: destinacion

destinacion 1

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

17

Shembuj me INC dhe DEC


.data
myWord WORD 1000h
myDword DWORD 10000000h
.code
inc myWord
dec myWord
inc myDword
mov
inc
mov
inc

ax,00FFh
ax
ax,00FFh
al

; 1001h
; 1000h
; 10000001h

; AX = 0100h
; AX = 0000h

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

18

Instruksionet ADD dhe SUB


ADD destinacion, burim
Logjika: destinacion

destinacion + burim

SUB destinacion, burim


Logjika: destinacion

destinacion burim

Kan vend t njjtat rregulla me instruksionin


MOV

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

19

Shembuj me ADD dhe SUB


.data
var1 DWORD 10000h
var2 DWORD 20000h
.code
mov eax,var1
add eax,var2
add ax,0FFFFh
add eax,1
sub ax,1

;
;
;
;
;
;

---EAX--00010000h
00030000h
0003FFFFh
00040000h
0004FFFFh

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

20

Instruksioni NEG (negate)


Ndryshon shenjn e operandit. Operandi mund t jet nj
regjistr ose operand kujtese.
.data
valB BYTE -1
valW WORD +32767
.code
mov al,valB
neg al
neg valW

; AL = -1
; AL = +1
; valW = -32767

Supozoni se AX prmban 32,768 dhe ne aplikojm NEG mbi


t. Do jet i vlefshm rezultati?

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

21

Implementimi i Shprehjeve Aritmetike


Kompiluesit e Gjuhve t Nivelit t Lart prkthejn shprehjet
matematike n gjuh makine. Kjo mund t bhet edhe prej jush.
Pr shembull:
Rval = -Xval + (Yval Zval)
Rval SDWORD ?
Xval SDWORD 26
Yval SDWORD 30
Zval SDWORD 40
.code
mov eax,Xval
neg eax
mov ebx,Yval
sub ebx,Zval
add eax,ebx
mov Rval,eax

; EAX = -26
; EBX = -10
; -36

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

22

Flamuj q preken nga Aritmetika


Njsia Aritmetike dhe Logjike(ALU) ka nj numr flamujsh
gjndjeje q reflekton rezultatin e veprimeve aritmetike
(dhe bitwise)
Bazohen mbi prmbajtjen e operandit destinacion

Flamujt Kryesor:
Flamuri Zero vendoset(bhet 1) kur destinacioni barazohet me
zero
Flamuri Sign vendoset kur destinacioni bhet negativ
Flamuri Carry vendoset kur vlera pa shenj del jasht rangut
Flamuri Overflow vendoset kur vlera me shnj del jasht
rangut

Instruksioni MOV nuk ndikon mbi flamujt.

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

23

Flamuri Zero (ZF)


Flamuri Zero vendoset kur rezultati i nj veprimi prodhon zero
n operandin destinacion.
mov
sub
mov
inc
inc

cx,1
cx,1
ax,0FFFFh
ax
ax

; CX = 0, ZF = 1
; AX = 0, ZF = 1
; AX = 1, ZF = 0

Mbani mend...
Nj flamur vendoset kur barazohet me 1.
Nj flamur sht i pastr kur bhet i barabart me 0.

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

24

Flamuri i Shnjs (SF)


Flamuri i Shnjs vendoset kur operandi destinacion bhet
negativ. Flamuri sht i pastr kur destinacioni bhet pozitiv.
mov cx,0
sub cx,1
add cx,2

; CX = -1, SF = 1
; CX = 1, SF = 0

Flamuri i shnjs sht nj kopje e bit-it m t lart t destinacionit:


mov al,0
sub al,1
add al,2

; AL = 11111111b, SF = 1
; AL = 00000001b, SF = 0

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

25

Numra t plot me Shnj dhe Pa


Shnj
Nj vshtrim Hardware-ik
T gjith instruksionet e CPU-s veprojn ekzaktsisht njlloj
si n numrat me shnj ashtu dhe n ato pa shnj
CPU-ja nuk mund t dalloj numrat e plot me shnj apo pa
shnj
JU, programuesit, jeni prgjegjsit e vetm pr prdorimin e
sakt t tipit t t dhenave me do instruksion

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

26

Flamujt Overflow dhe Carry


Nj vshtrim Hardware-ik
Si modifikon instruksioni ADD flamujt OF dhe CF:
OF = (mbart MSB) XOR (transportoje tek MSB)
CF = (mbart MSB)

Si modifikon instruksioni SUB flamujt OF dhe CF:


NEG burimin dhe ADD at tek destinacioni
OF = (mbart MSB) XOR (transportoje tek MSB)
CF = INVERT (vepron mbi MSB)
MSB = Most Significant Bit (bit-i i rendit m t lart)
XOR = veprimi eXclusive-OR
NEG = Negate

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

27

Flamuri Carry (CF)


Flamuri carry vendoset kur rezultati i nj veprimi gjeneron nj vler pa
shenj jasht rangut (shum i madh ose shm i vogl pr operandin
destinacion).
mov al,0FFh
add al,1

; CF = 1, AL = 00

; Provoni t kaloni nn zero:


mov al,0
sub al,1

; CF = 1, AL = FF

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

28

Flamuri Overflow (OF)


Flamuri Overflow vendoset kur rezultati me shnj i nj veprimi nuk
sht i vlefshm ose sht jasht rangut.
; Shembull 1
mov al,+127
add al,1
; Shembull 2
mov al,7Fh
add al,1

; OF = 1,

AL = ??

; OF = 1,

AL = 80h

Dy shembujt jan identik n nivel binar sepse 7Fh sht i


barabart me +127. Pr t prcaktuar vlern e operandit
destinacion, shpesh sht m e leht t llogaritet n hexadecimal.

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

29

Nj Rregull Njhsimi

Pr t shtuar dy numra t plot, kujtoni q


flamuri Overflow vendoset vetm kur . . .
Shtohen dy nmra pozitiv dhe rezultati sht
negativ
Shtohen dy numra negativ dhe shuma e tyre
sht pozitive
Cila do jet vlera e flamurit Overflow ?
mov al,80h
add al,92h
; OF = 1
mov al,-2
add al,+127

; OF = 0

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

30

N Vazhdim

Instruksione Transferimi t Dhenash


Mbledhja dhe Zbritja
Veprime & Direktiva t lidhura me t Dhna
Adresimi Indirekt
Instruksionet JMP dhe LOOP

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

31

Operator dhe Direktiva t lidhura


me t Dhena

Operatori OFFSET
Operatori PTR
Operatori TYPE
Operatori LENGTHOF
Operatori SIZEOF
Direktiva LABEL

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

32

Operatori OFFSET
OFFSET kthen distancn n bytes, t nj etikete nga fillimi i
segmentit t mbyllur t saj

N mnyrn e Mbrojtur (Protected mode): 32 bits


N mnyrn Reale(Real mode): 16 bits
offset
data segment:
myByte

Programet q shkruajm pr Mnyrn e Mbrojtur kan


vetm nj segment unik (ne prdorim modelin e kujtess
flat (flat memory model)).
Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

33

Shembuj pr operatorin OFFSET


Le t supozojm se segmenti data fillon n 00404000h:
.data
bVal BYTE ?
wVal WORD ?
dVal DWORD ?
dVal2 DWORD ?
.code
mov esi,OFFSET
mov esi,OFFSET
mov esi,OFFSET
mov esi,OFFSET

bVal
wVal
dVal
dVal2

;
;
;
;

ESI
ESI
ESI
ESI

=
=
=
=

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

00404000
00404001
00404003
00404007

34

Lidhja me C/C++
Vlera e kthyer nga operatori OFFSET sht nj tregues(pointer).
Krahasoni kodin q vijon t shkruar si n gjuhn C++ ashtu dhe
n gjuhn assembly:
; versioni C++:
char array[1000];
char * p = array;

.data
array BYTE 1000 DUP(?)
.code
mov esi,OFFSET array

; ESI sht p

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

35

Operatori PTR
Mbivendos tipin e paracaktuar t nj etikete (variable). Siguron
fleksibilitet pr aksesin e nj pjes t nj variable.
.data
myDouble DWORD 12345678h
.code
mov ax,myDouble

; gabim pse?

mov ax,WORD PTR myDouble

; ngarkon 5678h

mov WORD PTR myDouble,4321h

; ruan 4321h

Kujtoni se pr akomodimin e t dhenave n kujtes prdoret


renditja little endian (shikoni Seksionin 3.4.9 t librit).

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

36

Renditja Little Endian

Renditja Little Endian referohet te mnyra q Intel


akomodon numrat e plot n kujtes.
Numrat eplot Multi-byte akomodohen n renditje
t kundrt , me bit-in m pak t rendsishm t
akomoduar te adresa m e ult
Pr shembull, doubleword 12345678h duhet t
akomodohet si:
doubleword

word

byte

offset

12345678 5678

78

0000

myDouble

56

0001

myDouble + 1

34

0002

myDouble + 2

12

0003

myDouble + 3

1234

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

37

Shembuj pr operatorin PTR


.data
myDouble DWORD 12345678h
doubleword

word

byte

offset

12345678 5678

78

0000

myDouble

56

0001

myDouble + 1

34

0002

myDouble + 2

12

0003

myDouble + 3

1234

mov
mov
mov
mov
mov

al,BYTE
al,BYTE
al,BYTE
ax,WORD
ax,WORD

PTR myDouble
PTR [myDouble+1]
PTR [myDouble+2]
PTR myDouble
PTR [myDouble+2]

;
;
;
;
;

AL
AL
AL
AX
AX

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

=
=
=
=
=

78h
56h
34h
5678h
1234h

38

Operatori PTR (vazhdim)


Operatori PTR mund t prdoret edhe pr kombinimin e
elementeve t tipeve t t dhenave m t vogla dhe
transferimin e tyre n nj operand m t madh. CPU-ja
automatikisht do kthej n menyr t anasjellt byte-t.
.data
myBytes BYTE 12h,34h,56h,78h
.code
mov ax,WORD PTR [myBytes]
mov ax,WORD PTR [myBytes+2]
mov eax,DWORD PTR myBytes

; AX = 3412h
; AX = 7856h
; EAX = 78563412h

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

39

Rradha
Juaj
.
.
.
Shkruani vlerat e do operandi destinacion:
.data
varB BYTE 65h,31h,02h,05h
varW WORD 6543h,1202h
varD DWORD 12345678h
.code
mov ax,WORD PTR [varB+2]
mov bl,BYTE PTR varD
mov bl,BYTE PTR [varW+2]
mov ax,WORD PTR [varD+2]
mov eax,DWORD PTR varW

;
;
;
;
;

a. 0502h
b. 78h
c. 02h
d. 1234h
e. 12026543h

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

40

Operatori TYPE
Operatori TYPE kthen madhsin, n bytes, t nj
elementi t vetm t t dhenave t deklaruara.
.data
var1 BYTE ?
var2 WORD ?
var3 DWORD ?
var4 QWORD ?
.code
mov eax,TYPE
mov eax,TYPE
mov eax,TYPE
mov eax,TYPE

var1
var2
var3
var4

;
;
;
;

1
2
4
8

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

41

Operatori LENGTHOF
Operatori LENGTHOF numron numrin e elementeve
n nj deklarim t thjesht t dhenash.
.data
byte1 BYTE 10,20,30
array1 WORD 30 DUP(?),0,0
array2 WORD 5 DUP(3 DUP(?))
array3 DWORD 1,2,3,4
digitStr BYTE "12345678",0

LENGTHOF
; 3
; 32
; 15
; 4
; 9

.code
mov ecx,LENGTHOF array1

; 32

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

42

Operatori SIZEOF
Operatori SIZEOF kthen nj vler q sht ekivalente me
prodhimin e LENGTHOF me TYPE.
.data
byte1 BYTE 10,20,30
array1 WORD 30 DUP(?),0,0
array2 WORD 5 DUP(3 DUP(?))
array3 DWORD 1,2,3,4
digitStr BYTE "12345678",0

SIZEOF
; 3
; 64
; 30
; 16
; 9

.code
mov ecx,SIZEOF array1

; 64

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

43

Shtrirje n Rreshta Shumfishe (1 nga 2)


Nj deklarim i t dhenave shtrihet n rreshta shumfishe nse
do rresht (prve t fundit) mbaron me presje. Operatort
LENGTHOF dhe SIZEOF spozojn se t gjith rreshtat i
takojn deklarats:
.data
array WORD 10,20,
30,40,
50,60
.code
mov eax,LENGTHOF array
mov ebx,SIZEOF array

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

; 6
; 12

44

Shtrirje n Rreshta Shumfishe (2 of 2)


N shembullin q vijon, array identifikon vetm deklaratn e
par WORD. Krahasoni vlerat e kthyera nga LENGTHOF
dhe SIZEOF ktu me ato t faqs s msiprme :
.data
array

WORD 10,20
WORD 30,40
WORD 50,60

.code
mov eax,LENGTHOF array
mov ebx,SIZEOF array

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

; 2
; 4

45

Direktiva LABEL

Prcakton nj emr dhe tip alternativ etikete n nj


vendndodhje ekzistuese akomodimi
LABEL nuk bn alokim t asnj hapsire akomodimi
n vetvete
Shmang nevojen e prdorimit t operatorit PTR
.data
dwList
LABEL DWORD
wordList LABEL WORD
intList BYTE 00h,10h,00h,20h
.code
mov eax,dwList
; 20001000h
mov cx,wordList
; 1000h
mov dl,intList
; 00h

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

46

N Vazhdim

Instruksione Transferimi t Dhenash


Mbledhja dhe Zbritja
Veprime & Direktiva t lidhura me t Dhna
Adresimi Indirekt
Instruksionet JMP dhe LOOP

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

47

Adresimi Indirekt

Operandet Indirekte
Shembull Mbledhjeje Matrice
Operande t Indeksuar
Treguesa (Pointers)

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

48

Operande Indirekt (1 nga 2)


Nj operand indirekt mban adresn e nj variable, zakonisht t
nj matrice apo t nj vargu karaktersh. Ai mund t vlersohet
(ekzaktsisht si nj tregues).
.data
val1 BYTE 10h,20h,30h
.code
mov esi,OFFSET val1
mov al,[esi]

; vlersohet ESI (AL = 10h)

inc esi
mov al,[esi]

; AL = 20h

inc esi
mov al,[esi]

; AL = 30h

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

49

Operande Indirekt (2 nga 2)


Prdorni PTR t qartsoni vetin e madhsis s nj operandi
kujtese.
.data
myCount WORD 0
.code
mov esi,OFFSET myCount
inc [esi]
inc WORD PTR [esi]

; gabim: me dy kuptime
; ok

Duhet t prdoret PTR ktu?


add [esi],20

po, pr arsye se [esi] mund


t tregoj n nj a byte, word,
ose doubleword

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

50

Shembull
Mbledhjeje
Matrice
Operandet Indirekt jan ideale pr shqyrtimin e nj matrice.
Shenoni q regjistri n kllapa dhet t rritet me nj vler q
prshtatet me tipin e matrics.
.data
arrayW
.code
mov
mov
add
add
add
add

WORD 1000h,2000h,3000h
esi,OFFSET arrayW
ax,[esi]
esi,2
ax,[esi]
esi,2
ax,[esi]

; ose: add esi,TYPE arrayW

; AX = shuma e matrics

Pr Detyr: Modifikoni kt shembull pr nj matrice me


doublewords.
Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

51

Operand t Indeksuar
Nj operand i indeksuar shton nj konstante n nj regjistr pr
t prodhuar nj adres reale. Ekzistojn dy forma pr ta
shnuar:
[label + reg]
.data
arrayW WORD 1000h,2000h,3000h
.code
mov esi,0
mov ax,[arrayW + esi]
mov ax,arrayW[esi]
add esi,2
add ax,[arrayW + esi]
etc.

label[reg]

; AX = 1000h
; format alternativ

Pr Detyr: Modifikoni kt shembll pr nj matric me


doublewords.
Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

52

Shkallzimi
i
Indeksit
Mund t shkallzoni nj operand indirekt ose t indeksuar te
ofseti i nj elementi matrice. Kjo bhet duke shumzuar
indeksin me tipin(TYPE) e matrics:
.data
arrayB BYTE 0,1,2,3,4,5
arrayW WORD 0,1,2,3,4,5
arrayD DWORD 0,1,2,3,4,5
.code
mov esi,4
mov al,arrayB[esi*TYPE arrayB]
mov bx,arrayW[esi*TYPE arrayW]
mov edx,arrayD[esi*TYPE arrayD]

; 04
; 0004
; 00000004

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

53

Treguesit(Pointers)
Ne mund t deklarojm nj tregues variable(pointer variable) q
prmban offset-in e nj variable tjetr.
.data
arrayW WORD 1000h,2000h,3000h
ptrW DWORD arrayW
.code
mov esi,ptrW
mov ax,[esi]
; AX = 1000h

Format Alternativ :
ptrW DWORD OFFSET arrayW

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

54

N Vazhdim
Instruksione Transferimi t Dhenash
Mbledhja dhe Zbritja
Veprime & Direktiva t lidhura me t
Dhna
Adresimi Indirekt
Instruksionet JMP dhe LOOP

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

55

Instrusionet JMP dhe LOOP

Instruksioni JMP
Instruksioni LOOP
Shembull me LOOP
Mbledhje matrice me numra t plot
Kopjimi i nj Vargu Karakteresh (String)

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

56

Instruksioni JMP
JMP sht nj krcim pa kondita n nj etiket q zakonisht
ndodhet n t njjtn procedure.

Sintaksa: JMP destinacioni


Logjika: EIP

destinacioni

Shembull:
top:
.
.
jmp top

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

57

Instruksioni LOOP

Instruksioni LOOP krijon nj cikl t numruar


Sintaksa: LOOP destinacion

Logjika:
ECX

ECX 1

if ECX != 0, krce te destinacioni


Implementimi:
Asembluesi llogarit distancn, n bytes, midis ofsetit t
instruksionit vijues dhe ofsetit t etikets destinacion. Ky
quhet ofseti relativ.

Ofseti relativ i shtohet EIP.

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

58

Shembull
me
LOOP
Cikli q vijon llogarit shumn e numrave t plot
5 + 4 + 3 +2 + 1:
ofseti

kod makine

kod burimi

00000000
00000004

66 B8 0000
B9 00000005

mov
mov

00000009
0000000C
0000000E

66 03 C1
E2 FB

ax,0
ecx,5

L1: add ax,cx


loop L1

Kur asemblohet nj LOOP, vendndodhja aktuale = 0000000E (ofseti I


instruksionit pasues). 5 (FBh) shtohet te vendndodhja aktuale, duke
shkaktuar nj krcim te vendndodhja 00000009:
00000009

0000000E + FB

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

59

Rradha Juaj . . .
Nse ofseti relativ kodohet n nj byte t thjesht me shenj,
(a) cili sht krcimi m i madh i mundshm prapavajts?
(b) cili sht krcimi m i madh i mundshm paravajts?

(a)

128

(b) +127

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

60

Rradha Juaj . . .
Cila do jet vlera prfundimtare e AX? L1:

inc ax
loop L1

10

Sa her do ekzekutohet cikli?


4,294,967,296 =

mov ax,6
mov ecx,4

232

mov ecx,0
X2:
inc ax
loop X2

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

61

Cikl i Prseritur
Nse sht e nevojshme t kodohet nj cikl brenda nj cikli
tjetr, duhet t ruhet vlera ECX e numruesit t ciklit t
jashtm. N shembullin q vijon, cikli i jashtm ekzekutohet
100 her, ndrsa cikli i brendshm 20 her.
.data
count DWORD ?
.code
mov ecx,100
mov count,ecx
mov ecx,20
L2: .
.
loop L2
mov ecx,count
loop L1

;
;
;

vendos numruesin e ciklit t jashtm

;
;
;

persrit ciklin e brendshm

ruan numruesin e ciklit


vendos numruesin e ciklit t brendshm

kthen numruesin e ciklit t jashtm


repeat the outer loop

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

62

Shuma e Elementeve t nj Matrice


me Numra t Plot
Kodi q vijon llogarit shumn e elementeve t nj matrice me
numra t plot 16-bit.
.data
intarray WORD 100h,200h,300h,400h
.code
mov edi,OFFSET intarray
mov ecx,LENGTHOF intarray
mov ax,0
L1:
add ax,[edi]
add edi,TYPE intarray
loop L1

; adresa e intarray
; numeruesi i ciklit
; bn zero akumulatorin
; shton nj numr t plot
; tregon te numri pasues
; persrit derisa ECX = 0

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

63

Rradha Juaj . . .
far ndryshime duhet t bni te
programi n faqn e mparshme nse do
ishit duke shtuar nj matric me
element doubleword ?

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

64

Kopjimi i nj Vargu Karakteresh(String)


Kodi q vijon kopjon nj string nga burimi n destinacion:
.data
source
target
.code
mov
mov
L1:
mov
mov
inc
loop

BYTE
BYTE

"This is the source string",0


SIZEOF source DUP(0)

Prdorim i
mir i
SIZEOF

esi,0
ecx,SIZEOF source

; index register
; numruesi i ciklit

al,source[esi]
target[esi],al
esi
L1

;
;
;
;

merr char nga source


e rezervon at n target
kalon te karakteri tjeter
prsritet pr gjith vargun

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

65

Rradha Juaj . . .
Rishkruani programin n faqn e
mparshme, duke prdorur adresimin
indirekt n vend t adresimit t indeksuar.

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

66

Prmbledhje

Transferim t Dhenash

MOV transferim t dhenash nga burimi te destinacioni


MOVSX, MOVZX, XCHG

Tipe Operandesh
direct, direct-offset, indirect, indexed

Aritmetika
INC, DEC, ADD, SUB, NEG
Sign, Carry, Zero, Overflow flags

Operatoret
OFFSET, PTR, TYPE, LENGTHOF, SIZEOF, TYPEDEF

JMP dhe LOOP instruksione degezimi


Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

67

Fund

Pergatiti: Roland Vasili Bazuar n Slidet e Kip Irvine

68

You might also like