Commodore sayı 12, sayfa 47

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 47

LDA $25B8,X

Burada ilk bakışta görünen absolut adreslemenin indeksleme ile birlikte yapıldığı. Peki gerçekte ne oluyor?.. Gayet basit: Ana işlem ünitesi $25B8 adresini oluşturduktan sonra hemen bu adresin içeriğine saldırmıyor. Önce bu adrese X-Register'inin içeriğini topluyor; yeni bir adres oluşturuyor. Bu adresin içeriğini akümülatör'e yüklüyor. Diyelim ki X-Register'inin içeriği $35. Şimdi ana işlem ünitesinin içinde şöyle bir aritmetik işlem yapılıyor:

$25B8 + $35 = $25ED

Yani sonuç olarak akümülatör'e $25ED adresindeki yazmaçın içeriği yükleniyor. Programın bu bölgesi her defasında değişik bir X- değeriyle yürütülürse elde edilen adres farklı olacağı için her defasında farklı bir değer yüklenecektir. Bu adresleme tipi bilhassa döngülerde ve veri tablolarının işlenmesinde kullanılır. Mesela bir şifreleme tablomuz ve bir şifre çözücü tablomuz olsun, bu ikisi sayesinde bu karışık işlemleri, indeksli adreslemeyi kullanarak basit işlemlerle yerine getirebiliriz. Daha ilerde başka uygulama örnekleri de göreceğiz. BASIC'te bu işlemi yapan satır şöyle bir şey olacaktır:

$25B8

Buradaki X, X-registerinin içeriğini; A'da akümülatör'ü simgelemektedir. İndeksleme işleminde X-registerinin yerine Y-registerini de kullanabiliriz. Örneğin:

25B8,4

LDA

Burada ise Y-register'inin içeriği adrese toplanır ve esas adres oluşturulur. Mesela; böylece birbirinden bağımsız iki döngü değişkenimiz olur ve içiçe geçmiş döngüler kurabiliriz. Sıfırıncı sayfanın da kendine özgü indeksli adresleme tipi vardır. Burada sıfırıncı sayfa adreslemesinin avantajlarının yanında indeksleme işlemini de kullanabilmemiz sağlanır. Bir örnek olarak:

LDA $BA,X

Bu da iki Byte'lık bir komut olacaktır. Şimdi geliyoruz; değişik ve kullanışlı olduğu kadar anlaşılması zor olan bir adresleme tipine, indirekt indekslemeli adresleme. Bu adresleme sıfırıncı sayfanın özelleşmiş bir kullanımı olduğu için sıfırıncı sayfanın önemini daha iyi anlayacağız. Sıfırıncı sayfada peşpeşe gelen iki Byte'ın içeriği bir adres oluşturuyor, daha sonra bu adrese Y-register'i toplanıyor ve esas adres oluşturuluyor. Çok mu karışık?.. Peki, bir örnekle görelim:

LDA ($70),Y

Diyelim ki, $0070'in içeriği $20; $0071'in içeriği $C8 olsun. Bu ikisi birlikte $C820 adresini oluştururlar. Hemen arkadan Y-register'inin indeksleme işlemi geliyor. Diyelim ki Y-register'inin içeriği de $B3. Böylece bu değeri de adresimize toplayarak $C8D3 adresini elde ederiz. Bu adresin içeriği (diyelim ki $C8D3'ün içeriği $4F olsun); akümülatör'e yüklenir. Şematik olarak inceleyecek olursak:

LDA ($70),Y

(870) $20 (871) sC8 $C820 m- $B3 $C8D3 (SC8D3)- $4F

Bu değer de akümülatör'e yüklenir. BASIC'te bu işlemi şöyle yaptırırız:

A-PEEK(PEEK 4112)4256*PEEK(113)4 1)

sT0 si

İndirekt adresleme operand'ın parantez içinde yazılmasıyla ayırt edilir. Bu adresleme tipi çok güçlü program yapılarının kurulmasını sağlar. Çünkü iki Byte süren bir işlemle bütün hafıza elinizin altında. Bu adresleme tipi de döngülerde ve tabloların değerlendirilmesinde kullanılır. Basit indekslemeden daha esnek ve güçlüdür. Çünkü yalnızca bir sayfayı (256 Byte'lık bölge) değil tüm hafızayı işleyebiliyorsunuz. Tabii bu işlemleri yapabilmek için sıfırıncı sayfada iki Byte'lık bir göstergeç hazırlamak gerekiyor. Son olarak indekslemeli indirekt adreslemeyi göreceğiz. Bu tip yukarıda anlattığımızın tersine Y-register'i ile değil X-register'i ile yapılıyor. Genelde kullanımı ötekine göre daha az olan bu adresleme tipinde de sıfırıncı sayfada bir göstergeç bulunuyor. Bu göstergeç esas adresi içeriyor. İndeksleme işlemi ise sıfırıncı sayfa içinde bu göstergecin yerini bulmak için yapılıyor. Daha anlaşılır olması için gene bir örnek üzerinde çalışalım:

LDA (70,X) $08 840 (879)- 820 $2040 (82040)- SA9

Bu değer de akümülatör'e yüklenir. BASIC'te bu satırı şöyle yazarız:

AzPEEK(PEEK(1124 1)

1

Demek ki burada önce X-değeri operand'a toplanıyor ve göstergecin adresi elde ediliyor. Bu göstergecin içeriği alınarak esas adres elde ediliyor ve bu adresten akümülatör'e yükleme işlemi yapılıyor. Bu adresleme tipi pek ender kullanılır ve pek kullanışlı olacağı da şüphelidir. Bu yüzden başlangıçta bu adresleme tipine pek önem vermeyeceğiz. Şimdiye kadar gördüğümüz komutları ve adresleme tiplerini toplu olarak görelim:

Klavyeyle gezinmek için ← ve → tuşları.