|Refleks|-Oyun,Tasarım,Film,Program,Tek link,İndir
Would you like to react to this message? Create an account in a few clicks or log in to continue.

|Refleks|-Oyun,Tasarım,Film,Program,Tek link,İndir


 
AnasayfaLatest imagesAramaKayıt OlGiriş yap

 

 Assembly Programlama Dili

Aşağa gitmek 
YazarMesaj
FaTaL
Yönetici
Yönetici
FaTaL


Ruh Hali : Assembly Programlama Dili Manyak10
Başak Mesaj Sayısı : 626
Rep Puanı : 12268
Teşekkür Aldı : 18
Kayıt tarihi : 24/10/09
Nerden Nerden : Kocaeli
İş/Hobiler İş/Hobiler : 3D / Maya / After Efect
Lakap Lakap : Fatal

Assembly Programlama Dili Empty
MesajKonu: Assembly Programlama Dili   Assembly Programlama Dili EmptyCuma Ekim 30, 2009 9:14 am

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 0’lardan 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
BIT’ler 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. Assembler’da 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 word’un 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
WORD’den 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 byte’tan olusurlar.
Byte’lar 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
ZR

AC

PE

CY


BIT RESET (0)

NV

UP

DI
PL
NZ
NA
PO

NC



2. R komutundan sonra parametre olarak F harfi kullanilirsa program
flaglarin degistirilmesi için mevcut flaglari ekrana getirir ve
istediginiz flaglari degistirmeniz için bekler. Bu durumda istediginiz
herhangi bir flagi set yada reset edebilirsiniz.

- R F

NV UP EI PL NZ NA PO NC - ZRUP

-

Yukaridaki örnekte Zero flagi SET, direction flagi RESET edilmektedir.

3. R komutu ile sadece flaglarin degil tüm registerlerin degerleri
degistirilebilir. Bunun için R komutundan sonra degistirilmesi istenen
registerin isminin yazilmasi gerekir. Bu islem gerçeklestiginde
registerin mevcut degeri ekrana yazilir ve ( : ) is areti konularak
registerin yeni degeri sorulur. Bu isaretin yanina deger 4 digit
hexadecimal olarak verilmelidir. Eger bir deger verilmeyip enter tusuna
basilirsa registerin içerigi degistirilmeyecektir.

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 Adres1’de 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, DSAssembly Programlama Dili 8AT, 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 DSAssembly Programlama Dili 8ATA, 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 DSAssembly Programlama Dili 8ATA, 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;

* DB
* DW
* DD
* DQ
* DT
* DUP

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 byte’lik bir dizi

ABC DB 50 DUP (0AH) ;içerikleri 10 olan 50 byte’lik bir dizi

ABC DB 25 DUP (0,1) ;içerikleri 0,1,0,1.... olan 25 byte’lik bir dizi

7.2 DW Deyimi

iki byte’lik 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 byte’lik 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 byte’lik 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 byte’lik bir sabit/degisken tanimlamasinin yapilmasini saglar. Deyimin kullanilis sekli;

degisken DT ilk deger

seklindedir.


MESAJ DT 12100000H

SAYI1 DT ?

SAYI2 DT 10 DUP(0)
Sayfa başına dön Aşağa gitmek
http://www.refleksforum.com
 
Assembly Programlama Dili
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» Assembly Dili Ve Mikroişlemciler
» Assembly Dili Ve Mikroişlemciler -2
» Assembly & Win32 Programlama
» TÜrk Dİlİ Temel Kavramlar
» Assembly Giriş

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
|Refleks|-Oyun,Tasarım,Film,Program,Tek link,İndir :: Bilgisayar Dersleri :: Assembly-
Buraya geçin: