Professional Documents
Culture Documents
Leksione 7 & 8 P
Leksione 7 & 8 P
dhe Aritmetika
Vshtrim i prgjithshm
Tipe Operandesh
Tre tipe baz operandesh:
Immediate nj konstante e plot (8, 16, or 32 bits)
Vlera kodohet me instruksionin
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
sreg
imm
imm8
imm16
imm32
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
; AL = 10h
; AL = 10h
Format alternativ
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
Rradha juaj . . .
Prmasa t ndryshme
mov eip,dVal
mov 25,bVal
mov bVal2,bVal
10001111
Burimi
Source
00000000
10001111
Destinacioni
Destination
mov bl,10001111b
movzx ax,bl
; zgjrim me zero
11111111
10001111
Burimi
Source
10001111
Destinacioni
Destination
mov bl,10001111b
movsx ax,bl
; Zgjerim me shnjn
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
shkmben
shkmben
shkmbim
shkmben
regj. 16-bit
regj. 8-bit
mem, reg
regj. 32-bit
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
12
13
Rradha juaj . . .
14
N Vazhdim
15
Zero
Sign
Carry
Overflow
16
destinacion + 1
DEC destinacion
Logjika: destinacion
destinacion 1
17
ax,00FFh
ax
ax,00FFh
al
; 1001h
; 1000h
; 10000001h
; AX = 0100h
; AX = 0000h
18
destinacion + burim
destinacion burim
19
;
;
;
;
;
;
---EAX--00010000h
00030000h
0003FFFFh
00040000h
0004FFFFh
20
; AL = -1
; AL = +1
; valW = -32767
21
; EAX = -26
; EBX = -10
; -36
22
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
23
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.
24
; CX = -1, SF = 1
; CX = 1, SF = 0
; AL = 11111111b, SF = 1
; AL = 00000001b, SF = 0
25
26
27
; CF = 1, AL = 00
; CF = 1, AL = FF
28
; OF = 1,
AL = ??
; OF = 1,
AL = 80h
29
Nj Rregull Njhsimi
; OF = 0
30
N Vazhdim
31
Operatori OFFSET
Operatori PTR
Operatori TYPE
Operatori LENGTHOF
Operatori SIZEOF
Direktiva LABEL
32
Operatori OFFSET
OFFSET kthen distancn n bytes, t nj etikete nga fillimi i
segmentit t mbyllur t saj
33
bVal
wVal
dVal
dVal2
;
;
;
;
ESI
ESI
ESI
ESI
=
=
=
=
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
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?
; ngarkon 5678h
; ruan 4321h
36
word
byte
offset
12345678 5678
78
0000
myDouble
56
0001
myDouble + 1
34
0002
myDouble + 2
12
0003
myDouble + 3
1234
37
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
=
=
=
=
=
78h
56h
34h
5678h
1234h
38
; AX = 3412h
; AX = 7856h
; EAX = 78563412h
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
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
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
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
43
; 6
; 12
44
WORD 10,20
WORD 30,40
WORD 50,60
.code
mov eax,LENGTHOF array
mov ebx,SIZEOF array
; 2
; 4
45
Direktiva LABEL
46
N Vazhdim
47
Adresimi Indirekt
Operandet Indirekte
Shembull Mbledhjeje Matrice
Operande t Indeksuar
Treguesa (Pointers)
48
inc esi
mov al,[esi]
; AL = 20h
inc esi
mov al,[esi]
; AL = 30h
49
; gabim: me dy kuptime
; ok
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]
; AX = shuma e matrics
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
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
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
54
N Vazhdim
Instruksione Transferimi t Dhenash
Mbledhja dhe Zbritja
Veprime & Direktiva t lidhura me t
Dhna
Adresimi Indirekt
Instruksionet JMP dhe LOOP
55
Instruksioni JMP
Instruksioni LOOP
Shembull me LOOP
Mbledhje matrice me numra t plot
Kopjimi i nj Vargu Karakteresh (String)
56
Instruksioni JMP
JMP sht nj krcim pa kondita n nj etiket q zakonisht
ndodhet n t njjtn procedure.
destinacioni
Shembull:
top:
.
.
jmp top
57
Instruksioni LOOP
Logjika:
ECX
ECX 1
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
0000000E + FB
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
60
Rradha Juaj . . .
Cila do jet vlera prfundimtare e AX? L1:
inc ax
loop L1
10
mov ax,6
mov ecx,4
232
mov ecx,0
X2:
inc ax
loop X2
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
;
;
;
;
;
;
62
; adresa e intarray
; numeruesi i ciklit
; bn zero akumulatorin
; shton nj numr t plot
; tregon te numri pasues
; persrit derisa ECX = 0
63
Rradha Juaj . . .
far ndryshime duhet t bni te
programi n faqn e mparshme nse do
ishit duke shtuar nj matric me
element doubleword ?
64
BYTE
BYTE
Prdorim i
mir i
SIZEOF
esi,0
ecx,SIZEOF source
; index register
; numruesi i ciklit
al,source[esi]
target[esi],al
esi
L1
;
;
;
;
65
Rradha Juaj . . .
Rishkruani programin n faqn e
mparshme, duke prdorur adresimin
indirekt n vend t adresimit t indeksuar.
66
Prmbledhje
Transferim t Dhenash
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
67
Fund
68