bu adresin sözkonusu komutların he- men arkasından bir operand olarak belirtilmesi gerektiği ortaya çıkar. En basit çözüme örnek olarak, onaltı bit- lik adresin hemen komutun arkasın- dan gelmesi verilebilir. Böylece her bir şartlı dallanma komutu (branch) içe- ren satır üç byte sürecekti. Fakat ana işlem ünitemizin tasarımını yapan akıllı mühendisler daha pratik bir çö- züm bulmuşlar. Bir programın dallan- ması genelde kısa bir mesafe içinde ol- duğu için yeni bir adresleme tipi ge- liştirilmiş: Relatif Adresleme. Bu ad- resleme tipinde yapılacak adres onal- tı bit'lik absolut adresi ile değil, o ad- resin program sayacına olan uzaklığı ile belirtiliyor. Bu uzaklık ise yalnız- ca sekiz bit'lik bir değer ile temsil edi- liyor. Daha evvelden de bildiğimiz gibi se- kiz bit'lik bir bilgi ile 256 değişik sa- yıyı temsil edebiliriz. En basit düşün- ce ile 256 byte ileri dallanabiliriz. Fa- kat çoğu zaman geriye dallanmak da gerekebilir. Örneğin: Bir döngünün başına. Bu yüzden sekiz bit'lik bir bil- giden negatif değerler de elde edebil- memiz lazım. Bunun için şöyle bir yöntem kullanılıyor: 7'nci bit'in de- ğeri 4 128 değil -128 olarak değerlen- diriliyor. Yani bir bakıma yedinci bit sayımızın işareti ile ilgili bilgiyi de ta- şıyor. Aslında bu yöntem ile ilgili bir- çok örnek vermek mümkün. Fakat bütün bunların hiçbiri aşağıdaki gös- terim kadar açıklayıcı olmayacaktır: 010000000 $80 -128 97010000001 $81 -127 Yol1111110 $FE -2 YçllllIllI $FF -I 97000000000 $00 0 97000000001 $01 1 97000000010 $02 2 YoOL1LLLIT0O — $7E 126 YoO1L1LDII — $7E 127 Şimdi 7'nci bite baktığımızda görü- yoruz ki, bu bit bir sayının negatif olup olmadığını belirliyor (Aynı za- manda N-flag'ın görevi). Şimdi bir ör- nekle relatif adreslemede adres farkını hesaplamayı görelim. Dallanma sıra- sında program sayacının içerdiği bir sonraki komutun adresi olur. Örne- ğimiz şu: Şartlı dallanma komutumuz Y $C4T7A adresinde duruüyor ve biz SCA4BEF adresine dallanmak istiyoruz. $CA4TA Şartlı dallanma komutunun adresi $C47C Bir sonraki komutun adresi $C4BF Varış adresi Şimdi basit bir çıkartma işlemi bi- ze varış ile çıkış adresi arasındaki farkı verecektir: $C4ABF -$C47C-—3$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 çıkart- ma işlemi, fakat sonuçta negatif bir sayı elde ediyoruz. $C440 - -SC47C — $FFCA4A (alma var) Elde ettiğimiz sonucun düşük de- ğerli byte'ı yani $C4 işimizi görecek- tir, o'nu operand olarak kullanabili- riz. Diğer bir yöntem ise pozitif çıkart- ma işlemini yapmak ve ikili eşleniği- ni (komplementini) bulmak. $C47C - -$C440—5$3C Bunun ikili eşleniği: YY0OLL1100 97911000011 * l 011000100 — $C4 Gördüğünüz gibi gene $C4 değeri- ni elde ettik. Relatif adreslemenin bize sunduğu avantajlara gelelim: Öncelikle üç byte yerine iki byte kullanarak belli bir öl- çüde hafızadan tasarruf ediyoruz. (Bazılarınız bu tasarrufu küçümseye- bilir. Fakat şöyle bir açıklama kuşku- ları 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 uzayacak- tı.) Relatif adreslemenin en önemli avantajı absolut değerler içermemesi- dir. 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 va- rış komutları arasındaki fark değişme- yecektir (Fakat absolut adresler deği- şecektir). Şayet absolut adres kullanmış ol- saydık bu adreslerin de kaydırma iş- lemi sonunda yeni baştan elden geçi- rilmesi gerekirdi. Halbuki relatif ad- reslemede böyle bir sorun olmadığı için üretilen program “transportable'- dır, yani başka bir bölgede de çalışa- bilir. (Tabii bu ölçü programın için- de kullanılan diğer programlama yön- temlerine de bağlıdır.) Relatif adreslemenin dezavantajla- rına bakarsak tek dezavantajın sınır- lı 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 gereksinimi- nin 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ı prog- ramlar (gerek monitör programı, ge- rek assembler programı) bu işi üstle- nirler. Siz bu komutları kullanırken sadece varış adresini verirsiniz, o program da o adresin izin verilen böl-