1 Kasım 1989 Tarihli Commodore Gazetesi Sayfa 22

1 Kasım 1989 tarihli Commodore Gazetesi Sayfa 22
Metin içeriği (otomatik olarak oluşturulmuştur)

64 0100 0000 466 40100 0000 (-126) — 1000 0010 Görüldüğü gibi sonuç yanlıştır. 6. Bit'leri toplarken 7. Bit **1** olmuştur. İkinci dereceden karşılıklarla çalışır- ken bu negatif bir sayıyı göstereceği için işlem hatalı ola- caktır. Bu gibi durumlarda imdadımıza statü registerin- deki V-bayrağı (göstergesi) yetişir ve ““1*' değerini alır. Kısaca şöyle diyebiliriz: Eğer yukarıdaki örnekte olduğu gibi istenmeyen bir zamanda yanlışlıkla 6.Bit'ten 7.Bit'e bir taşma meydan gelirse bu bayrak **1”' olur. Bu işin aslı esasında daha karışıktır, fakat bu kadar bilgi bizim için yeterlidir. Görüldüğü gibi makine dilinde hemen hemen tüm ope- rasyonlardan önce olabilecek hatalara karşı önlem alın- maladır. Aslında bu bilgisayar kullanırken hiç alışık ol- mdığımız bir unsurdur, fa]mı ılende bu öğrendiklerimi- zin pratik uy bunların şimdiki ka- dar başımızı ağrıtmayacağını göreceğiz. Yukarıdaki işlemde 6. Bit'ten 7. Bit'e bir taşma mey- dana gelmiş, fakat Carry işin içine girmemişti. Bu nedenle 16-Bit sayılar kullanırsak problem kendi kendine çözülür: 64 00000000 01000000 *66 — - 00000000 01000010 130 00000000 10000010 Bildiğimiz gibi 16 Bit sayılarda 15. Bit işaret gösterge- si olarak kullanılır. Şimdi diğer bir durumu inceleyelim. —125 1000 0011 — 64 1100 - 0000 (467) — (1)0100 0011 Burada da yanlış bir sonuçla karşılaştık. Yine yanlış- lıkla işaret ıogıergesı deiışıklığe uğradı. Yalnız bu sefer değişiklik 6. Bit yerine den ka; . Carry ŞELER olduğı.ı için 7. Bit bu sefer **0” olmuştur Bı.ı prob— lemi de lö-Bıt sayıları kullanırsanız kola:! Şimdi yine öğrendiklerimizi kısaca toplayalım Eğer 8- Bit işlemlerde ikinci dereceden karşılıklarla gösterilebili- nen alanın (-127 ile 4 127 arası) dışına çıkılırsa işaret Bit'i (7.Bit) değişmekte ve yanlış sonuç vermektedir. Bu du- rumda hemen statü registerinde V-bayrağı (göstergesi) üzerinde bir kırmızı lamba yanar ve bize 16-Bit sayılar kullanmamızı söyler. Şimdi gelelim Carry Bit'inin unutulabileceği durum- lara. İkinci dereceden karşılıkları ile yapılan tüm 8-Bit aritmetik işlemlerinde bu Bit gözardı edilebilir. Bunu iki örnekte gösterelim: 44 0000 — — *illi 1ilo *2 (0)000-- 000 Carry Bit'ine bakılmazsa sonuç doğrudur. —4 1111 1010 —2 *1111 1110 —6 (DI111 1000 Burada da yine Carry Bit'i ihmal edilirse sonuç doğru kar. Artık C-64'ün tam sayıları nasıl işlediğini öğrendik. Şimdi bu sayı karmaşasını yine bir yana bırakarak pra- tik uygulamalara geçelim. Bilgisayar Hesaplıyor: ADE,ECLC ADC, bizim 6510 mikroişlemciden oğreneoeğınnz ilk aritmetik komutudur. Anlamı “*“Add with Carry”', yani **Carry ile birlikte topla”'dır. Şimdi elimizde iki tane 8- Bit sayı olsun: SAYII ve SAYI2. Yalnız bu sayılar fazla büyük değil ve toplamlarında h i bir taşma beklen- miyor. SAYIL'i akümülatöre yükleyelim: LDA #$SAYII Ve bunu izleyen satır: ADC # $SAYI2 Bu komutlarla karşılaşan mikroişlemci iki sayıyı top- lar ve sonucu akümülatöre yazar. Sonucu görmek iste- diğinizde akümülatörün değerini STA ile herhangi bir ad- rese yazdırırız. Yalnız Assembler programlarında Carry'i etkileyen birçok işlem vardır. Bu nedenle hiçbir zaman Carry'nin 1 veya O olduğunda emin olamayız, ADC ko- mutu hesap işlemine Carry'i de dahil ettiği için bunun silinmiş olması gerekir. 6510 makine dilinde bu işi ya- pan CLC komutu mevcuttur. SAYINI — 12 ve SAYI2 —7 alınırsa programımız şu şe- kilde olur: 1200 CLC İlk satırımızda yer alan CLC bir baytlık komuttur ve sadece Carry'yi etkilemektedir. ADC ise burada kulla- nılan şeklıyle iki baytlık bir komı.ııtı.ır ve dohıysız olarak eslenmiştir. Daha önce de gibi ADC bir- kaç göstergeyi (bayrağı) etkileyebilir. Bunların başında Carry ve V-bayrağı gelir, fakat 7. Bit'in 1 değerini alma- sıyla ortaya negatif bir sayı çıkacağı için N-bayrağı ve l F değeri aşıldığında da Z-bayrağı değişikliğe uğraya- 31201 numaralı satırı aşağıdaki şekilde değiştirdiğimiz- de programımız daha ilginç hale gelir: 1201 LDA $1400 Görüldüğü gibi burada mutlak adresleme yöntemini kullandık ve LDA 3 baytlık bir komuta dönüştü. Dola- değere ADC komutunun ardındaki sayıyı ekleyecektir. LDA komutunda yaptığımız değışıkhğın aynını ADC için de yapabiliriz. ADC'nin de mutlak adreslenmesi ile örneğin $1300 adresindeki değerin $1400'dekine eklen- mesini sağlayabiliriz. Bu işlemi gerçekleştiren program şu şekildedir:

Bu sayıdan diğer sayfalar: