Commodore sayı 44, sayfa 22

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 22

Assembler dilinde kullanıcının yükünü hafifleten bazı sayı ve işaret belirtme yöntemleri mevcuttur. Bu yöntemlerden biri BCD sayılarıdır. BCD, “binary coded decimal” veya “ikilik sistemde kodlanmış desimal sayı” anlamındadır. Bu yöntemde 0'dan 9'a kadar olan tüm rakamlar ikilik sistemde 4 Bit'lik bir sayı ile kodlanmıştır:

İkil

0000 0001 0010 OO11 0100 0101 1000 1001

Desimal:

1010'dan 1111'e olan sayıların BCD kodları mevcut değildir. Eğer elimizde iki basamaklı bir desimal sayı varsa (örneğin 12) önce bu sayı her basamağındaki rakamlara ayrılır (1 ve 2) ve ikilik olarak kodlanır. Örneğimizdeki 1 rakamının BCD karşılığı 0001 ve 2 rakamının karşılığı ise 0010'dur. Bu ikisi birleştirildiğinde 12 sayısının BCD kodu olan 0001 0010 ortaya çıkar. Her sayı farklı sayıda basamağa sahip olduğu için BCD sistemindeki sayılar için belli bir bayt sayısı söylenemez. Örneğin 1984 sayısı 2 bayt kullanmaktadır ve karşılığı 0001 1001 1000 0100'dür. Yukarıda belirttiğimiz 1010 ile 1111 arası kullanılmayan altı kod yüzünden BCD sayıları ile işlemler zorlaşır.

Burada sadece statü registerindeki desimal göstergesini 1 yapmalıyız. Şimdi iki yeni komut daha öğreneceğiz SED ve CLD. Bunlardan birincisi İngilizce “set decimal-flag” sözcüklerinin kısaltmasıdır ve “desimal göstergesini aç” anlamına gelmektedir. Buna karşılık CLD (clear decimal-flag) ise aynı işlemin tersini yapmaktadır, yani desimal göstergesini kapamaktadır. Eğer bir program yazarken herhangi bir yerde desimal göstergesini açmışsanız, daha sonra yapacağınız ikilik sistem işlemlerinden önce bir hata ile karşılaşmamak için CLD komutunu kullanın! Yukarıdaki iki komut da 1 bayt uzunluğundadır ve ikisinin de ardında herhangi bir adres yer almaz. Bu şekilde BCD kodlama sistemini de öğrendikten sonra ikilik sistemindeki negatif sayılara geçebiliriz. Bu konuyu üç aşamalı olarak ele alacağız. 1) Negatif sayıları belirtmek için özel bir gösterge kullanılır. Bu gösterge 1 değerini aldığında negatif sayıları, 0 değerini aldığında ise pozitif sayıları belirtir ve her baytın 7. Bit'inde yer alır. Örneğin 1 eskisi gibi 0000 0001 iken, -1 şimdi 1000 0001 olur. Fakat bu sistemde 1 bit gösterge olarak kullanıldığı için 1 bayt ile ifade edilebilen sayıların bölgesi 0-255'ten -127'ye kaymıştır. Artık ifade edebildiğimiz en büyük sayı 0111 1111 (+127) olmuştur. Şimdi bu sistemi kullanarak aşağıdaki toplamayı yapalım.

#10 0000 1010

dukça karmaşık bir hal almaktadır. —© — 1900 0N10 Fakat C-64'ün mikroprosesor'ü bu 1001 0000 — -16 sonucunu sayılarla doğrudan çalışabilmektedir. verir. 0800 00 08 CA 00 41 25 B2 0800 OOOA A Ya - Sonraki Basic — Satır No.: 10 Komut satırı | 0808 AB 31 Ba 00 12 08 14 08 — 1 2 Satır 0812 0014 Komut Sonu — Sonraki Basic — Satır No.: 20 satırı | 0810 80 00 00 CÜ FF FF FF FF END Satır Program Büş Komut Sonu Sonu

Monitör programı bu şekilde gösterir.

YA

za İML

Görüldüğü gibi +4 sonucunu elde etmemiz gerekirken (-16) değeri ortaya çıkmıştır. Demek ki eksi sayılarla bu şekilde işlem yapamıyoruz. 2) Daha sonraki aşamada sayının birinci dereceden karşılığı hesaplanır. Burada pozitif sayılar için herhangi bir değişiklik söz konusu değildir. Negatif sayılar ise pozitif sayıların Bit'lerinin değerlerinin değiştirilmesiyle elde edilir. Yani 8-Bit bir sayıdaki 0 ve 1'ler yer değiştirirse o sayının negatifi elde edilir. Örneğin 00001100 (+12) ise bunun birinci dereceden karşılığı (-12)'dir. İşin ilginç yanı burada da daha önce öğrendiğimiz 7. Bit'in negatif sayıları belirtme özelliğinin geçerli olmasıdır. Bu şekilde iki gösterim şeklini birleştirmiş olduk, fakat şimdi bu şekilde hesap yapılıp yapılmayacağını incelemeliyiz. (+8) = 0000 1000 (-6) = 1111 1001 (1) 0000 0001 sonucu ortaya çıkar. İşlemin sonucunda bir taşma meydana gelmiştir (9. Bit 1 olmuş) ve yine beklenen değer elde edilmemiştir. Yani eksi sayılarla bu yöntemle de toplama, çıkarma yapamayız. 3) Eğer bir sayının birinci dereceden karşılığına “1” değerini ilave edersek ikinci dereceden karşılığını elde ederiz. Bilgisayarımız negatif sayıları bu son belirttiğimiz yöntemle algılar. Pozitif sayılar herhangi bir değişikliğe uğramaz, örnek olarak (-12) sayısını ele alalım.

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