1 Şubat 1987 Tarihli Commodore Gazetesi Sayfa 50

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

taraftaki sekiz bitlik kısımları topla- rız, daha sonra üst taraftaki sekiz bit- lik kısma sıra gelir. Diyelim ki birinci toplama işleminde taşma oldu ve 'el- de' var. Bu durumda ikinci toplama işlemi sırasında bu “elde'nin değerlen- dirilmesini sağlamalıyız. İşte burada 6510 ana işlem ünitesinin bir özelliği bizi bu zahmetten kurtarıyor. Çünkü yapılan tüm toplama işlemlerinde CARRY biti de beraber toplanıyor. (Tabii burada ufak bir sorun farkedi- yoruz, ilk toplama işlemi sırasında CARRY biti *0' olmak zorunda, yok- sa istediğimiz işlemi yanlış yaparız. Bunun için CARRY bitini sıfırlarız. Bununla ilgili komutu daha sonraki bölümlerde göreceğiz.) Şimdi bu top- lama işlemini daha doğru olarak bir kere daha yazalım: kat bu sefer 'elde' yerine *alma' söz- konusu. Böyle bir durumda sonuç ne- gatif olacaktır. Gene CARRY flag'ı- nı kullanarak sorunumuzu çözebiliyo- ruz. *Elde' ve *alma' olayları tümüy- le ters şeyleri simgelediklerinden, 'al- ma' durumunu CARRY flag'ının sö- nük (—0) olması ile belirtiyoruz. Ta- bil yanık bir CARRY flag'ı 'alma' ol- madığını gösterecektir. Toplama işle- mi için bulduğumuz formül burada da geçerli. Sekiz bitten uzun sayılar ara- sında çıkarma yaparken, CARRY bi- tinin yardımını istiyoruz. Şimdi bir ör- nek ve aynı işi yapan BASIC satırını görelim: SBC S3A — A-A-58-(1-C) $3A Carry biti ASAL5ISLC $3A Carry biti ADC S3A Bir toplama işleminden sonra oluş- ması muhtemel bir aritmetik taşma olayını CARRY flag'ından anlayabi- liriz. Toplama işlemi sırasında C- flag'ının yanında N- ve Z- flag'ları da etkilenir. Bunlardan başka V-flag'ı da etkilenir. Bu flag'ın yorumu sadece işaretli aritmetik kullanıldığında (ne- gatif veya pozitif) geçerli olduğundan pek üzerinde durmayacağız. D- flag'ına göre toplama işlemi onluk sis- teme benzer şekilde yapılabilmesine rağmen, pek az kullanılan, zahmetli ve tehlikeli bir yöntem olduğu için pek değinmeyeceğiz. Aşağıdaki tabloda ADC komutu için geçerli adresleme tiplerini ve komut kod'larını bulacak- sınız. İkili sistemde çıkarma işlemi topla- ma işlemine benziyor. Burada da 4 de- ğişik durum sözkonusu: Ü-0 - Ü-1 — | bir sonraki basamaktan 'alma' 1-0-1 1-1-0 Diyelim ki akümülatör'de $7F var. Yukarıdaki işlem şöyle yürür: $7F - YoOllIIMNI $3A — M00O111010 CARRY sönük olarak (yani *alma' olmadan) yapılan çıkarma işlemi şöyle olacaktır: Adresleme tipi ADC direkt $69 absolut $6D Ü.cı sayfa $65 X-indeksli $7D Y-indeksli $79 O.cı sayfa X-indeks " $75 indirekt indeksli $71 indeksli indirekt $61 gçON Yo OOLLLOLÜ Sonuç olarak 7001000101, yani $45 elde ettik. Bu sayı pozitif olduğu için herhangi bir *alma' olayı olmayacak ve CARRY biti yanık kalacaktır. Şim- diki örneğimizde akümülatör $1E içersin, CARRY flağg'ımız gene yanık: 9 O1000101 — $45 Çıkarma işlemi de toplama işlemi ile benzer sınırlar içinde yürür. Hafı- zanın içeriği akümülatör'den çıkarılır, sonuç toplamada olduğu gibi akümü- latör'e yazılır. Burada da toplamada- kine benzer bir soruna rastlıyoruz. Fa- 50 $1E - MOOOLLL1O0 $3A - MOO1L11010 Çıkarma işlemi şöyle gerçekleşecek- tir: Yo O0011110 Yo OOLLL010 911100100 — $E4 Sonuç olarak Yo Lİ100100, yani $E4 elde ettik. İşlem sırasında 'alma'yla karşılaştığımız için CARRY biti söne- cektir. Peki bu olayın yorumunu na- sıl yapacağız?.. Konuya daha hakim olmak için onluk sistemde düşünelim. İlk sayımız 30'du, ikincisi ise 58; çı- karma işlemi yapınca'-28 elde etme- miz lazım. Peki burada bulduğumuz $E4, yani 228 ne alaka?.. Şayet bul- duğumuz bu sonucu sekiz bitlik gös- terimin sihirli sayısı 256'dan çıkarır- sak 28 elde ederiz. Sekiz bitlik göste- rimde 255'ten sonra gene O'a geliriz (256 yerine). İşlemimiz sonucunda CARRY biti sönük olduğu için elde ettiğimiz sonucun negatif olduğunu anlıyoruz. Bu sayının “ikili komple- ment'ini bularak pozitif karşılığını el- de edebiliriz. Bu işlem şöyle yapılıyor: Sayının tüm bitlerini tersine çeviririz ve sonuca bir toplarız: 74 11100100 bitleri ters çevirirsek: — ©4 O0011011 artı bir . ı OŞ 00011100 Sonuç olarak Me00011100, yani $1C, yani 28 bulduk. Aritmetik işlemleri kullanırken dik- kat edilmesi gereken şey; toplama iş- lemlerinden önce CARRY flag'ının söndürülmesi (yanık CARRY flag'ı, olmayan bir elde yaratır ve işlem yan- lış yapılır), çıkarma işleminden önce ise CARRY flag'ının yakılmasıdır (sö- nük bir CARRY flag'ı, olmayan bir alma yaratır ve yanlış sonuç bulunur). (Dijital devre tasarımı ile ilgilenen- ler için bir not düşelim. Ama işlem ünitesi çıkarma işlemini, toplama iş- lemini yaptığı devrelerin aynısını kul- lTanarak yapıyor. Tek fark, çıkarma iş- lemi sırasında çıkarılacak sayının bit- lerini ters çevirip toplamak. Geri kü- lan tüm işlemler olduğu gibi aynı. Me- sela CARR Y bitinin yorumlanması... İnanmıyorsanız, kâğıt, kalemi elinize alıp birkaç örnek deneyin.) Aşağıdaki tabloda komut kodları- nı ve adresleme tiplerini bulacaksınız: Adresleme tipi SBC direkt $E9 absolut $ED Ü.cı sayfa $E5 X-indeksli $FD Y-indeksli $F9 0.cı sayfa X-indeks $F5 indirekt indeksli $FI indeksli indirekt $E1

Bu sayıdan diğer sayfalar: