leksione 5 & 6
TRANSCRIPT
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
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)
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
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
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine5
Shprehjet Integer
• Operatorët dhe nivelet e përparësisë(precedence):
• Shembuj:
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'
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 $
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.
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)
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)
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)
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
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
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)
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
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
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
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)
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
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
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)
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)
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
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
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)
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)
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
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
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)
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ë
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.
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:
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
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
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.
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
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
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ë:
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ë:
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
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
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!
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)
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
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
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)
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
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
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
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"
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)
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
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)
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
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
Pergatiti: Roland Vasili – Bazuar në Slidet e Kip Irvine56
46 69 6E 69 73