1 Şubat 1987 Tarihli Commodore Gazetesi Sayfa 46

1 Şubat 1987 tarihli Commodore Gazetesi Sayfa 46
Metin içeriği (otomatik olarak oluşturulmuştur)

LDA 3& SOA k 10 Ç(ondalık olarak) Bu adresleme tipinin karakteristik belirleyicisi, yüklenecek değerin he- men önünden gelen * * işaretidir. Direkt adresleme akümülatör'ün doğ- rudan 10 (onaltılık olarak S$0A) değe- riyle yükleneceğini gösterir. Bu işe karşılık gelen BASIC komutu ise: A-lü Bu adresleme tipi herhangi bir re- gister'e sabit bir değeri yüklemek için kullanılır. Bu adresleme tipi X- ve Y- Register'leri için de vardır. Bunlara örnek olarak: LDX $ $7F LDY $& $AB verebiliriz. Burada X-Register'i $7F (ondalık olarak 127) değeriyle, X-Re- gisteri $AB (ondalık olarak 171).de- ğeriyle yüklenir. Bu adresleme tipinde aynı zaman- da yüklenmesi gereken değer de ma- kine dili programın bir parçası haline gelir. Hafızada komut ve yüklenmesi gereken değer peşpeşe Byte'lar olarak durur. Makine dili programı bu adres- te yürürken bu Byte'ı alır ve bunu bir komut olarak yorumlar. Diyelim ki komut olarak SA9'a (ondalık olarak 169) rastladı; ana işlem ünitesinin için- deki karmaşık devreleri hemen bunun bir LDA — $.. komutu olduğunu al- gılar. Aynı karmaşık devreler bu se- fer de bir sonraki Byte'ın komut de- Bil de veri olacağına karar verirler. Bir sonraki Byte okunur ve değeri akümü- latör'e yüklenir. Burada gördüğünüz gibi bu işlem toplam olarak iki Byte sürüyor (komutun kendisi bir Byte; yüklenecek veri diğer Byte olmak üze- re). Ana işlem ünitesi bir komutun başlangıcından, burkomutun bitimin- de, bir sonraki komutun başına kadar program sayacının değerini otomatik olarak iki artırır. İkinci olarak absolut adresleme ti- pini inceleyelim. Bu adresleme tipi register'e sabit bir değer değil de, bir hafıza biriminin (adreslenebilir bir Byte'ın) içeriğini yüklemek için kullanılır. Örnek vere- cek olursak: LDA $COAF Burada akümülatör'e SCOAF adre- sinin içeriği yüklenir. Şimdi ufak bir sorun çıkıyor. Bu işlem hafızada na- sıl yerleşmekte?.. SCOAF adresi 16-bit- lik bir sayıdır ve bu özelliğinden do- layı bir Byte'a sığmaz. Hemen herke- sin aklına gelen çözüm pratikte de ger- çekleşiyor ve 16-bitlik bu sayı 8-bitlik iki sayıya bölünüp hafızaya öyle yer- leştiriliyor. Bu arada 65XX serisi ana işlem ünitelerinde geçerli olan bir ku- ralı hatırlatalım: Önce düşük basa- maklı Byte, peşinden yüksek basa- maklı Byte geliyor. Yani 16-bitlik bir sayının önce sağ tarafı, sonra sol ta- rafı yazılıyor. Şimdi bu işlem hafıza- da nasıl görünür, bir inceleyelim. Ön- ce LDA komutunun bu adresleme ti- pine karşılık gelen kod'u SAD (173), daha sonra $AF (175) ve son olarak $CO (192) gelir. BASIC'te aynı işlemi yapan satırı yazmak istersek: Az PEEK(493%5) S$COAF Tabit ki aynı komutun X- ve Y-Re- gister'leri için karşılıkları var. Bunlar için ayrı bir örnek vermeyeceğiz. Çün- kü akümülatör'le yapılan işlemden farklı bir şey yok. Diyelim ki ana iş- lem ünitesi bu işlemi hafızada yürü- tüyor. Önce komutu tanır, arkasından adresin düşük değerli kısmını (Lo- Byte ta denir) okur, onun arkasından adresin yüksek değerli kısmı (Hi-Byte ta denir) gelir. Şimdi ana işlem ünite- si tüm bir satırı okudu. Ne yapacağı- nı biliyor, fakat henüz hiçbir şey yap- mamış durumda. Burada ana işlem ünitesi kısa bir süre programın ken- disinden ayrılır ve adreslemesi gereken bölgeyi adresleyip oranın içeriğini alır ve akümülatör'e yükler. Görüldüğü gibi bu işlem tipi üç Byte sürmekte. Yani bu işlem bittiğinde program sa- yacının değeri üç artacaktır. Şu ana kadar iki ve üç Byte süren komutları gördük. Bunlardan başka bir de bir Byte uzunluğundaki komutlar var ki bunlar genelde ana işlem ünitesinin içini ilgilendiren veya başka bir deyim- le herhangi bir operand'a gereksinim duymayan komutlardır. Burada, birinci bölümde andığımız durum register'inden söz edelim. Yük- leme komutları sırasında N (negative) ve Z (zero) flag'ları etkilenir. Diyelim ki ilk örneğimizdeki gibi akümülatör'e SOA yükledik. Bu sayı sıfır olmadığı için Z flag'ı sönük (—0) olacak; bu sa- yının yedinci biti sönük olduğu için N flag'ı sönük olacaktır. Başka bir adresleme tipi de sıfırın- cı sayfa adreslemesidir. Bu adresleme tipi yapı bakımından absolut adresle- meyle eşdeğerdir. Fakat geçerli oldu- ğu adres bölgesi hafızanın ilk 256 byte'ıdır. Bu adres bölgesi $0000'dan $00FF'a kadar gider. Dikkat ettiyse- niz, adresin yüksek değerli Byte'ı sı- fır değerindedir. Sıfırıncı sayfa ismi de buradan gelmektedir. Açıkça görül- mektedir ki bu adresleme tipinde ay- nı işlem için absolut adreslemeye gö- re bir Byte tasarruf ediyoruz. Böyle- ce bu işlem hafızada daha az yer tu- tacağı gibi, aynı zamanda ana işlem ünitesi tarafından belli bir miktar da- ha hızlı yürütülür. Dezavantaj olarak sınırlı adres bölgesi görünmekle bir- likte, avantajlar daha ağırlıktadır. Çünkü bilgisayarımızın önemli sistem değişkenleri (işletim sisteminin bilgi- sayarı hayatta tutmak için kullandığı hafıza bölgesi) bu bölgede saklanmak- tadır. Bir örnek verecek olursak: LDA $73 Bu işlem hafızaya iki Byte olarak yerleşecektir. Bunlar komutun kendisi olan S$AS5 (165) ve adresi gösteren $73 (115)'tir. Bu işlemi BASIC'te yazmak istersek!: A- PEEK(I#S) $73 Tabit BASİC'te vereceğimiz karşı- laştırmalı örnekler açısından absolut adresleme ile sıfırıncı sayfa adresleme arasında bir fark görünmeyecektir. Bu arada aklımıza gelmişken bir şeyi ha- tırlatalım: Sıfırıncı sayfa ile ilgili ad- reslemeleri, isterseniz absolut adresle- meler ile de yapabilirsiniz. Hiçbir en- gel yok, fakat size sağlanan avantajı kullanmamakla programınız uzar ve biraz yavaşlar. Önemli bir adresleme tipi de indeks- li adreslemedir. Burada X- ve Y- in- deks registerlerinin asıl önemini daha aa

Bu sayıdan diğer sayfalar: