NightNetwork - yazılım, yazın, verim vs.

2.5. Yeni Bir Adresleme Modu: İndeksli Adresleme

Aslında adresleme modlarına daha once değınmedik. Farkında olmadan şimdiye kadar iki adresleme modunu kullanageldiniz.

Adresleme modları kod yazarken yazılan komutun aldığı argümanı bellekten nereden alacağını belirler. Bunu biraz daha açalım. Mesela lda komutunu düşünün. Bildiğiniz gibi lda akümülatöre bir değer yüklemeye yarıyordu. İşte lda komutunu kullanacağımız adresleme modu akümülatöre yüklenecek değerin nereden okunacağını belirler.

lda #0

Yazdığımızda ilk adresleme modu olan "immediate" adreslemeyi kullanıyoruz. Bu modda komut hemen yanına yazılan değeri yüklüyor. Bu modu tanımlayan şey lda'dan sonra gelen # işaretidir.

lda $0400 

ise akümülatöre $0400'daki değeri okur. Bu adresleme moduna da "mutlak" adresleme denir. Bu sefer komuttan hemen sonra gelen baytlar akumulatore dogrudan yüklenmez. Yüklenecek bilginin adresi olarak değerlendirilirler. Bu adresleme modunu kullanmak için # işaretini kullanmaksızın doğrudan adres yazılır.

lda 0

Bu komut ise yeni başlayanların çok sık başını ağrıtan bi hataya sebep olabilir. Burada "immedıate" adresleme kullandığını düşünen birisi, bu komuttan sonra akümülatöre 0 yüklenmediğini farkettiğinde şaşıracaktır. Halbuki burada # işareti olmadığı için CPU 0 değerini adres olarak değerlendirir ve 0. adresteki baytı okur akümülatöre.

Gelelim üçüncü adresleme moduna. İndexli adresleme.

ldx #2
lda $0400,x

burada yeni bir adresleme görüyorsunuz. Bu moda x indexli adresleme denir. Xindexli adreslemede adres verilen mutlak adrese x registerindeki değerin eklenmesi ile bulunur. Yani yukarıdaki kod parçası $0402 adresindeki değeri akümülatöre yükler. Aynı şey y registeri ile de yapılabilir.

ldy #$80
lda $0400,y

akümülatöre $0480 adresindeki değeri yükler. İndexli adresleme pekçok kullanım alanına sahiptir. Ama öncelikle biz bu derste öğrendiklerimizle şöyle önemli birkaç program örneği görecegiz. Fakat bundan da önce son olarak döngülerden kısaca bahsedelim

NightNetwork - 2009