SlideShare une entreprise Scribd logo
1  sur  68
Télécharger pour lire hors ligne
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Transferimi i të dhenave, Adresimi,
dhe Aritmetika
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Vështrim i përgjithshëm
2
• Instruksione Transferimi të Dhenash
• Mbledhja dhe Zbritja
• Veprime & Direktiva të lidhura me të Dhëna
• Adresimi Indirekt
• Instruksionet JMP dhe LOOP
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Instruksione Transferimi të Dhënash
• Tipe Operandesh
• Komente për Operandet e
Instruksionit
• Operandë të drejtpërdrejtë Kujtesë
• Instruksioni MOV
• Zgjerimi me Zero & me Shenjën
• Instruksioni XCHG
• Instruksionet Direct-Offset
3
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ë numër dhe kodohet
me instruksionin
– Memory – referencë në një vendndodhje në
kujtesë
• Adresa e kujtesës kodohet me instruksionin, ose një
regjistër mban adresën e vendndodhjeje kujtese
4
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Komente për Operandet e
Instruksionit
5
Operandi Përshkrimi
r8 Regjistër 8-bit me përdorim të përgjithshëm: AH, AL, BH, BL, CH, CL, DH, DL
r16 Regjistër 16-bit me përdorim të përgjithshëm: AX, BX, CX, DX, SI, DI, SP, BP
r32 Regjistër 32-bit me përdorim të përgjithshëm: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP
reg Çfarëdo regjistër me përdorim të përgjithshëm
sreg Regjistër 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ë regjistër me përdorim të përgjithshëm ose byte kujtese
r/m16 Operand 16-bit që mund të jetë regjistër me përdorim të përgjithshëm ose word kujtese
r/m32 Operand 32-bit që mund të jetë regjistër me përdorim të përgjithshëm ose doubleword kujtese
mem Operand Kujtese 8-, 16-, 32-bit
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operandë të drejtpërdrejtë Kujtesë
• Operand i drejtpërdrejt Kujtese është një
emër reference në hapësirën e kujtesës
• Emri i referencës (etiketa(label))
vlerësohet automatikisht nga asembluesi
6
.data
var1 BYTE 10h
.code
mov al,var1 ; AL = 10h
mov al,[var1] ; AL = 10h
Format alternativ
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Instruksioni MOV
7
.data
count BYTE 100
wVal WORD 2
.code
mov bl,count
mov ax,wVal
mov count,al
mov al,wVal ; gabim
mov ax,count ; gabim
mov eax,count ; gabim
• Zhvendos nga burimi në destinacion. Sintaksa:
MOV destinacion,burim
• Nuk lejohet të përdorën dy operatorë kujtese njëkohësisht
• Nuk mund të përdoren si destinacion CS dhe EIP
• Nuk mund të kemi zhvendosje vlere immediate me segment
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Rradha juaj . . .
8
.data
bVal BYTE 100
bVal2 BYTE ?
wVal WORD 2
dVal DWORD 5
.code
mov esi,wVal Përmasa të ndryshme
mov eip,dVal EIP nuk mund të jetë destinacioni
mov 25,bVal Vlera immediate nuk mund të jetë
destinacioni
mov bVal2,bVal Nuk lejohen zhvendosje nga kujtesa në
kujtesë
Sqaroni pse secila nga instruksionet MOV që vijojnë janë të
pavlefshme:
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Zgjërim me Zero (Zero Extension)
9
mov bl,10001111b
movzx ax,bl ; zgjërim me zero
Kur kopjoni një vlerë më të vogël në një destinacion më të madh,
instruksioni MOVZX mbush (zgjëron) gjysmën e sipërme të
destinacionit me zero.
1 0 0 0 1 1 1 1
1 0 0 0 1 1 1 1
Source
Destination0 0 0 0 0 0 0 0
0
Destinacioni duhet të jetë regjistër.
Burimi
Destinacioni
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Zgjërim me Shenjën (Sign Extension)
10
mov bl,10001111b
movsx ax,bl ; Zgjerim me shënjën
Instruksioni MOVSX mbush gjysmën e sipërme të destinacionit
me kopjim të vlerës së bit-it të shenjës së operandit burimor.
1 0 0 0 1 1 1 1
1 0 0 0 1 1 1 1
Source
Destination1 1 1 1 1 1 1 1
Destinacioni duhet të jetë regjistër.
Burimi
Destinacioni
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Instruksioni XCHG
11
.data
var1 WORD 1000h
var2 WORD 2000h
.code
xchg ax,bx ; shkëmben regj. 16-bit
xchg ah,al ; shkëmben regj. 8-bit
xchg var1,bx ; shkëmbim mem, reg
xchg eax,ebx ; shkëmben regj. 32-bit
xchg var1,var2 ; gabim: dy operandë kujtese
XCHG shkëmben vlerat e dy operandeve. Të paktën njëri prej
operandëve duhet të jetë regjistër. Nuk lejohen operandë
immediate.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operandë Direkt-Ofset
12
.data
arrayB BYTE 10h,20h,30h,40h
.code
mov al,arrayB+1 ; AL = 20h
mov al,[arrayB+1] ; simbol alternativ
Një konstante ofset shtohet në një etiketë(label) të dhënash
për të prodhuar një adresë reale. Adresa vlerësohet për të
marrë vlerën në vendndodhjen e saj në kujtesë.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operandë Direkt-Ofset (vazhdim)
13
.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
Një konstante ofset shtohet në një etiketë(label) të dhënash
për të prodhuar një adresë reale. Adresa vlerësohet për të
marrë vlerën në vendndodhjen e saj në kujtesë.
; 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
Rradha juaj . . .
14
Shkruani një program që bën rënditjen e tre vlerave doubleword në
vlera në matricën që vijon si: 3, 1, 2.
.data
arrayD DWORD 1,2,3
• Hapi 2: Shkëmbejmë EAX me vlerën e tretë të matricës dhe e
kopjojmë vlerën në EAX te pozicioni i parë i matricës.
• Hapi 1: kopjojmë vlerën e parë në EAX dhe e shkëmbejmë atë
me vlerën në pozicionin e dytë.
mov eax,arrayD
xchg eax,[arrayD+4]
xchg eax,[arrayD+8]
mov arrayD,eax
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Në Vazhdim
15
• Instruksione Transferimi të Dhenash
• Mbledhja dhe Zbritja
• Veprime & Direktiva të lidhura me të Dhëna
• Adresimi Indirekt
• Instruksionet JMP dhe LOOP
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
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
16
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
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
17
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shembuj me INC dhe DEC
18
.data
myWord WORD 1000h
myDword DWORD 10000000h
.code
inc myWord ; 1001h
dec myWord ; 1000h
inc myDword ; 10000001h
mov ax,00FFh
inc ax ; AX = 0100h
mov ax,00FFh
inc al ; AX = 0000h
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Instruksionet ADD dhe SUB
19
• ADD destinacion, burim
• Logjika: destinacion destinacion + burim
• SUB destinacion, burim
• Logjika: destinacion destinacion – burim
• Kanë vend të njëjtat rregulla me instruksionin
MOV
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shembuj me ADD dhe SUB
20
.data
var1 DWORD 10000h
var2 DWORD 20000h
.code ; ---EAX---
mov eax,var1 ; 00010000h
add eax,var2 ; 00030000h
add ax,0FFFFh ; 0003FFFFh
add eax,1 ; 00040000h
sub ax,1 ; 0004FFFFh
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Instruksioni NEG (negate)
21
.data
valB BYTE -1
valW WORD +32767
.code
mov al,valB ; AL = -1
neg al ; AL = +1
neg valW ; valW = -32767
Ndryshon shenjën e operandit. Operandi mund të jetë një
regjistër ose operand kujtese.
Supozoni se AX përmban –32,768 dhe ne aplikojmë NEG mbi
të. Do jetë i vlefshëm rezultati?
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Implementimi i Shprehjeve Aritmetike
22
Rval SDWORD ?
Xval SDWORD 26
Yval SDWORD 30
Zval SDWORD 40
.code
mov eax,Xval
neg eax ; EAX = -26
mov ebx,Yval
sub ebx,Zval ; EBX = -10
add eax,ebx
mov Rval,eax ; -36
Kompiluesit e Gjuhëve të Nivelit të Lartë përkthejnë shprehjet
matematike në gjuhë makine. Kjo mund të bëhet edhe prej jush.
Për shembull:
Rval = -Xval + (Yval – Zval)
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Flamuj që preken nga Aritmetika
• Njësia Aritmetike dhe Logjike(ALU) ka një numër flamujsh
gjëndjeje që reflekton rezultatin e veprimeve aritmetike
(dhe bitwise)
– Bazohen mbi përmbajtjen e operandit destinacion
• Flamujt Kryesorë:
– Flamuri Zero – vendoset(bëhet 1) kur destinacioni barazohet me
zero
– Flamuri Sign – vendoset kur destinacioni bëhet negativ
– Flamuri Carry – vendoset kur vlera pa shenjë del jashtë rangut
– Flamuri Overflow – vendoset kur vlera me shënjë del jashtë
rangut
• Instruksioni MOV nuk ndikon mbi flamujt.
23
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Flamuri Zero (ZF)
24
mov cx,1
sub cx,1 ; CX = 0, ZF = 1
mov ax,0FFFFh
inc ax ; AX = 0, ZF = 1
inc ax ; AX = 1, ZF = 0
Flamuri Zero vendoset kur rezultati i një veprimi prodhon zero
në operandin destinacion.
Mbani mend...
• Një flamur vendoset kur barazohet me 1.
• Një flamur është i pastër kur bëhet i barabartë me 0.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Flamuri i Shënjës (SF)
25
mov cx,0
sub cx,1 ; CX = -1, SF = 1
add cx,2 ; CX = 1, SF = 0
Flamuri i Shënjës vendoset kur operandi destinacion bëhet
negativ. Flamuri është i pastër kur destinacioni bëhet pozitiv.
Flamuri i shënjës është një kopje e bit-it më të lartë të destinacionit:
mov al,0
sub al,1 ; AL = 11111111b, SF = 1
add al,2 ; AL = 00000001b, SF = 0
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Numra të plotë me Shënjë dhe Pa
Shënjë
Një vështrim Hardware-ik
26
• Të gjithë instruksionet e CPU-së veprojnë ekzaktësisht njëlloj
si në numrat me shënjë ashtu dhe në ato pa shënjë
• CPU-ja nuk mund të dallojë numrat e plotë me shënjë apo pa
shënjë
• JU, programuesit, jeni përgjegjësit e vetëm për përdorimin e
saktë të tipit të të dhenave me çdo instruksion
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Flamujt Overflow dhe Carry
Një vështrim Hardware-ik
27
• 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
Flamuri Carry (CF)
Flamuri carry vendoset kur rezultati i një veprimi gjeneron një vlerë pa
shenjë jashtë rangut (shumë i madh ose shmë i vogël për operandin
destinacion).
28
mov al,0FFh
add al,1 ; CF = 1, AL = 00
; Provoni të kaloni nën zero:
mov al,0
sub al,1 ; CF = 1, AL = FF
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Flamuri Overflow (OF)
Flamuri Overflow vendoset kur rezultati me shënjë i një veprimi nuk
është i vlefshëm ose është jashtë rangut.
29
; Shembull 1
mov al,+127
add al,1 ; OF = 1, AL = ??
; Shembull 2
mov al,7Fh ; OF = 1, AL = 80h
add al,1
Dy shembujt janë identikë në nivel binar sepse 7Fh është i
barabartë me +127. Për të përcaktuar vlerën e operandit
destinacion, shpesh është më e lehtë të llogaritet në hexadecimal.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Një Rregull Njëhsimi
• Për të shtuar dy numra të plotë, kujtoni që
flamuri Overflow vendoset vetëm kur . . .
– Shtohen dy nmra pozitivë dhe rezultati është
negativ
– Shtohen dy numra negativë dhe shuma e tyre
është pozitive
30
Cila do jetë vlera e flamurit Overflow ?
mov al,80h
add al,92h ; OF =
mov al,-2
add al,+127 ; OF =
1
0
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Në Vazhdim
31
• Instruksione Transferimi të Dhenash
• Mbledhja dhe Zbritja
• Veprime & Direktiva të lidhura me të Dhëna
• Adresimi Indirekt
• Instruksionet JMP dhe LOOP
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operatorë dhe Direktiva të lidhura
me të Dhena
• Operatori OFFSET
• Operatori PTR
• Operatori TYPE
• Operatori LENGTHOF
• Operatori SIZEOF
• Direktiva LABEL
32
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operatori OFFSET
• OFFSET kthen distancën në bytes, të një etikete nga fillimi i
segmentit të mbyllur të saj
– Në mënyrën e Mbrojtur (Protected mode): 32 bits
– Në mënyrën Reale(Real mode): 16 bits
33
offset
myByte
data segment:
Programet që shkruajmë për Mënyrën e Mbrojtur kanë
vetëm një segment unik (ne përdorim modelin e kujtesës
flat (flat memory model)).
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shembuj për operatorin OFFSET
34
.data
bVal BYTE ?
wVal WORD ?
dVal DWORD ?
dVal2 DWORD ?
.code
mov esi,OFFSET bVal ; ESI = 00404000
mov esi,OFFSET wVal ; ESI = 00404001
mov esi,OFFSET dVal ; ESI = 00404003
mov esi,OFFSET dVal2 ; ESI = 00404007
Le të supozojmë se segmenti data fillon në 00404000h:
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Lidhja me C/C++
35
; versioni C++:
char array[1000];
char * p = array;
Vlera e kthyer nga operatori OFFSET është një tregues(pointer).
Krahasoni kodin që vijon të shkruar si në gjuhën C++ ashtu dhe
në gjuhën assembly:
.data
array BYTE 1000 DUP(?)
.code
mov esi,OFFSET array ; ESI është p
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operatori PTR
36
.data
myDouble DWORD 12345678h
.code
mov ax,myDouble ; gabim – pse?
mov ax,WORD PTR myDouble ; ngarkon 5678h
mov WORD PTR myDouble,4321h ; ruan 4321h
Mbivendos tipin e paracaktuar të një etikete (variable). Siguron
fleksibilitet për aksesin e një pjesë të një variable.
Kujtoni se për akomodimin e të dhenave në kujtesë përdoret
renditja little endian (shikoni Seksionin 3.4.9 të librit).
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Renditja Little Endian
• Renditja Little Endian referohet te mënyra që Intel
akomodon numrat e plotë në kujtesë.
• Numrat eplotë Multi-byte akomodohen në renditje
të kundërt , me bit-in më pak të rendësishëm të
akomoduar te adresa më e ulët
• Për shembull, doubleword 12345678h duhet të
akomodohet si:
37
12345678 00005678
1234
78
56
34
12
0001
0002
0003
offsetdoubleword word byte
myDouble
myDouble + 1
myDouble + 2
myDouble + 3
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shembuj për operatorin PTR
38
.data
myDouble DWORD 12345678h
12345678 00005678
1234
78
56
34
12
0001
0002
0003
offsetdoubleword word byte
myDouble
myDouble + 1
myDouble + 2
myDouble + 3
mov al,BYTE PTR myDouble ; AL = 78h
mov al,BYTE PTR [myDouble+1] ; AL = 56h
mov al,BYTE PTR [myDouble+2] ; AL = 34h
mov ax,WORD PTR myDouble ; AX = 5678h
mov ax,WORD PTR [myDouble+2] ; AX = 1234h
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operatori PTR (vazhdim)
39
.data
myBytes BYTE 12h,34h,56h,78h
.code
mov ax,WORD PTR [myBytes] ; AX = 3412h
mov ax,WORD PTR [myBytes+2] ; AX = 7856h
mov eax,DWORD PTR myBytes ; EAX = 78563412h
Operatori PTR mund të përdoret edhe për 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.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Rradha Juaj . . .
40
.data
varB BYTE 65h,31h,02h,05h
varW WORD 6543h,1202h
varD DWORD 12345678h
.code
mov ax,WORD PTR [varB+2] ; a.
mov bl,BYTE PTR varD ; b.
mov bl,BYTE PTR [varW+2] ; c.
mov ax,WORD PTR [varD+2] ; d.
mov eax,DWORD PTR varW ; e.
Shkruani vlerat e çdo operandi destinacion:
0502h
78h
02h
1234h
12026543h
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operatori TYPE
Operatori TYPE kthen madhësinë, në bytes, të një
elementi të vetëm të të dhenave të deklaruara.
41
.data
var1 BYTE ?
var2 WORD ?
var3 DWORD ?
var4 QWORD ?
.code
mov eax,TYPE var1 ; 1
mov eax,TYPE var2 ; 2
mov eax,TYPE var3 ; 4
mov eax,TYPE var4 ; 8
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operatori LENGTHOF
42
.data LENGTHOF
byte1 BYTE 10,20,30 ; 3
array1 WORD 30 DUP(?),0,0 ; 32
array2 WORD 5 DUP(3 DUP(?)) ; 15
array3 DWORD 1,2,3,4 ; 4
digitStr BYTE "12345678",0 ; 9
.code
mov ecx,LENGTHOF array1 ; 32
Operatori LENGTHOF numëron numrin e elementeve
në një deklarim të thjeshtë të dhenash.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operatori SIZEOF
43
.data SIZEOF
byte1 BYTE 10,20,30 ; 3
array1 WORD 30 DUP(?),0,0 ; 64
array2 WORD 5 DUP(3 DUP(?)) ; 30
array3 DWORD 1,2,3,4 ; 16
digitStr BYTE "12345678",0 ; 9
.code
mov ecx,SIZEOF array1 ; 64
Operatori SIZEOF kthen një vlerë që është ekivalente me
prodhimin e LENGTHOF me TYPE.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shtrirje në Rreshta Shumëfishe (1 nga 2)
44
.data
array WORD 10,20,
30,40,
50,60
.code
mov eax,LENGTHOF array ; 6
mov ebx,SIZEOF array ; 12
Një deklarim i të dhenave shtrihet në rreshta shumëfishe nëse
çdo rresht (përveç të fundit) mbaron me presje. Operatorët
LENGTHOF dhe SIZEOF spozojnë se të gjithë rreshtat i
takojnë deklaratës:
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shtrirje në Rreshta Shumëfishe (2 of 2)
45
.data
array WORD 10,20
WORD 30,40
WORD 50,60
.code
mov eax,LENGTHOF array ; 2
mov ebx,SIZEOF array ; 4
Në shembullin që vijon, array identifikon vetëm deklaratën e
parë WORD. Krahasoni vlerat e kthyera nga LENGTHOF
dhe SIZEOF këtu me ato të faqës së mësipërme :
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Direktiva LABEL
• Përcakton një emër dhe tip alternativ etikete në një
vendndodhje ekzistuese akomodimi
• LABEL nuk bën alokim të asnjë hapësire akomodimi
në vetvete
• Shmang nevojen e përdorimit të operatorit PTR
46
.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
Në Vazhdim
47
• Instruksione Transferimi të Dhenash
• Mbledhja dhe Zbritja
• Veprime & Direktiva të lidhura me të Dhëna
• Adresimi Indirekt
• Instruksionet JMP dhe LOOP
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Adresimi Indirekt
• Operandet Indirekte
• Shembull Mbledhjeje Matrice
• Operande të Indeksuar
• Treguesa (Pointers)
48
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operande Indirekt (1 nga 2)
49
.data
val1 BYTE 10h,20h,30h
.code
mov esi,OFFSET val1
mov al,[esi] ; vlerësohet ESI (AL = 10h)
inc esi
mov al,[esi] ; AL = 20h
inc esi
mov al,[esi] ; AL = 30h
Një operand indirekt mban adresën e një variable, zakonisht të
një matrice apo të një vargu karakterësh. Ai mund të vlerësohet
(ekzaktësisht si një tregues).
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operande Indirekt (2 nga 2)
50
.data
myCount WORD 0
.code
mov esi,OFFSET myCount
inc [esi] ; gabim: me dy kuptime
inc WORD PTR [esi] ; ok
Përdorni PTR të qartësoni vetinë e madhësisë së një operandi
kujtese.
Duhet të përdoret PTR këtu?
add [esi],20
po, për arsye se [esi] mund
të tregoj në një a byte, word,
ose doubleword
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shembull Mbledhjeje Matrice
51
.data
arrayW WORD 1000h,2000h,3000h
.code
mov esi,OFFSET arrayW
mov ax,[esi]
add esi,2 ; ose: add esi,TYPE arrayW
add ax,[esi]
add esi,2
add ax,[esi] ; AX = shuma e matricës
Operandet Indirektë janë ideale për shqyrtimin e një matrice.
Shenoni që regjistri në kllapa dhet të rritet me një vlerë që
përshtatet me tipin e matricës.
Për Detyrë: Modifikoni këtë shembull për një matrice me
doublewords.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Operandë të Indeksuar
52
.data
arrayW WORD 1000h,2000h,3000h
.code
mov esi,0
mov ax,[arrayW + esi] ; AX = 1000h
mov ax,arrayW[esi] ; format alternativ
add esi,2
add ax,[arrayW + esi]
etc.
Një operand i indeksuar shton një konstante në një regjistër për
të prodhuar një adresë reale. Ekzistojnë dy forma për ta
shënuar:
[label + reg] label[reg]
Për Detyrë: Modifikoni këtë shembll për një matricë me
doublewords.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shkallëzimi i Indeksit
53
.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] ; 04
mov bx,arrayW[esi*TYPE arrayW] ; 0004
mov edx,arrayD[esi*TYPE arrayD] ; 00000004
Mund të shkallëzoni një operand indirekt ose të indeksuar te
ofseti i një elementi matrice. Kjo bëhet duke shumëzuar
indeksin me tipin(TYPE) e matricës:
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Treguesit(Pointers)
54
.data
arrayW WORD 1000h,2000h,3000h
ptrW DWORD arrayW
.code
mov esi,ptrW
mov ax,[esi] ; AX = 1000h
Ne mund të deklarojmë një tregues variable(pointer variable) që
përmban offset-in e një variable tjetër.
Format Alternativ :
ptrW DWORD OFFSET arrayW
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Në Vazhdim
• Instruksione Transferimi të Dhenash
• Mbledhja dhe Zbritja
• Veprime & Direktiva të lidhura me të
Dhëna
• Adresimi Indirekt
• Instruksionet JMP dhe LOOP
55
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Instrusionet JMP dhe LOOP
• Instruksioni JMP
• Instruksioni LOOP
• Shembull me LOOP
• Mbledhje matrice me numra të plotë
• Kopjimi i një Vargu Karakteresh (String)
56
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Instruksioni JMP
57
top:
.
.
jmp top
• JMP është një kërcim pa kondita në një etiketë që zakonisht
ndodhet në të njëjtën procedure.
• Sintaksa: JMP destinacioni
• Logjika: EIP destinacioni
• Shembull:
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Instruksioni LOOP
58
• Instruksioni LOOP krijon një cikël të numëruar
• Sintaksa: LOOP destinacion
• Logjika:
• ECX ECX – 1
• if ECX != 0, kërce te destinacioni
• Implementimi:
• Asembluesi llogarit distancën, në bytes, midis ofsetit të
instruksionit vijues dhe ofsetit të etiketës destinacion. Ky
quhet ofseti relativ.
• Ofseti relativ i shtohet EIP.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shembull me LOOP
59
00000000 66 B8 0000 mov ax,0
00000004 B9 00000005 mov ecx,5
00000009 66 03 C1 L1: add ax,cx
0000000C E2 FB loop L1
0000000E
Cikli që vijon llogarit shumën e numrave të plotë
5 + 4 + 3 +2 + 1:
Kur asemblohet një LOOP, vendndodhja aktuale = 0000000E (ofseti I
instruksionit pasues). –5 (FBh) shtohet te vendndodhja aktuale, duke
shkaktuar një kërcim te vendndodhja 00000009:
00000009 0000000E + FB
ofseti kod makine kod burimi
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Rradha Juaj . . .
60
Nëse ofseti relativ kodohet në një byte të thjeshtë me shenjë,
(a) cili është kërcimi më i madh i mundshëm prapavajtës?
(b) cili është kërcimi më i madh i mundshëm paravajtës?
(a) 128
(b) +127
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Rradha Juaj . . .
61
Cila do jetë vlera përfundimtare e AX?
mov ax,6
mov ecx,4
L1:
inc ax
loop L1
Sa herë do ekzekutohet cikli?
mov ecx,0
X2:
inc ax
loop X2
10
4,294,967,296 = 232
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Cikël i Përseritur
62
Nëse është e nevojshme të kodohet një cikël brenda një cikli
tjetër, duhet të ruhet vlera ECX e numëruesit të ciklit të
jashtëm. Në shembullin që vijon, cikli i jashtëm ekzekutohet
100 herë, ndërsa cikli i brendshëm 20 herë.
.data
count DWORD ?
.code
mov ecx,100 ; vendos numëruesin e ciklit të jashtëm
mov count,ecx ; ruan numëruesin e ciklit
mov ecx,20 ; vendos numëruesin e ciklit të brendshëm
L2: .
.
loop L2 ; persërit ciklin e brendshëm
mov ecx,count ; kthen numëruesin e ciklit të jashtëm
loop L1 ; repeat the outer loop
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Shuma e Elementeve të një Matrice
me Numra të Plotë
63
.data
intarray WORD 100h,200h,300h,400h
.code
mov edi,OFFSET intarray ; adresa e intarray
mov ecx,LENGTHOF intarray ; numeruesi i ciklit
mov ax,0 ; bën zero akumulatorin
L1:
add ax,[edi] ; shton një numër të plotë
add edi,TYPE intarray ; tregon te numri pasues
loop L1 ; persërit derisa ECX = 0
Kodi që vijon llogarit shumën e elementeve të një matrice me
numra të plotë 16-bit.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Rradha Juaj . . .
64
Çfarë ndryshime duhet të bëni te
programi në faqën e mëparshme nëse do
ishit duke shtuar një matricë me
elementë doubleword ?
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Kopjimi i një Vargu Karakteresh(String)
65
.data
source BYTE "This is the source string",0
target BYTE SIZEOF source DUP(0)
.code
mov esi,0 ; index register
mov ecx,SIZEOF source ; numëruesi i ciklit
L1:
mov al,source[esi] ; merr char nga source
mov target[esi],al ; e rezervon atë në target
inc esi ; kalon te karakteri tjeter
loop L1 ; përsëritet për gjithë vargun
Përdorim i
mirë i
SIZEOF
Kodi që vijon kopjon një string nga burimi në destinacion:
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Rradha Juaj . . .
66
Rishkruani programin në faqën e
mëparshme, duke përdorur adresimin
indirekt në vend të adresimit të indeksuar.
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Përmbledhje
• 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
67
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine
Fund
68

Contenu connexe

En vedette

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

En vedette (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Leksione 7 & 8 p

  • 1. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Transferimi i të dhenave, Adresimi, dhe Aritmetika
  • 2. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Vështrim i përgjithshëm 2 • Instruksione Transferimi të Dhenash • Mbledhja dhe Zbritja • Veprime & Direktiva të lidhura me të Dhëna • Adresimi Indirekt • Instruksionet JMP dhe LOOP
  • 3. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Instruksione Transferimi të Dhënash • Tipe Operandesh • Komente për Operandet e Instruksionit • Operandë të drejtpërdrejtë Kujtesë • Instruksioni MOV • Zgjerimi me Zero & me Shenjën • Instruksioni XCHG • Instruksionet Direct-Offset 3
  • 4. 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ë numër dhe kodohet me instruksionin – Memory – referencë në një vendndodhje në kujtesë • Adresa e kujtesës kodohet me instruksionin, ose një regjistër mban adresën e vendndodhjeje kujtese 4
  • 5. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Komente për Operandet e Instruksionit 5 Operandi Përshkrimi r8 Regjistër 8-bit me përdorim të përgjithshëm: AH, AL, BH, BL, CH, CL, DH, DL r16 Regjistër 16-bit me përdorim të përgjithshëm: AX, BX, CX, DX, SI, DI, SP, BP r32 Regjistër 32-bit me përdorim të përgjithshëm: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP reg Çfarëdo regjistër me përdorim të përgjithshëm sreg Regjistër 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ë regjistër me përdorim të përgjithshëm ose byte kujtese r/m16 Operand 16-bit që mund të jetë regjistër me përdorim të përgjithshëm ose word kujtese r/m32 Operand 32-bit që mund të jetë regjistër me përdorim të përgjithshëm ose doubleword kujtese mem Operand Kujtese 8-, 16-, 32-bit
  • 6. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operandë të drejtpërdrejtë Kujtesë • Operand i drejtpërdrejt Kujtese është një emër reference në hapësirën e kujtesës • Emri i referencës (etiketa(label)) vlerësohet automatikisht nga asembluesi 6 .data var1 BYTE 10h .code mov al,var1 ; AL = 10h mov al,[var1] ; AL = 10h Format alternativ
  • 7. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Instruksioni MOV 7 .data count BYTE 100 wVal WORD 2 .code mov bl,count mov ax,wVal mov count,al mov al,wVal ; gabim mov ax,count ; gabim mov eax,count ; gabim • Zhvendos nga burimi në destinacion. Sintaksa: MOV destinacion,burim • Nuk lejohet të përdorën dy operatorë kujtese njëkohësisht • Nuk mund të përdoren si destinacion CS dhe EIP • Nuk mund të kemi zhvendosje vlere immediate me segment
  • 8. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Rradha juaj . . . 8 .data bVal BYTE 100 bVal2 BYTE ? wVal WORD 2 dVal DWORD 5 .code mov esi,wVal Përmasa të ndryshme mov eip,dVal EIP nuk mund të jetë destinacioni mov 25,bVal Vlera immediate nuk mund të jetë destinacioni mov bVal2,bVal Nuk lejohen zhvendosje nga kujtesa në kujtesë Sqaroni pse secila nga instruksionet MOV që vijojnë janë të pavlefshme:
  • 9. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Zgjërim me Zero (Zero Extension) 9 mov bl,10001111b movzx ax,bl ; zgjërim me zero Kur kopjoni një vlerë më të vogël në një destinacion më të madh, instruksioni MOVZX mbush (zgjëron) gjysmën e sipërme të destinacionit me zero. 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 Source Destination0 0 0 0 0 0 0 0 0 Destinacioni duhet të jetë regjistër. Burimi Destinacioni
  • 10. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Zgjërim me Shenjën (Sign Extension) 10 mov bl,10001111b movsx ax,bl ; Zgjerim me shënjën Instruksioni MOVSX mbush gjysmën e sipërme të destinacionit me kopjim të vlerës së bit-it të shenjës së operandit burimor. 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 Source Destination1 1 1 1 1 1 1 1 Destinacioni duhet të jetë regjistër. Burimi Destinacioni
  • 11. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Instruksioni XCHG 11 .data var1 WORD 1000h var2 WORD 2000h .code xchg ax,bx ; shkëmben regj. 16-bit xchg ah,al ; shkëmben regj. 8-bit xchg var1,bx ; shkëmbim mem, reg xchg eax,ebx ; shkëmben regj. 32-bit xchg var1,var2 ; gabim: dy operandë kujtese XCHG shkëmben vlerat e dy operandeve. Të paktën njëri prej operandëve duhet të jetë regjistër. Nuk lejohen operandë immediate.
  • 12. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operandë Direkt-Ofset 12 .data arrayB BYTE 10h,20h,30h,40h .code mov al,arrayB+1 ; AL = 20h mov al,[arrayB+1] ; simbol alternativ Një konstante ofset shtohet në një etiketë(label) të dhënash për të prodhuar një adresë reale. Adresa vlerësohet për të marrë vlerën në vendndodhjen e saj në kujtesë.
  • 13. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operandë Direkt-Ofset (vazhdim) 13 .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 Një konstante ofset shtohet në një etiketë(label) të dhënash për të prodhuar një adresë reale. Adresa vlerësohet për të marrë vlerën në vendndodhjen e saj në kujtesë. ; Mund të asemblohen instruksionet që vijojnë? mov ax,[arrayW-2] ; ?? mov eax,[arrayD+16] ; ?? Çdo të ndodhë kur ato do ekzekutohen?
  • 14. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Rradha juaj . . . 14 Shkruani një program që bën rënditjen e tre vlerave doubleword në vlera në matricën që vijon si: 3, 1, 2. .data arrayD DWORD 1,2,3 • Hapi 2: Shkëmbejmë EAX me vlerën e tretë të matricës dhe e kopjojmë vlerën në EAX te pozicioni i parë i matricës. • Hapi 1: kopjojmë vlerën e parë në EAX dhe e shkëmbejmë atë me vlerën në pozicionin e dytë. mov eax,arrayD xchg eax,[arrayD+4] xchg eax,[arrayD+8] mov arrayD,eax
  • 15. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Në Vazhdim 15 • Instruksione Transferimi të Dhenash • Mbledhja dhe Zbritja • Veprime & Direktiva të lidhura me të Dhëna • Adresimi Indirekt • Instruksionet JMP dhe LOOP
  • 16. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine 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 16
  • 17. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine 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 17
  • 18. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shembuj me INC dhe DEC 18 .data myWord WORD 1000h myDword DWORD 10000000h .code inc myWord ; 1001h dec myWord ; 1000h inc myDword ; 10000001h mov ax,00FFh inc ax ; AX = 0100h mov ax,00FFh inc al ; AX = 0000h
  • 19. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Instruksionet ADD dhe SUB 19 • ADD destinacion, burim • Logjika: destinacion destinacion + burim • SUB destinacion, burim • Logjika: destinacion destinacion – burim • Kanë vend të njëjtat rregulla me instruksionin MOV
  • 20. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shembuj me ADD dhe SUB 20 .data var1 DWORD 10000h var2 DWORD 20000h .code ; ---EAX--- mov eax,var1 ; 00010000h add eax,var2 ; 00030000h add ax,0FFFFh ; 0003FFFFh add eax,1 ; 00040000h sub ax,1 ; 0004FFFFh
  • 21. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Instruksioni NEG (negate) 21 .data valB BYTE -1 valW WORD +32767 .code mov al,valB ; AL = -1 neg al ; AL = +1 neg valW ; valW = -32767 Ndryshon shenjën e operandit. Operandi mund të jetë një regjistër ose operand kujtese. Supozoni se AX përmban –32,768 dhe ne aplikojmë NEG mbi të. Do jetë i vlefshëm rezultati?
  • 22. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Implementimi i Shprehjeve Aritmetike 22 Rval SDWORD ? Xval SDWORD 26 Yval SDWORD 30 Zval SDWORD 40 .code mov eax,Xval neg eax ; EAX = -26 mov ebx,Yval sub ebx,Zval ; EBX = -10 add eax,ebx mov Rval,eax ; -36 Kompiluesit e Gjuhëve të Nivelit të Lartë përkthejnë shprehjet matematike në gjuhë makine. Kjo mund të bëhet edhe prej jush. Për shembull: Rval = -Xval + (Yval – Zval)
  • 23. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Flamuj që preken nga Aritmetika • Njësia Aritmetike dhe Logjike(ALU) ka një numër flamujsh gjëndjeje që reflekton rezultatin e veprimeve aritmetike (dhe bitwise) – Bazohen mbi përmbajtjen e operandit destinacion • Flamujt Kryesorë: – Flamuri Zero – vendoset(bëhet 1) kur destinacioni barazohet me zero – Flamuri Sign – vendoset kur destinacioni bëhet negativ – Flamuri Carry – vendoset kur vlera pa shenjë del jashtë rangut – Flamuri Overflow – vendoset kur vlera me shënjë del jashtë rangut • Instruksioni MOV nuk ndikon mbi flamujt. 23
  • 24. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Flamuri Zero (ZF) 24 mov cx,1 sub cx,1 ; CX = 0, ZF = 1 mov ax,0FFFFh inc ax ; AX = 0, ZF = 1 inc ax ; AX = 1, ZF = 0 Flamuri Zero vendoset kur rezultati i një veprimi prodhon zero në operandin destinacion. Mbani mend... • Një flamur vendoset kur barazohet me 1. • Një flamur është i pastër kur bëhet i barabartë me 0.
  • 25. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Flamuri i Shënjës (SF) 25 mov cx,0 sub cx,1 ; CX = -1, SF = 1 add cx,2 ; CX = 1, SF = 0 Flamuri i Shënjës vendoset kur operandi destinacion bëhet negativ. Flamuri është i pastër kur destinacioni bëhet pozitiv. Flamuri i shënjës është një kopje e bit-it më të lartë të destinacionit: mov al,0 sub al,1 ; AL = 11111111b, SF = 1 add al,2 ; AL = 00000001b, SF = 0
  • 26. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Numra të plotë me Shënjë dhe Pa Shënjë Një vështrim Hardware-ik 26 • Të gjithë instruksionet e CPU-së veprojnë ekzaktësisht njëlloj si në numrat me shënjë ashtu dhe në ato pa shënjë • CPU-ja nuk mund të dallojë numrat e plotë me shënjë apo pa shënjë • JU, programuesit, jeni përgjegjësit e vetëm për përdorimin e saktë të tipit të të dhenave me çdo instruksion
  • 27. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Flamujt Overflow dhe Carry Një vështrim Hardware-ik 27 • 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
  • 28. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Flamuri Carry (CF) Flamuri carry vendoset kur rezultati i një veprimi gjeneron një vlerë pa shenjë jashtë rangut (shumë i madh ose shmë i vogël për operandin destinacion). 28 mov al,0FFh add al,1 ; CF = 1, AL = 00 ; Provoni të kaloni nën zero: mov al,0 sub al,1 ; CF = 1, AL = FF
  • 29. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Flamuri Overflow (OF) Flamuri Overflow vendoset kur rezultati me shënjë i një veprimi nuk është i vlefshëm ose është jashtë rangut. 29 ; Shembull 1 mov al,+127 add al,1 ; OF = 1, AL = ?? ; Shembull 2 mov al,7Fh ; OF = 1, AL = 80h add al,1 Dy shembujt janë identikë në nivel binar sepse 7Fh është i barabartë me +127. Për të përcaktuar vlerën e operandit destinacion, shpesh është më e lehtë të llogaritet në hexadecimal.
  • 30. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Një Rregull Njëhsimi • Për të shtuar dy numra të plotë, kujtoni që flamuri Overflow vendoset vetëm kur . . . – Shtohen dy nmra pozitivë dhe rezultati është negativ – Shtohen dy numra negativë dhe shuma e tyre është pozitive 30 Cila do jetë vlera e flamurit Overflow ? mov al,80h add al,92h ; OF = mov al,-2 add al,+127 ; OF = 1 0
  • 31. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Në Vazhdim 31 • Instruksione Transferimi të Dhenash • Mbledhja dhe Zbritja • Veprime & Direktiva të lidhura me të Dhëna • Adresimi Indirekt • Instruksionet JMP dhe LOOP
  • 32. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operatorë dhe Direktiva të lidhura me të Dhena • Operatori OFFSET • Operatori PTR • Operatori TYPE • Operatori LENGTHOF • Operatori SIZEOF • Direktiva LABEL 32
  • 33. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operatori OFFSET • OFFSET kthen distancën në bytes, të një etikete nga fillimi i segmentit të mbyllur të saj – Në mënyrën e Mbrojtur (Protected mode): 32 bits – Në mënyrën Reale(Real mode): 16 bits 33 offset myByte data segment: Programet që shkruajmë për Mënyrën e Mbrojtur kanë vetëm një segment unik (ne përdorim modelin e kujtesës flat (flat memory model)).
  • 34. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shembuj për operatorin OFFSET 34 .data bVal BYTE ? wVal WORD ? dVal DWORD ? dVal2 DWORD ? .code mov esi,OFFSET bVal ; ESI = 00404000 mov esi,OFFSET wVal ; ESI = 00404001 mov esi,OFFSET dVal ; ESI = 00404003 mov esi,OFFSET dVal2 ; ESI = 00404007 Le të supozojmë se segmenti data fillon në 00404000h:
  • 35. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Lidhja me C/C++ 35 ; versioni C++: char array[1000]; char * p = array; Vlera e kthyer nga operatori OFFSET është një tregues(pointer). Krahasoni kodin që vijon të shkruar si në gjuhën C++ ashtu dhe në gjuhën assembly: .data array BYTE 1000 DUP(?) .code mov esi,OFFSET array ; ESI është p
  • 36. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operatori PTR 36 .data myDouble DWORD 12345678h .code mov ax,myDouble ; gabim – pse? mov ax,WORD PTR myDouble ; ngarkon 5678h mov WORD PTR myDouble,4321h ; ruan 4321h Mbivendos tipin e paracaktuar të një etikete (variable). Siguron fleksibilitet për aksesin e një pjesë të një variable. Kujtoni se për akomodimin e të dhenave në kujtesë përdoret renditja little endian (shikoni Seksionin 3.4.9 të librit).
  • 37. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Renditja Little Endian • Renditja Little Endian referohet te mënyra që Intel akomodon numrat e plotë në kujtesë. • Numrat eplotë Multi-byte akomodohen në renditje të kundërt , me bit-in më pak të rendësishëm të akomoduar te adresa më e ulët • Për shembull, doubleword 12345678h duhet të akomodohet si: 37 12345678 00005678 1234 78 56 34 12 0001 0002 0003 offsetdoubleword word byte myDouble myDouble + 1 myDouble + 2 myDouble + 3
  • 38. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shembuj për operatorin PTR 38 .data myDouble DWORD 12345678h 12345678 00005678 1234 78 56 34 12 0001 0002 0003 offsetdoubleword word byte myDouble myDouble + 1 myDouble + 2 myDouble + 3 mov al,BYTE PTR myDouble ; AL = 78h mov al,BYTE PTR [myDouble+1] ; AL = 56h mov al,BYTE PTR [myDouble+2] ; AL = 34h mov ax,WORD PTR myDouble ; AX = 5678h mov ax,WORD PTR [myDouble+2] ; AX = 1234h
  • 39. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operatori PTR (vazhdim) 39 .data myBytes BYTE 12h,34h,56h,78h .code mov ax,WORD PTR [myBytes] ; AX = 3412h mov ax,WORD PTR [myBytes+2] ; AX = 7856h mov eax,DWORD PTR myBytes ; EAX = 78563412h Operatori PTR mund të përdoret edhe për 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.
  • 40. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Rradha Juaj . . . 40 .data varB BYTE 65h,31h,02h,05h varW WORD 6543h,1202h varD DWORD 12345678h .code mov ax,WORD PTR [varB+2] ; a. mov bl,BYTE PTR varD ; b. mov bl,BYTE PTR [varW+2] ; c. mov ax,WORD PTR [varD+2] ; d. mov eax,DWORD PTR varW ; e. Shkruani vlerat e çdo operandi destinacion: 0502h 78h 02h 1234h 12026543h
  • 41. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operatori TYPE Operatori TYPE kthen madhësinë, në bytes, të një elementi të vetëm të të dhenave të deklaruara. 41 .data var1 BYTE ? var2 WORD ? var3 DWORD ? var4 QWORD ? .code mov eax,TYPE var1 ; 1 mov eax,TYPE var2 ; 2 mov eax,TYPE var3 ; 4 mov eax,TYPE var4 ; 8
  • 42. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operatori LENGTHOF 42 .data LENGTHOF byte1 BYTE 10,20,30 ; 3 array1 WORD 30 DUP(?),0,0 ; 32 array2 WORD 5 DUP(3 DUP(?)) ; 15 array3 DWORD 1,2,3,4 ; 4 digitStr BYTE "12345678",0 ; 9 .code mov ecx,LENGTHOF array1 ; 32 Operatori LENGTHOF numëron numrin e elementeve në një deklarim të thjeshtë të dhenash.
  • 43. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operatori SIZEOF 43 .data SIZEOF byte1 BYTE 10,20,30 ; 3 array1 WORD 30 DUP(?),0,0 ; 64 array2 WORD 5 DUP(3 DUP(?)) ; 30 array3 DWORD 1,2,3,4 ; 16 digitStr BYTE "12345678",0 ; 9 .code mov ecx,SIZEOF array1 ; 64 Operatori SIZEOF kthen një vlerë që është ekivalente me prodhimin e LENGTHOF me TYPE.
  • 44. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shtrirje në Rreshta Shumëfishe (1 nga 2) 44 .data array WORD 10,20, 30,40, 50,60 .code mov eax,LENGTHOF array ; 6 mov ebx,SIZEOF array ; 12 Një deklarim i të dhenave shtrihet në rreshta shumëfishe nëse çdo rresht (përveç të fundit) mbaron me presje. Operatorët LENGTHOF dhe SIZEOF spozojnë se të gjithë rreshtat i takojnë deklaratës:
  • 45. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shtrirje në Rreshta Shumëfishe (2 of 2) 45 .data array WORD 10,20 WORD 30,40 WORD 50,60 .code mov eax,LENGTHOF array ; 2 mov ebx,SIZEOF array ; 4 Në shembullin që vijon, array identifikon vetëm deklaratën e parë WORD. Krahasoni vlerat e kthyera nga LENGTHOF dhe SIZEOF këtu me ato të faqës së mësipërme :
  • 46. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Direktiva LABEL • Përcakton një emër dhe tip alternativ etikete në një vendndodhje ekzistuese akomodimi • LABEL nuk bën alokim të asnjë hapësire akomodimi në vetvete • Shmang nevojen e përdorimit të operatorit PTR 46 .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
  • 47. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Në Vazhdim 47 • Instruksione Transferimi të Dhenash • Mbledhja dhe Zbritja • Veprime & Direktiva të lidhura me të Dhëna • Adresimi Indirekt • Instruksionet JMP dhe LOOP
  • 48. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Adresimi Indirekt • Operandet Indirekte • Shembull Mbledhjeje Matrice • Operande të Indeksuar • Treguesa (Pointers) 48
  • 49. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operande Indirekt (1 nga 2) 49 .data val1 BYTE 10h,20h,30h .code mov esi,OFFSET val1 mov al,[esi] ; vlerësohet ESI (AL = 10h) inc esi mov al,[esi] ; AL = 20h inc esi mov al,[esi] ; AL = 30h Një operand indirekt mban adresën e një variable, zakonisht të një matrice apo të një vargu karakterësh. Ai mund të vlerësohet (ekzaktësisht si një tregues).
  • 50. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operande Indirekt (2 nga 2) 50 .data myCount WORD 0 .code mov esi,OFFSET myCount inc [esi] ; gabim: me dy kuptime inc WORD PTR [esi] ; ok Përdorni PTR të qartësoni vetinë e madhësisë së një operandi kujtese. Duhet të përdoret PTR këtu? add [esi],20 po, për arsye se [esi] mund të tregoj në një a byte, word, ose doubleword
  • 51. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shembull Mbledhjeje Matrice 51 .data arrayW WORD 1000h,2000h,3000h .code mov esi,OFFSET arrayW mov ax,[esi] add esi,2 ; ose: add esi,TYPE arrayW add ax,[esi] add esi,2 add ax,[esi] ; AX = shuma e matricës Operandet Indirektë janë ideale për shqyrtimin e një matrice. Shenoni që regjistri në kllapa dhet të rritet me një vlerë që përshtatet me tipin e matricës. Për Detyrë: Modifikoni këtë shembull për një matrice me doublewords.
  • 52. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Operandë të Indeksuar 52 .data arrayW WORD 1000h,2000h,3000h .code mov esi,0 mov ax,[arrayW + esi] ; AX = 1000h mov ax,arrayW[esi] ; format alternativ add esi,2 add ax,[arrayW + esi] etc. Një operand i indeksuar shton një konstante në një regjistër për të prodhuar një adresë reale. Ekzistojnë dy forma për ta shënuar: [label + reg] label[reg] Për Detyrë: Modifikoni këtë shembll për një matricë me doublewords.
  • 53. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shkallëzimi i Indeksit 53 .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] ; 04 mov bx,arrayW[esi*TYPE arrayW] ; 0004 mov edx,arrayD[esi*TYPE arrayD] ; 00000004 Mund të shkallëzoni një operand indirekt ose të indeksuar te ofseti i një elementi matrice. Kjo bëhet duke shumëzuar indeksin me tipin(TYPE) e matricës:
  • 54. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Treguesit(Pointers) 54 .data arrayW WORD 1000h,2000h,3000h ptrW DWORD arrayW .code mov esi,ptrW mov ax,[esi] ; AX = 1000h Ne mund të deklarojmë një tregues variable(pointer variable) që përmban offset-in e një variable tjetër. Format Alternativ : ptrW DWORD OFFSET arrayW
  • 55. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Në Vazhdim • Instruksione Transferimi të Dhenash • Mbledhja dhe Zbritja • Veprime & Direktiva të lidhura me të Dhëna • Adresimi Indirekt • Instruksionet JMP dhe LOOP 55
  • 56. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Instrusionet JMP dhe LOOP • Instruksioni JMP • Instruksioni LOOP • Shembull me LOOP • Mbledhje matrice me numra të plotë • Kopjimi i një Vargu Karakteresh (String) 56
  • 57. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Instruksioni JMP 57 top: . . jmp top • JMP është një kërcim pa kondita në një etiketë që zakonisht ndodhet në të njëjtën procedure. • Sintaksa: JMP destinacioni • Logjika: EIP destinacioni • Shembull:
  • 58. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Instruksioni LOOP 58 • Instruksioni LOOP krijon një cikël të numëruar • Sintaksa: LOOP destinacion • Logjika: • ECX ECX – 1 • if ECX != 0, kërce te destinacioni • Implementimi: • Asembluesi llogarit distancën, në bytes, midis ofsetit të instruksionit vijues dhe ofsetit të etiketës destinacion. Ky quhet ofseti relativ. • Ofseti relativ i shtohet EIP.
  • 59. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shembull me LOOP 59 00000000 66 B8 0000 mov ax,0 00000004 B9 00000005 mov ecx,5 00000009 66 03 C1 L1: add ax,cx 0000000C E2 FB loop L1 0000000E Cikli që vijon llogarit shumën e numrave të plotë 5 + 4 + 3 +2 + 1: Kur asemblohet një LOOP, vendndodhja aktuale = 0000000E (ofseti I instruksionit pasues). –5 (FBh) shtohet te vendndodhja aktuale, duke shkaktuar një kërcim te vendndodhja 00000009: 00000009 0000000E + FB ofseti kod makine kod burimi
  • 60. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Rradha Juaj . . . 60 Nëse ofseti relativ kodohet në një byte të thjeshtë me shenjë, (a) cili është kërcimi më i madh i mundshëm prapavajtës? (b) cili është kërcimi më i madh i mundshëm paravajtës? (a) 128 (b) +127
  • 61. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Rradha Juaj . . . 61 Cila do jetë vlera përfundimtare e AX? mov ax,6 mov ecx,4 L1: inc ax loop L1 Sa herë do ekzekutohet cikli? mov ecx,0 X2: inc ax loop X2 10 4,294,967,296 = 232
  • 62. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Cikël i Përseritur 62 Nëse është e nevojshme të kodohet një cikël brenda një cikli tjetër, duhet të ruhet vlera ECX e numëruesit të ciklit të jashtëm. Në shembullin që vijon, cikli i jashtëm ekzekutohet 100 herë, ndërsa cikli i brendshëm 20 herë. .data count DWORD ? .code mov ecx,100 ; vendos numëruesin e ciklit të jashtëm mov count,ecx ; ruan numëruesin e ciklit mov ecx,20 ; vendos numëruesin e ciklit të brendshëm L2: . . loop L2 ; persërit ciklin e brendshëm mov ecx,count ; kthen numëruesin e ciklit të jashtëm loop L1 ; repeat the outer loop
  • 63. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Shuma e Elementeve të një Matrice me Numra të Plotë 63 .data intarray WORD 100h,200h,300h,400h .code mov edi,OFFSET intarray ; adresa e intarray mov ecx,LENGTHOF intarray ; numeruesi i ciklit mov ax,0 ; bën zero akumulatorin L1: add ax,[edi] ; shton një numër të plotë add edi,TYPE intarray ; tregon te numri pasues loop L1 ; persërit derisa ECX = 0 Kodi që vijon llogarit shumën e elementeve të një matrice me numra të plotë 16-bit.
  • 64. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Rradha Juaj . . . 64 Çfarë ndryshime duhet të bëni te programi në faqën e mëparshme nëse do ishit duke shtuar një matricë me elementë doubleword ?
  • 65. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Kopjimi i një Vargu Karakteresh(String) 65 .data source BYTE "This is the source string",0 target BYTE SIZEOF source DUP(0) .code mov esi,0 ; index register mov ecx,SIZEOF source ; numëruesi i ciklit L1: mov al,source[esi] ; merr char nga source mov target[esi],al ; e rezervon atë në target inc esi ; kalon te karakteri tjeter loop L1 ; përsëritet për gjithë vargun Përdorim i mirë i SIZEOF Kodi që vijon kopjon një string nga burimi në destinacion:
  • 66. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Rradha Juaj . . . 66 Rishkruani programin në faqën e mëparshme, duke përdorur adresimin indirekt në vend të adresimit të indeksuar.
  • 67. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Përmbledhje • 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 67
  • 68. Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine Fund 68