ASSEMBLER
|
Assembler
programlama dili, çogu zaman özel alanlarda gelistirilen programlarda kullanilan
alt düzel bir Programlama dili olarak tanimlanir. Bu dilin komutlari,
bilgisayarin dogrudan islettigi makine dili komutlarinin birebir karsi ligidir.
Bu nedenle bu dil için makine dili de denilebilir. Her ne kadar
uzman programcilarin özel alanlarda kullandigi bir dil olarak tanimlansa da,
programcilar istedikleri takdirde her türlü uygulamayi bu dil ile gelistirebilirler
yada kullandiklari üst düzey dil altindan çagirabilecekleri procedurler
yazabilirler. Çünkü hemen hemen her dilde assembler için destek bulunmaktadir. Dilin en büyük
avantaji CPU çevrebirimlerinin ve ana bellegin çok iyi bir sekilde kontrolünü
saglamasidir. Ayrica isletim sistem fonksiyonlarini da çok kolaylikla kullanmak
mümkündür. Assembler program dili derleyicisi kullanilan ko mutlarin birebir
makine dili karsiliklarini üretir. Bu nedenle bu dil ile olusturulan programlar
olabilecek en kisa programlar olurlar. Bir assembler programi çalisabilir bir programin tüm kesimlerinin tam olarak tanitilmasi ile olusturulabilir. Bu nedenle bir assembler programda minimum üç ana kesim bulunmalidir. 1 -
STACK Segment 2 -
DATA Segment 3 -
CODE Segment Basit
bir assembler programi; STACK
SEGMENT PARA STACK DB
64 DUP (STACK) STACK
ENDS DATA
SEGMENT PARA DATA MESAJ
DB BU BiR ASSEMBLER PROGRAMIDIR $ DATA
ENDS CODE
SEGMENT PARA CODE ANA
PROC FAR ASSUME
CS;CODE, DS;DATA, ES;DATA, SS;STACK PUSH
DS SUB
AX,AX PUSH
AX MOV
AX,DATA MOV
DS,AX MOV
ES,AX LEA
DX,MESAJ MOV
AH,09 INT
21H RET ANA
ENDP CODE
ENDS END 1.
BiLGiNiN TEMSiLi Elektronik
bilgi islem makinalarinda bilgiler elektriksel uyarimlarla temsil edilirler. Bu
uyarimlarin ifadesi 1 ve 0lardan olusan rakamlarla temsil edilirler. Bu uyarimlari
BIT adi verilir. Açiktir ki bir BIT ile 0 ve 1 gibi iki b ilginin temsili
sözkonusudur. Ancak günlük hayatta kullandigimiz bilgiler 2 adet degildir. Bu nedenle
BITler guruplanarak kullanilirlar. En küçük BIT gurubu 8 bitten olusan
guruptur ki bu guruba BYTE adi verilir. Bir byte ile +127 ile -127 arasindaki
rak amlar ile harflerin temsili mümkün olur. Bir byte ile temsil edilen harfler
için kullanilan en yaygin stantdart ASCII(American Standard Code for Infirmation
Interchange) standartdir. 2-
VERi TiPLERi Bir programlama
dilinin temel özelliklerinden birisi dilin içinde kullanilacak olan veri
tipleridir. Burada assembler dilinde kullanilan en basit veri tiplerinden
bahsedilecektir. Assembler
programlama dilinde kullanilacak olan bilgilerin uzunlugu bilgisayarin mikroislemcisine
baglidir. 8088 mikroislemci için en fazla 16 bit uzunlugunda bir veri temsil
edilebilir. 80286, 80386 ve 80486 mikroislemcileri daha g elismis olduklari
için kullandiklari bilgi uzunlugu daha fazla olabilir. 2.1 BYTE Byte 8 bitten
olusan bir bilgi birimidir. Assemblerda byte ile hem nümerik hemde alfanümerik
bilgileri temsil etmek mümkündür. Gerek BYTE gerekse diger veri tiplerinde
sayilar isaretli ve isaretsiz olarak iki ana guruba ayrilirlar. isaretsiz sayilar
tüm veri alanini bir bütün olarak degerlendirildigi bir durumu ifade eder. Sayilarin
isaretli veya isaretsiz olmasi makine açisindan izafi bir durumdur. 1 0
0 0 0 0 0 1 isaretsiz 129 sayisini temsil eder. 1 0
0 0 0 0 0 1 isaretli -1 sayisini temsil eder. Negatif
sayilarda en duyarli bit 1 olur. Byte
iki ana kisimdan olusur. Her kisima NIBBLE adi verilir. Her NIBBLE bir
hexadecimal sayiyi temsil eder. 1 0
0 0 0 0 0 1 -----------
------------- 2.NIBBLE
1.NIBBLE 2.2 WORD 2
Adet Byte ile olusturulmus bir yapidir. 8088 ve diger mikroislemciler 16 bit
uzunlugundaki bu yapiyi desteklerler. Word yapisini bir bütün olarak isleyebileceginiz
gibi yüksek byte (HB) veya Low byte (LB) olarak da isleyebilirsini z. 2.3 DOUBLEWORD iki
word uzunlugunda yani 32 bit uzunlugunda bir yapidir. Gerek adreslemede gerekse
büyük sayilarin saklanmasinda kullanilir. 2.4 QUADWORD 64
Bit uzunlugunda bir yapidir. 4 wordun birlestirilmesi ile olusturulur. 8088
Mikroislemcisi olan bir makinada direkt mikroislemcinin destekledigi BYTE ve
WORD kavramlari kullanilabilir. 80286, 80386 ve üzeri mikroislemcilerde BYTE ve
WORD kavramlarinin disinda DOUBLEWORD ve QUADWORD kavramlari da kulla nilabilir.
8088 mikroislemcilerde WORDden daha uzun sabit ve degiskenler de kullanilabilir.
Ancak bu kullanim direkt mikroislemci destegi disinda yazilim destegi ile olur. 3- MiKROisLEMCi TASARIMI Bir
mikroislemci,kendisine bagli çevre birimlerle haberlesebilmek, yürütmekte oldugu
programlari kontrol edebilmek için REGiSTER adi verilen, kendi iç yapisinda
fiziksel olarak bulunan RAM elemanlarini kullanir. REGiSTERLER bir mikroislemcinin
en temel bilesenlerinden biridir. intel 80xxx serisi mikroislemcilerde
uzunluklari degismekle beraber asagidaki registerler bulunur. Genel
Amacli Registerler AX
Ah-Al Accumulator BX
Bh-Bl Base CX
Ch-Cl Counter DX
Dh-Dl Data Segment
Registerleri CS
Code Segment DS
Data Segment SS
Stack Segment ES
Extra Segment Offset
Registerleri IP
Instraction Pointer SP
Stack Pointer BP
Base Pointer SI
Stack Information DI
Data Information Flag
Registerleri Flag 3.1 Genel Amaçli Registerler AX,BX,CX,DX
registerleri genel amaçli registerlerdir. Mikroislemci programlari çalistirirken
verileri ana bellek ile iç bellek arasinda sürekli olarak tasir. Genel amaçli
registerler bu tasima sirasinda aracilik ederler. Ayni zaman da matematiksel islemlerde
giris ve çikis noktalari olarak kullanilirlar. X Bu
registerlerin tamami 16 bit uzunlugunda olup, 2 bytetan olusurlar. Bytelar
bir bütün olarak kullanilabilecegi gibi ayri ayri da kullanilabilirler. 3.1.1
AX YAZMACI Programlarda
en çok kullanilan yazmaçlardan biridir. Accumulatorün kisaltilmasi sonunda olusan
AX yazmaci bütün giris ve çikis islemlerinde ve bazi aritmetik islemlerde
kullanilir. AX -------------------------------------------------------- AH
AL 3.1.2
BX YAZMACI BX
Registeri Base register olarak da bilinir. RAM ve IO islemlerinde adreslemede
kullanilir. Register adresleme islemlerinde daha çok offset degerlerini tutar.
Ayrica hesaplama islemlerinde de kullanilir. BX -------------------------------------------------------- BH
BL 3.1.3
CX YAZMACI CX
Registeri Counter registeridir. Döngü islemlerinde ve kaydirma islemlerinde
sayaç olarak kullanilir. CX -------------------------------------------------------- CH
CL 3.1.4
DX YAZMACI Register
bazi giris çikis islemlerinde ve matematiksel islemlerde kullanilir.Daha çok
çarpma ve bölme islemlerinde büyük sayilari saklamak için AX registerinin bir
parçasiymis gibi kullanilir. DX -------------------------------------------------------- DH DL 3.2 Segment Registerleri 3.3 Pointer ve Index Registerleri 3.4 PSW Registeri 4. BELLEK , SEGMENT, OFFSET 5. DEBUG PROGRAMI Debug
programi exe veya com tipli, diger bir deyisle makine dili formatli program
dosyalarinin çalistirilmasi, bu programlarin bellek yerlesimlerinin, cpu
üzerindeki etkilerinin ve verilerinin incelenmesi, degistirilmesi vs. amaciyla
ku llanilan bir programdir. Debug
programi ile bir makine dili programi bellege yükleyebilir, bu programi step
step çalistirabileceginiz gibi programin belli bir kismini çalistirabilirsiniz
veya programin makine dili kodlari üzerinde degisiklik yapabilir, programa yeni
kodlar ekleyebilir veya çikarabilirsiniz. Yada herhangi bir programi assembly
kullanarak veya makine dili kullanarak yeniden olusturabilirsiniz. 5.1 Debug Komutlari. Debug
programi dos isletim sisteminin bir parçasidir. Bu nedenle dos versionlari arasinda
komutlarda veya komut özelliklerinde degisiklikler olabilmektedir. Burada
programin tüm komutlarini anlatmak yerine program yazmayi veya incelemeyi saglayacak
olan komutlar üzerinde durulacaktir. A
Assemble Assembly programlarinin yazilmasini saglar. G
Go Bellekte yüklü olan bir programin çalistirilmasini saglar. L
Load Diskten bellege bir programin yüklenmesini saglar. N
Name Bellekteki program için isim seçmeyi saglar. Q
Quit Programdan çikarak isletim sistemine dönmeyi saglar. R
Register Register degerlerini görme ve degistirme. T
Trace Bellekteki bir veya daha fazla komutun çalistirilmasini saglar. U
Unassembly Assembly kodlarinin makine dili karsiliklarini almanizi saglar. W
Write Bellekteki programin diske yazilmasini saglar. Program
sistem komut satirindan debug yazilarak çalistirilabilir. Program çalistirilirken
eger bir program bellege yüklenecekse bu program ismi komut satirindan
verilebilir. Program çalistiginda ekranin sol tarafinda ( - ) isareti
belirecektir. Bu prompt debug programinin komut almaya hazir oldugunu gösterir. 5.1.1 A Assembly Komutu A
Komutu assembly program yazmak için kullanilir. Bu komutun kullanilis sekli; -- A [segment:offset] seklindedir. Komutun
parametresi olan adres, yazilacak programin bellegin neresinden itibaren yerlesecegini
gösterir. Parametre seçimliktir. Eger verilmeyecek olur ise mevcut CS ve IP
üzerindeki degerler komutun parametresi olarak varsayilir. Komuttan sonra hiç
bir parametre vermeyeceginiz gibi sadece offset adresi de verebilirsiniz. Eger
komuttan sonra sadece tek bir sayi verilmisse verilen deger offset olarak algilanir
ve IP registerine bu deger verilerek programin default segment ve belirlenen
offset üzerinde n yazilmasi saglanir. Komutun
çalistirilmasi ile, default veya belirlenen segment ve offset adresi yeni bir
satir basina yazilarak bu adresin yaninda komut girisi için beklenir. Her komut
girilip enter tusuna basildiginda debug ilk önce girilen komutu yorumlar ve
girile n komut dogru ise segment ve offset adresleri yazilan komut uzunlugu
kadar artirilarak yeni komut girisi için beklemeye baslar. Eger girilen komut
hatali ise hata yeri gösterilerek komutun tekrar girilmesi için ayni segmet ve
offset adreslerinde beklenir. Eger herhangi bir satirda komut girilmeyerek
enter tusuna basilirsa debug komut satirina geri döner. Örnek; C>Debug - A 2054:0100
Push Ds 2054:0101
Mov Ax,B800 2054:0104
Mov Ds,Ax 2054:0106
Mov Si,0000 2054:0109
Mov Word [Si],7941 2054:010C
Pop Ds 2054:010D
Int 20 2054:010F - G Program
yazilirken en son girilen komutun offset adresi default offset olarak alinir. A
komutundan çiktiktan sonra tekrar ayni komut kullanilirsa default segmentin son
kalinan offseti ekrana getirilir. Eger programa ek yapilacaksa bu yöntem kullani
labilir. Ancak herhangi bir komut degistirilecekse komuta girilirken degistirilecek
satirin segment ve offset adresi verilerek girilmelidir. A
komutu ile girilen komutlar bellege pespese yerlestirilirler. Bu nedenle yazilmis
bir programin degistirilmesi oldukça zordur. Eger degistireceginiz komut uzunlugu
daha önce yazdiginiz komut uzunlugu ile ayni ise problemsiz bir degisim
sözkonusu olabilir. Ancak yazacaginiz komut eskisinden uzun ise M komutu ile
ramde yer açmak gerekir. 5.1.2.
G Go Komutu Go
komutu hafizadaki bir programin icra ettirilmesi amaci ile kullanilir. Komutun
formati; - G
Adres seklindedir. Komuttan
sonra verilen Adres parametresi seçimliktir. Adres verilmez ise program CS;IP
ikilisindeki degerler default olarak alinarak çalistirilir. Verilen adres her
zaman programin baslatilacagi adres olarak alinir. Bu deger sadece offset
olarak ve rilebilecegi gibi segmet ve offest olarak da verilebilir. Hafizadaki
herhangi bir program RET yada INT 20 komutlarindan biri ile bitmelidir. G
komutu bu iki assembler komutundan birini icra ettirdiginde PROGRAM TERMINATED
NORMALLY deyimi ile sona erer. Bahsedilen komutlar program icrasini sona
erdirerek k omut satirina dönmeyi saglar. Herhangi bir program bu iki komuttan
biri ile sona ermiyor ise makinaniz denetimsiz komutlar yüzünden kilitlenecek
yada istem disi davranacaktir. Herhangi
bir programi birden fazla sayida çalistiracaksaniz ikinci ve sonraki çalistirmalarda
CS:IP ikilisinin degerlerinden emin olmalisiniz. CS:IP ikilisine istediginiz
herhangi bir degeri R komutu ile atayabilirsiniz. 5.1.3
L Load Komutu L
Komutu disk üzerindeki herhangi bir programin bellege yüklenmesi için kullanilir.
Komutun herhangi bir parametresi yoktur. Komut N komutu ile ismi belirlenmis
bulunan programi bellege yükler. 5.1.4
N Name Komutu N
Komutu, L veya W komutu için dosya ismi seçmekte kullanilir. Komutun kullanim sekli; - N
Dosya Adi seklindedir. Name
komutu Load ve Write komutlarindan önce kullanilarak diskten çagrilacak yada
diske yazilacak dosyanin adini belirlemekte kullanilir. 5.1.4
Q Quit Komutu Komut
debug programini sonlandirir. 5.1.5
R Register Komutu Komut
CPU registerlerinin degerlerini görmek yada degistirmek için kullanilir. R
komutunun kullanim biçimi asagida verilmistir. -
R Register Adi Komut
registerlerin kullanimi ile ilgili olmak üzere 3 ayri görevi yerine getirir. R : Komut tek basina kullanilirsa CPU registerlerinin o anki tüm degerleri gösterilir. Registerlerin yanisira komut Flag registerinin degerlerini de temsili olarak gösterecektir. Komutun kullanimi sonunda CS:IP ile isaret edilen komut da ekranda göste rilecektir. R komutunun kullanimi sonunda asagidakine benzer bir görüntü alincaktir. - R AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000
SI=0000 DI=0000 DS=2054 ES=2054 SS=2054 CS=2054 IP =0100 NV UP EI
PL NZ NA PO NC 2054:0100 IE PUSH DS NV
UP EI PL NZ NA PO NC degerleri disindaki tüm registerler daha önceki bölümlerde
anlatilmisti. Yukaridaki degerler Flag registerinin temsili gösterimidir. Bu
registerin alabilecegi degerler asagida gösterilmistir.
|
|
FLAGLAR Overflow Direction Interrupt Sign Zero Auxiliary Carry Parity Carry |
BIT SET (1) OV DN EI NG AC PE CY |
BIT RESET (0) NV UP DI NC |
- R F NV UP EI PL NZ NA PO NC - ZRUP - Yukaridaki örnekte Zero flagi SET, direction flagi
RESET edilmektedir.
5.1.6
T Trace Komutu Trace
komutu hafizada bulunan bir programin satirlarinin tek tek veya belli bir kisminin
çalistirilmasi için kullanilir. Komutun kullanimi asagida verilmistir. -
T=Adres Deger Komutun
parametreleri seçimliktir. Ilk parametre Adres parametresidir ki bu parametre
kullanilacaksa komuttan sonra = isaretinin kullanimi zorunludur. Adres
parametresi icra ettirilecek ilk komutun adresi olarak alinir. Deger
parametresi kaç adet komutun pespese icra ettirilecegini gösterir. Eger kullanilmamis
ise bu deger 1 olarak alinir. Eger herhangi bir parametre kullanilmaz ise komut
CS:IP ile adreslenen yerden baslayarak 1 komut icra ettirilir ve komutun icr asindan
sonra registerlerin degeri ve islenecek olan komut ekranda görüntülenir. 5.1.7 U Unassembly Komutu U
Komutu bellekteki programin makine dili ve assembly karsiliklarini ekranda
listelemek için kullanilir. Komutun kullanim sekli asagida verilmistir. - U
Adres1 Adres2 Parametre
olarak verilen Adres1 listelenmek istenen programin baslangiç adresini
gösterir. Bu adres segment ve offset olarak verilebilir. Bu adres verilirken
herhangi bir komutu bölmemesine özen göstermek gerekir. Aksi halde ekrana
getirilecek list e anlamsiz bir liste olacaktir. Ikinci
verilen parametre listelemenin sonunu belirler. Burada verilecek adres offset
niteliginde olmalidir. Segment Adres1de belirtilen segment adresi olarak alinacaktir. Örnek
1 U
101 106 2054:0101
B800B0 MOV AX,B000 2054:0104
8ED8 MOV DS,AX 2054:0106
BE0000 MOV SI,0000 Örnek
2 U
102 106 2054:0102
00B08ED8 ADD [BX+SI+D88E],DH 2054:0106
BE0000 MOV SI,0000 5.1.8 W Write Komutu Bellekteki
herhangi bir programin bir blok seklinde diske program olarak yazilmasini saglar.
Komutun kullanim sekli; W
Adres seklindedir. komuttan
sonra verilen adres diske kaydedilecek programin baslangiç adresidir. Eger bu
parametre verilmezse 0100 offseti default olarak kabul edilir. Diske yazilacak
programin uzunlugu BX:CX register çiftinden alinir. Komut
kullanilmadan önce N komutu ile diske yazilacak programin ismi belirlenmelidir.
Aksi halde diske yazma islemi default deger üzerinden yapilacaktir. Örnek; N
Deneme.com R
BX :
0000 R
CX :
0010 W Writing
0010 Bytes - 6. ASSEBLER PROGRAM YAPISI ve
ILGILI KOMUTLAR Bir
program bellegi parçalara bölerek (segmentleyerek) kullanir. Assembler
programlarda da yapi itibariyle bellegin segmentlere ayrilmasi ve ayrilan her
bölümün ayri ayri tanimlanarak kullanilmasi esastir. Bu nedenle bir assembler
programinda genel itibariyle bölüm tanimlari programin yapisini olusturur.
Genellikle bir programda geçici verilerin saklandigi stack, kalici verileri
saklamak için data ve program kodlarinin saklandigi code segment bölümleri yer
alir. Bir assembler programinin örnek yapi si asagida verilmistir. STK
SEGMENT PARA STK Tanimlar Tanimlar STK
ENDS DAT
SEGMENT PARA STK Tanimlar Tanimlar DAT
ENDS COD
SEGMENT PARA COD ANA
PROC NEAR ASSUME
SS:STK, DS:DAT, CS:COD .... .... ANA
ENDP COD
ENDS END 6.1 Segment Komutu Segment
komutu programin kullandigi segment kesimlerini tanimlamak için kullanilir.
Program içinde tanimlanan herhangi bir segment segment registerleri tarafindan
takip edilir. Tanimlanan herhangi bir segmentin hangi register tarafindan takip
edil ecegi ASSUME deyimi ile tanimlanir. Komutun kullanim sekli; isim
SEGMENT tip sinif seklindedir. Komut
bir isim ile baslar. Tanimlanan isim degisken olabilme kurallarina uygun
herhangi bir harf dizisidir. Tanimlanan isim program içinde yapilacak
atamalarda vb. islemlerde kullanilabilir. Tip
segmentin adreslenebilme tipini belirler. Bu deyim ile kullanilabilecek tip çesitleri; PAGE
256 Byte ve katlariyla adreslenebilen segment PARA
16 Byte ve katlariyla adreslenebilen segment WORD
Word ve katlariyla adreslenebilen segment BYTE
Byte ve katlariyla adreslenebilen segment Segment
anahtar cümlesi ile baslayan bir segment ENDS cümlesi ile son bulmak zorundadir. Örnek STK
SEGMENT PARA STK Tanimlar Tanimlar STK
ENDS STK
SEGMENT PAGE STK Tanimlar Tanimlar STK
ENDS 6.2 Assume Komutu Mikroislemciler
program içinde bellek kesimlerini takip edebilmek için en az 3 adet segment
registeri kullanir. Bu registerler CS, DS, SS registerleridir. CS registeri
program kodlarini takip etmek için, DS registeri program içinde sabit olarak
kul lanilan verileri saklamak için, SS registeri ise program içinde kullanilan
geçici verileri saklamak için kullanilir. Program
içinde belirlenen segmet kesimlerinden hangisinin hangi register ile takip
edilecegi assembler derleyicisine Assume deyimi ile bildirilir. Komutun kullanim
sekli, Assume
register : segment , register : segment , ........ seklindedir. Örnek: STK
SEGMENT PARA STK Tanimlar Tanimlar STK
ENDS DATA
SEGMENT PARA DAT Tanimlar Tanimlar DATA
ENDS CODE
SEGMENT PARA CODE BASLA
PROC FAR ASSUME
DS:DATA, SS:STK, CS:CODE 6.3 Proc Komutu Proc
komutu Code segment içindeki bir islem blogunun tanimlanmasini saglar. Tanimlanan
bloklar bir procedure davranabilirler ve diger bloklar tarafindan CALL komutu
ile çagrilabilirler. Her assembler programi içinde en az 1 islem blogunun olmasi
zo runludur. ilk çalisacak olan blok segment baslangicindaki bloktur. Bu
bloktan diger bloklar çagrilabilir. Eger assembler program üst düzey dillerden
çagrilacak bir program ise ilk çalisacak blok çagrilan blok olacagindan segment
basinda olma zorunlulugu y oktur. Komutun kullanilis sekli; isim
PROC tip seklindedir. isim,
degisken olabilme kurallarina uymak kosulu ile istenen herhangi bir harf dizisi
olabilir. PROC deyiminden sonra gelen tip FAR veya NEAR olabilir. Bu deyimler
ilerideki bölümlerde detayli olarak anlatilacaktir. ilk çalisacak bölümün FAR,
dige r bölümlerin NEAR olabileceginin bilinmesi bu bölüm için yeterlidir. Proc
deyimi ile baslayan herhangi bir program blogu ENDP deyimi ile sonlandirilmalidir. Örnek: STK
SEGMENT PARA STK Tanimlar STK
ENDS DATA
SEGMENT PARA DAT Tanimlar DATA
ENDS CODE
SEGMENT PARA CODE BASLA
PROC FAR ASSUME
DS:DATA, SS:STK, CS:CODE Push
DS Push
SS Mov
Ax, 15h . . CALL
ATLA1 BASLA
ENDP ATLA1
PROC FAR . RET ATLA1
ENDP ENDS END 6.4 Call/Ret Komutu Call
komutu herhangi bir islem blogu içinden bir baska islem blogunu çagirmak için
kullanilir. Komut ayni segment içindeki(Near) islem bloklarini çagirabilecegi
gibi farkli segment içindeki(Far) islem bloklarini da çagirabilir. Komutun
kullanilis s ekli; CALL
Çagrilan Blok Adi Call
komutunun islenmesi sirasinda mikroislemci çagrilan bloga gitmeden önce code
segment içinde bulundugu adresi stack segment içine saklar ve çagrilan yere
dallanir. Çagrilan blok içinde islemler sona erdikten sonra stack segmente
saklanan adrese tekrar geri dönülür. Çagrilan blok içindeki islemlerin bittigi
RET komutu ile belirlenir. Ret
komutu genel olarak parametresiz kullanilir ve stack segment içindeki bilginin
CS:IP ikilisine aktarilmasini saglar. 7. DEGisKEN VE SABiT TANIMLAMA Assembler
program içinde herhangi bir segment kesiminde degisken tanimlamasi yapilabilir.
Degisken ve sabit tanimlamalari;
Komutlari
ile yapilir. 7.1 DB Deyimi Byte
tipi bir degiskenin veya sabitin tanimlanmasini saglar. Tanimlama byte tipinde
bir alan olabilecegi gibi dizi seklinde bir alan da olabilir. Tanimlanan
alan(larin) 8 bit olmasi nedeni ile bu alana 0 ile FF arasinda herhangi bir
deger atanabili r. Deyimin kullanilis sekli; degisken
DB ilk deger Tüm
degisken veya sabit tanimlama deyimleri ile tanimlanan alanlara ilk deger atama
islemleri tanimlama aninda gerçeklestirilir. Eger tanimlanan alana deger
atanmayacak ise ilk deger olarak ? atanmalidir. Asagidaki atamalar geçerli
atamalardir. SAYI
DB 30 ;ilk degeri 30 olan SAYI sabit/degiskeni SAY
DB 0AH ;ilk degeri 10 olan SAY sabit/degiskeni ABC
DB ADI SOYADI ;ilk degeri ADI SOYADI olan karakter dizisi DIZI
DB 0,1,2,3,4,5,6,7 ;degerleri 0,1,2,3,4,5,6,7 olan byte dizisi ilk
deger atamasi sirasinda bir dizi olusturulacak ve dizinin içine belirli bir deger/degerler
atanacaksa DUP deyimi kullanilir. ABC
DB 10 DUP (?) ;içerikleri olmayan 10 bytelik bir dizi ABC
DB 50 DUP (0AH) ;içerikleri 10 olan 50 bytelik bir dizi ABC
DB 25 DUP (0,1) ;içerikleri 0,1,0,1.... olan 25 bytelik bir dizi 7.2 DW Deyimi iki
bytelik bir sabit/degisken tanimlamasinin yapilmasini saglar. Deyimin kullanilis
sekli; degisken
DW ilk deger seklindedir. MESAJ
DW 1210H SAYI1
DW ? SAYI2
DW 10 DUP(0) SAYI3
DW 0,0AABH,CCCAH 7.3 DD Deyimi Dört bytelik bir sabit/degisken tanimlamasinin
yapilmasini saglar. Deyimin kullanilis sekli; degisken
DD ilk deger seklindedir. MESAJ
DD 12100000H SAYI1
DD ? SAYI2
DD 10 DUP(0) SAYI3
DD 0,0AABC12H,0H 7.4 DQ Deyimi 64
bitlik, Sekiz bytelik bir sabit/degisken tanimlamasinin yapilmasini saglar.
Deyimin kullanilis sekli; degisken
DQ ilk deger seklindedir. MESAJ
DQ 12100000H SAYI1
DQ ? SAYI2
DQ 10 DUP(0) SAYI3
DQ 0,0AABC12H,0H 7.5 DT Deyimi Seksen bit 10 bytelik bir sabit/degisken tanimlamasinin
yapilmasini saglar. Deyimin kullanilis sekli; degisken
DT ilk deger seklindedir. MESAJ
DT 12100000H SAYI1
DT ? SAYI2
DT 10 DUP(0)
|