#1.Adresleme Modları 80386DX(x86) Mikroişlemciler için

Assembly Programlama Dili

Assembly programlama dili, doğrudan mikroişlemciye erişimi mümkün olduğu için mevcut en güçlü bilgisayar programlama dilidir ve programcılara yüksek seviyeli programlama dillerinde etkili kod yazabilmeleri için ihtiyaç duyulan bilgileri sunar.Yüksek seviyeli dillerin hepsinde yazılan kodlar Assembly diline çevrilir, ancak bu şekilde bilgisayar, yazılan programın ne ifade ettiğini anlayabilir.

Bir komut çalıştırıldığında, veriler üzerinde özel fonksiyonlar uygulanır, bu verilere işlenenler denir.

örnek olarak: MOV AX,BX  –> “AX” ve “BX” işleme giren değerlerdir, işlemler AX ve BX registerleri üstünde yapılmıştır.

Yazımızın İngilizce Haline Buradan Erişebilirsiniz

Bu işleme giren değerler;

  • Bir microişlemcinin register’ları içerisinde bulunabilir.
  • Bellek(memory) içerisinde bir adreste saklanabilir.
  • Bir Giriş/Çıkış portundan alınabilir.

İşleme giren değerlerin böyle farklı yollardan elde edilebileceğinden dolayı, çeşitli adresleme modları bulunmaktadır.

Adresleme Modlarının Kategorileri

  1. Kaydedici Adresleme (Register Operand Addressing)
  2. Acil Adresleme (Immediate Operand Addressing)
  3. Hafıza Adresleme (Memory Operand Addressing)
    1. Doğrudan Adresleme (Direct Addressing Mode)
    2.  Dolaylı Adresleme (Register Indirect Addressing Mode)
    3. Taban Adresleme (Based Addressing Mode)
    4. İndexli Adresleme (Indexed Addressing Mode)
    5. Taban İndeksli Adresleme (Based Indexed Addressing Mode)

1.Kaydedici Adresleme (Register Operand Addressing)

Bu adresleme modunda her iki operand (işlenen) de
kaydedicidir.
Genel kullanımı: KOMUT register, register

Register’ler de verilere byte, word veya double-world boyutlarında erişilebilir.

örnek olarak:  MOV AX,BX –>”AX” ve “BX”, her iki işlenen değer de register’dır.

Not: AH veya AL –>Byte boyutundadır.

AX–>Word boyutundadır.

EAX–>Double-Word boyutundadır.

2.Acil Adresleme (Immediate Operand Addressing)

Doğrudan sabit bir değer bir işlenen değere aktarılır.Bu değer  byte, word veya double-word boyutlarında olabilir.Sabit değerin büyüklüğü ile register uyumlu olmalıdır.

Örneğin 8 bitlik bir Register’a 16 bitlik bir değer
yüklenemez.
Genel Kulanımı: KOMUT register, immediate

örnek olarak:  MOV AL,15 –> “15”  sabit değerdir.

3.Hafıza Adresleme (Memory Operand Addressing)

3.1.Doğrudan Adresleme(Direct Addressing Mode)

Bellek adresinin içeriği ikinci işlenendir.

MOV CX,[bellek adresi] –> “[bellek adresi]” bellek adresi olarak verilen konumun içeriğini gösterir, mikroişlemci tarafından fiziksel adrese dönüştürülür.

örnek olarak:  DS(Data Segment)’imiz içerisinde 200H bulunsun.

3234 adresindeki belleğimiz “ED” ve 3235 adresindeki belleğimiz “BE” değerlerine sahiptir.

MOV CX,[1234H] –> komutu çalıştırıldığında “CX”  registerimiz 16 bit’lik yer açılmıştır, “[1234H]” değerimiz bellek adresimizdir.

Bellek adresimiz mikroişlemci içeriklerini tutar.

DS “200H” değerini taşır ve register’de DS “0200H”, bizim Data Segment’i 10 ile çarpmamız lazım ve bu yolla   0200×10=”02000H” değeri gelmektedir.

Fiziksel adresimizi bulabilmek için “02000H” değerini “1234H” değeri ile toplamamız gerekmektedir, 02000H+1234H=”3234H”

Bellekte 3234H fiziksel adresine sahibiz ve bu fiziksel değerin içerisindeki değerler “CX” register’ı içerisine aktarılır(MOV komutu ile).

CX register’ı içerisine “BEED” değeri gelmektedir.

3.2.Dolaylı Adresleme(Register Indirect Addressing Mode)

Belirli olan register’dan değer alınır ve bellek adresi olarak kullanılır.

örnek olarak: MOV AX[SI] –> “[SI]” değeri bellek adresi olarak verilen içeriktir.

DS=”0200H” değerine, SI=”1234H” değerine sahiptir.

3234 fiziksel adresinde “ED” değeri ve 3235 fiziksel adresinde “BE” değeri bulunmaktadır.

02000H+1234H=3234H

AX register’ı “BEED” değerini alıyor.

3.3.Taban Adresleme (Based Addressing Mode)

BX register’ından taban adresini alır ve bellek adresini direk olarak alır ve böylelikle verinin taşınmasını istediğimiz bellek adresini bulacağız.

MOV [BX]+bellek adresi,AX

örnek olarak:  MOV [BX]+1234,AX

Fiziksel bellek adresini bulmak için hesap yapacak olursak:

DS=200Hx10H=2000H+1000H+1234H=4234H

Komut çalıştırıldıktan sonra 4234 bellek adresi “ED” değerine ve 4235 bellek adresi “BE” değerine sahip olacaktır.

3.4.İndexli Adresleme(Indexed Addressing Mode)

İndexli adresleme yöntemi Taban adresleme yöntemiyle aynı çalışma mantığına sahiptir.Hatırlayacak olursak taban adresleme yöntemi şu şekildeydi:

MOV [BX]+bellek adresi,AX

DI ve SI register’larının offset adreslerini tuttukları biliniyor.

örnek olarak: MOV DX,[SI]+5 –> Fiziksel adresi=DS(& 0000)+SI+5

MOV CL,[DI]+20 –> PA=DS(& 0000)+DI+20

3.5.Taban İndexli Adresleme(Based Indexed Addressing Mode)

İndexli adresleme yöntemi ile taban adresleme yönteminin karışımıdır.

örnek olarak: MOV CL,[BX][DI]+8 –>PA=DS(& 0000)+BX+DI+8

MOV CH,[BX][SI]+20 –>PA=DS(& 0000)+BX+SI+20

MOV AH,[BP][DI]+12 –>PA=SS(& 0000)+BP+DI+12

MOV AL,[BP][SI]+29 –>PA=SS(& 0000)+BP+SI+29

İkinci Konumuz Olan “En Çok Kullanılan Komutlar”a Erişmek İçin Tıklayın..(Şu anlık ingilizce, en yakın zamanda türkçe olarak da yayınlanacaktır)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir