Commodore sayı 13, sayfa 20

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 20

10000000 $80 -128 10000001 $81 -127 $FE -2 $FF -1 00000000 $00 0 00000001 $01 1 00000010 $02 2 $7E 126 $7F 127

Şimdi 7'nci bite baktığımızda görüyoruz ki, bu bit bir sayının negatif olup olmadığını belirliyor (Aynı zamanda N-flag'ın görevi). Şimdi bir örnekle relatif adreslemede adres farkını hesaplamayı görelim. Dallanma sırasında program sayacının içerdiği bir sonraki komutun adresi olur. Örneğimiz şu: Şartlı dallanma komutumuz

$C47A adresinde duruyor ve biz $C4BF adresine dallanmak istiyoruz.

$C47A Şartlı dallanma komutunun adresi $C47C Bir sonraki komutun adresi $C4BF Varış adresi

Şimdi basit bir çıkartma işlemi bize varış ile çıkış adresi arasındaki farkı verecektir:

$C4BF - $C47C = $43 Yani şartlı dallanma komutumuz için operand byte'ımızın değeri $43'müş. Bir örnekle de geriye doğru sıçramayı inceleyelim. Diyelim ki $C440 adresine dallanacağız. Burada farkı belirlemek için değişik yöntemler söz konusu. İlk yöntem bildiğimiz çıkartma işlemi, fakat sonuçta negatif bir sayı elde ediyoruz. $C440 - $C47C = $FFC4 (elde var) Elde ettiğimiz sonucun düşük değerli byte'ı yani $C4 işimizi görecektir, o'nu operand olarak kullanabiliriz. Diğer bir yöntem ise pozitif çıkartma işlemini yapmak ve ikili eşleniğini (komplementini) bulmak.

$C47C - $C440 = $3C Bunun ikili eşleniği:

9900111100 9011000011

1

011000100 $C4

Gördüğünüz gibi gene $C4 değerini elde ettik.

Relatif adreslemenin bize sunduğu avantajlara gelelim: Öncelikle üç byte

A yerine iki byte kullanarak belli bir ölçüde hafızadan tasarruf ediyoruz. (Bazılarınız bu tasarrufu küçümseyebilir. Fakat şöyle bir açıklama kuşkuları giderecektir. Coğu compiler'ın ürettiği kod'da bu komutlar o kadar yoğundur ki bu komutlar üç byte'lık olsaydı program 05 ila 707 uzayacaktı.) Relatif adreslemenin en önemli avantajı absolut değerler içermemesidir. Adresler çıkış yerine bağıl (izafi) uzaklıklarına göre belirtilir. Şayet bu program parçasını hiç değiştirmeden başka bir bölgeye taşırsak çıkış ve varış komutları arasındaki fark değişmeyecektir (Fakat absolut adresler değişecektir). Şayet absolut adres kullanmış olsaydık bu adreslerin de kaydırma işlemi sonunda yeni baştan elden geçirilmesi gerekirdi. Halbuki relatif adreslemede böyle bir sorun olmadığı için üretilen program “transportable'- dır, yani başka bir bölgede de çalışabilir. (Tabii bu ölçü programın içinde kullanılan diğer programlama yöntemlerine de bağlıdır.) Relatif adreslemenin dezavantajlarına bakarsak tek dezavantajın sınırlı adresleme kapasitesi olduğu görülür. Şartlı dallanma komutuna göre 128 byte öne veya 126 byte geriye sıçrayabiliyoruz. Pratikte bu durum pek sorun teşkil etmez. Nedeni ise daha uzun mesafelere sıçrama gereksiniminin pek az meydana çıkması. Eğer relatif adreslemede operand hesaplamayı çok karışık bulduysanız, size sakin olmanızı tavsiye ederiz. Çünkü hemen hemen hiçbir zaman bu operand'ı siz hesaplamayacaksınız. Kullanacağınız tüm yardımcı programlar (gerek monitör programı, gerek assembler programı) bu işi üstlenirler. Siz bu komutları kullanırken sadece varış adresini verirsiniz, o program da o adresin izin verilen bölge içinde olup olmadığını kontrol eder, şayet mümkün değilse sizi uyarır. Eğer mümkünse gerekli kodu üretir ve işleme devam eder. Şimdi bu dört flag'a göre şartlı dallanma komutlarını görelim:

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