Bu sayfadaki yazılar
Sayfanın metni
Sayfa 19
Ya da n basamaklı bir sayı için:
ONLUK - BI 4 811 x B2 4 B2 4 812 xB3 * 4 ...4 8İ(n-1)x Bn
Tabii ki basamakların sağdan başlayıp sola doğru arttığını göz ardı etmemelisiniz. Aslında günlük hayatta hiçbir önemi olmayan bu sayı sistemlerinin hepsini öğrenmenize de gerek yok. Bilgisayarda sıkça kullanılan sayı sistemi ikilik ve onaltılık sistemlerdir. Niçin sadece bu iki sistemin önemli olduğunu bitler ve baytlar kavramlarını açıklarken tam olarak anlayacaksınız. Ama ilk önce ikilik ve onaltılık sistemlere biraz detaylı olarak göz atalım:
İkilik (Binary) Sayı Sistemi
Eğer demin anlattığım “sayı sistemleri” kavramını biraz anladıysanız, ikilik sayı sistemlerinin rakam bakımından oldukça fakir kalmış olduğunu farkedersiniz. Bu sistemde sadece 0 ve 1 rakamları hüküm sürebilir, çünkü 1'den sonra 2 değil 10 gelecektir. Kafanızın karışmaması için değişik sayı sistemlerindeki 10'u “on” olarak okumayın. “Bir Sıfır” demeye üşenebilirsiniz, ama “Sıfır, bir, on, onbir, yüz, yüzbir, ...” diye saymaktan çok daha az kafa karıştırıcı olacaktır. Çok uzun yıllardır onluk sayı sistemi kullanılan bir yerde yaşadığınız için, bu sayılarla yapılan toplama, çıkarma, çarpma ve bölme işlemlerini doğrudan doğruya ikilik sayılar üzerinde yapamayabilirsiniz. Bu yüzden, bir şekilde sayıları onluk düzenden ikilik düzene ve ikilik düzenden onluk düzene çevirebilmelisiniz. Bu sayede sayıları ilk olarak onluk düzene çevirip, işlemi yapıp sonucu ikilik sisteme çevirebilirsiniz. Aslında işlemler ikilik sistemde de onaltılık sistemde de onluk sistemde aynı kurallara bağlıdır. Eğer kendinizle tutarlı davranırsanız, bu çevirme işlemine hiç bulaşmadan da tüm işlemleri gerçekleştirebilirsiniz. İsterseniz, sayı çevirme işine önce daha basit olanından, yani ikilik sistemden onluk sisteme çevirme kısmından başlayalım: Demin de bulduğumuz formülü kullanarak ikilik sayıların onluk karşılığını bulalım:
4212 xB44...
Burada, Bi, B2, ..., Bn yalnızca 0 ya da 1 olabildiği için, Bk terimi toplamaya 2.(k- 1) değerini ekleyecektir, ya da toplamı etkilemeyecektir. İsterseniz basit bir örnek yapalım artık:
90110101 (fi tarihinde yapılmış bir kabul sonucu “o işareti gelecek olan sayının ikilik olduğunu belirtir) ikilik sayısını onluk sisteme çevirelim. Formülümüze göre
ONLUK-142x04212x1-4213x0-421 4x14255x1
Kolay değil mi? Şimdi de tam tersini nasıl yapacağınızı göstereceğim. Ondalık bir sayıyı ikilik bir sayıya çevirirken kullanılan standart bir metod vardır: Sayı önce ikiye bölünür ve kalan, bir yere not edilir. Daha sonra bölüm de ikiye bölünür ve kalan bir yere not edilir. Bu işlem, bölüm | olana kadar devam eder. Sonra başa (en sola) bir adet 1 yazılır ve kalanlar sondan başa doğru sayının sağına eklenir. Tablo 1'de 53 sayısının ikilik düzene nasıl çevrildiğini görebilirsiniz.
Onaltılık (Hexademical) Sayı Sistemi
Aynı işlemler onaltılık sayı sistemleri için
-de geçerlidir. Yalnızca, formülde yer alan tüm 2'lerin yerine onaltı yazmalısınız. Yani:
ONLUK 4... 4 x Bn
Tabii ki basamaklarda 10 ve sonrasındaki rakamları yazmak için yeni bazı şekillere ihtiyacımız olacak. Bu rakamlar için garip garip şekiller icad etmek yerine, alfabemizde yer alan tanıdık şekillerin ilk altısını kullanmak çok daha makul ve mantıklı. Sonuç olarak onaltılık sayılar şekilde sıralanırlar: 0,1,2,3,4,5,6,7,8, 9, A,B,C,D, E, F, 10,... Alışana kadar biraz garip gelecek tabii, ama bu sistemi o kadar sık kullanacaksınız ki sonunda ““Neden onluk yerine onaltılık sistem kullanmıyoruz?” diye hayıflanacaksınız. Örneğin $FA (aynı fi tarihinde $'ın da onaltılık sayıları göstermesi kararlaştırılmış) sayısının onluk karşılığını bulalım:
ONLUK - $A 416x$F-10416x15-250
Bir de 250 sayısının 16'lık karşılığını bulalım. Ama bunun için Tablo 3'e bakmalısınız. İkilik ve onaltılık sayılar üzerine söylenebilecek çok şey bulunabilir, ama bu kadarı başlangıç için yeterli. Daha sonra, yeri geldikçe bu konulara değineceğiz. Şimdi biraz da bilgisayarla ilgili kavramlara bulaşalım:
19 1111 1010 EL 15 - 10-2 $ A - $SFA
Bit, Bayt (ya da Byte) ve Nibble
Bilgisayarınızın digital bir devre olduğunu biliyorsunuz. Digital devrelerin özelliği, bir telde bulunan sinyalin ya | ya da 0 olmasıdır. Yani elektronik bir ikilik sistemden başka bir şey değildir. Biz bu tellerin her birinde bulunan değere bir bit adı veriyoruz. Daha matematiksel olarak ifade etmemiz gerekirse, ikilik sistemdeki bir sayının her basamağına bir bit denir.
C-64'ünüz, kendisiyle yaşıt olan bilgisayarların çoğu gibi sekiz bitlik hatlarla veri iletir. Bu yüzden belleğinde sakladığı değerler en fazla sekiz bit uzunluğunda olabilir. Bellekte saklanan bu değerlere her seferinde “sekiz bit” demek yerine bir bayt demek genelde tercih edilir. Ufak bir hesapla, bir baytın alabileceği en yüksek değerin 255 olacağını bulabilirsiniz artık. Ama bu 255'in olmasından başka bir özelliği daha vardır: $FF olması. En büyük sayı olan 255 bile iki basamakla yazılabildiği için, onaltılık sistem, baytların değerlerini göstermek için idealdir. Bu yüzden makine diliyle uğraşan her insan ilk olarak onaltılık sistemle yakınlaşmaya çalışır. “Neden onluk değil de onaltılık sistem kullanılıyor?”” sorusu çoğunuzun kafasını şu anda kurcalıyor olmalı. Aslında sadece bir çeşit gösterim kolaylığı. 0-255 arası sayılar bir, iki ya da üç basamaklı ondalık sayılar olarak yazılabilirler. Oysa genel bir kabul olarak, bu sayılar ne olursa olsun, iki basamaklı onaltılık sayılar şeklinde yazılır. Yani 0 sayısı her zaman $00 olarak yazılır. Bu da görüntüde bir güzellik sağlar.
Bir de onaltılık sayılarla ikilik sayılar arasında geçiş yapmanın kolaylığı göz ardı edilemez. Onaltılık sayıların her basamağı tam dört adet bitten oluşur ve bu basamakların her birine bir nibble adı verilir. Tablo 4'e bir göz atarsanız Nibble'lardan yararlanarak onaltılık sistemle ikilik sistem arası sayı değişiminin nasıl yapılabileceğini görebilirsiniz. Bu aylık benden bu kadar. Artık temel konularda fikir sahibi olduğunuza göre gelecek saayıdan itibaren makine dili öğrenmeye başlayacağız. Bu ayki konunun sıkıcılığına aldanmayın, makine dili öğrenmek eminim çok hoşunuza gidecektir. Biz sadece ge-
Gelecek aya kadar bu onaltılık ve ikilik sayı sistemlerine biraz daha çalışın ki, konular başladığında bu konular geçtiğinde şaşırmayın.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 18
Her şey yorumcunun anlayabileceği şekilde saklandığı için, BASIC programlar bellekte çok fazla yer kaplarlar. Basit bir BASIC programı bile hemen 1000 bayta çıkabilirken, aynı yere yazılabilecek makine dili programı çok daha fazla iş yapabilir. Makine dilini size sevdirmek için öncelikle bu dilin avantajlarını saydım. Ama madalyonun bir de öteki yüzü var (hiçbir şey bedava değildir). BASIC'in değişken bolluğuna alıştıktan sonra, sadece üç tane değişkene sahip olan makine diliyle çalışmak zor gelebilir size. Özellikle bu değişkenlerin her biri sadece 0-255 arası değerler alabiliyorsa... Tabii ki bu üç değişken sadece görünür değişkenlerdir. Belleği değişkenler yığını olarak kullanmaya alıştığınızda, BASIC'ten bile daha fazla değişkeniniz olduğunu anlayacaksınız.
BASIC programlarının en iyi yanı, neredeyse İngilizce diyebileceğimiz bir dille yazılmış olması, dolayısıyla çok kolay anlaşılabilir olmasıdır. Makine dilindeki tüm komutlar üç harfle kodlanmış olduğu için hem öğrenirken, hem de eski programlarınızı incelerken oldukça zorlanırsınız. Bir de BASIC'de yaptığınız gibi notlar düşme gibi imkanınız da olmadığı için programın neresinde ne iş yaptığınızı kısa süre içinde unutursunuz. Komutlarınızın anlaşılır olmasını sağlamasa da, yanlarına not düşmenizi sağlayacak programlar (neyse ki) mevcut. Assembler adı verilen bu programların asıl amacı tabii ki komut yanına not düşmek değil. Monitör programıyla bir makine dili rutin yazdığınızda, aradan bir komut çıkartmak ve araya bir komut eklemek çok zordur. Assembler kullandığınız zaman ise bu konuda BASIC kullanıyormuşcasına rahat olursunuz. Assembler kullanmanızı teşvik etmek için, monitör programından önce (daha önceleri de yayınlamış olduğumuz) SUPER ASSEMBLER programını yayınlayacağız.
250 |16
240
250—-SFA
Tablo : 3
Her ne kadar itici görünse de, makine dilini kullanmaya bir kez başladıktan sonra bırakması zordur. Altı aylık bir makine dili programcılığından sonra BASIC'in ne kadar sıkıcı bir dil olduğunu siz de kabul edeceksiniz. Artık BASIC'le makine dili arasındaki farkların çoğunu bildiğimize göre makine dilini öğrenmek için ilk adımlarımızı atmaya başlayabiliriz:
Bilgisayarınızın Sayı Sistemi
Aslında bilgisayarların sayı sistemi diye bir şey yoktur. Gerekli programı yazdıktan sonra her sayı sisteminde işlem yaptırabilirsiniz bilgisayarınıza. Ama, bilgisayarınız tamamen digital devrelerden oluşmuş olduğu için, her şeyin sahibi olan 6502'niz sadece yan yana gelmiş olan 0 ve 1'lerden daha iyi anlar. Belki de sırf bu yüzden “Bilgisayarlar ikilik düzenden başka sayı düzeninden anlamaz!” kanısı çok yaygındır. Bilgisayarınızın hangi dilden anladığını tartışmadan önce, sayı düzenleri, bitler ve baytlar hakkında bir miktar genel bilgi vermek istiyorum:
Sayı Sistemleri
Sayılardan bahsedildiği zaman, matematik dersinde sayı sistemleri konusunu görmemiş olan herkes, günlük hayatta kullandığımız onluk düzenden bahsedildiğini sanır. Onluk sayı sisteminde sayılar (hepimizin bildiği gibi) 0'dan başlar ve 9'a kadar çıkar. 9'dan bir sonra gelen sayı da 1 ve 0'ın yan yana gelmesinden oluşur. Yani ilk basamak gene en başa döner ve bunun bir yanındaki basamağın değeri bir artar. Tabii ki yıllardır aynı sistemi kullanmaya alıştığımız için, tüm işlemlerin sadece bu şekilde yapılabileceği gibi bazı fikirler olmuştur kafamızda. Oysa, bir söylentiye göre, kullandığımız sayı sisteminin her basamağında sadece on adet işaret olmasının tek sebebi on tane parmağımızın olmasıymış. Yani insanlar sekiz parmaklı olsaydı, sayılar şu şekilde sıralanacaktı belki de: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11 vb. İlk
O'ya baktığınız zaman garip görünüyor değil mi?
Oysa sayı sistemlerinin temelinde bu mantık yatar. Sayılar (tabii ki pozitif tam sayılar demem gerekliydi) sıfırdan yani 0'dan başlar ve sayı sisteminin bir eksik rakamına kadar tek basamaklı olarak gider (8'lik sistem için 7). Bundan bir sonra gelen sayıyı göstermek için de ilk basamak sıfırlanır (0) ve ikinci basamak bir artırılır. Alfabemizi 29'luk bir sayı sistemi olarak düşünebiliriz mesela: Sayılar A ile başlar, 29 sayı tek basamaklı gösterilebilir (A, B, .., Z). Daha sonra gelen 30. sayı ise iki basamaklı olarak gösterilir: BA. Yani ilk basamak sıfırlanır (ya da A'lanır) ve ikinci basamak bir artırılır. Alfabetik sistem diye bir şey olsaydı, bu sistemdeki CA sayısı bizim sistemimizde 60'a denk düşecekti. Bu sayıların onluk düzendeki karşılıklarını bulmak çok kolaydır. İsterseniz örneklerimizi alfabetik sistemden değil de 8'lik sistemden verelim. Dikkat ettiyseniz, onluk sistemdeki sayılan her sekiz sayıda bir ikinci basamak bir artırılıyor. Bu demektir ki bu basamaktaki sayıyı sekizle çarpıp, birinci basamaktaki sayıyı buna eklersek, bir basamaklı tüm sayıların onluk sistemdeki karşılıklarını bulabiliriz. Yani sekizlik sistemden onluk sisteme çevirme formülü şöyle olacaktır:
ONLUK - Bi 48xB2
Buradaki B1'in sekizlik sistemdeki birinci basamak, B2'nin de ikinci basamak olduğunu hepiniz fark ettiniz sanırım. Ama formül sadece iki basamaklı sayılar için geçerli. İki basamaklı en büyük sekizlik sayı 77 olduğu için, formülümüz sadece 0 ile 63 arasındaki ondalık sayılar için geçerli olacaktır. Peki 77'den sonra gelen sayı sekizlik olarak ne olacaktır? 100 değil mi? Demek ki onluk sistemdeki 64'ün karşılığı sekizlik sistemdeki 100 oluyor. Bu durumda formülümüzü üç basamaklı sayılar için değiştirebileceğiz. Acaba 64 ile 8'in bir ilişkisi var mı? Evet, “Karesi! Karesi!” diye bağırdığınızı duyuyorum. Doğru. Bu durumda formülümüzü en genel haline getirmek çocuk oyuncağı olacak:
ONLUK-BI148xB248x8xB348x8 X8xB34...