Sayı Sistemleri
Transkript
Sayı Sistemleri
BÖLÜM 1 GİRİŞ 1.1 SAYI SİSTEMLERİ 1.1.1 Konumsal Sayı Sistemleri İkili sayı sistemi, sayısal bilgisayarlarda kullanılan en geleneksel ve kolay gerçeklenebilen bir sayı sistemidir. Bu gösterimde bir sayı n-bitlik bir vektör olarak kodlanır. Bu vektördeki her bit kendi konumuna göre ağırlıklandırılır. Her sayı sisteminde bir taban (radix veya base) r vardır. Her bit 0 ile (r-1) arasında bir tam değere sahiptir. İkili sayı sisteminde r = 2’ dir. Bu yüzden her bit yalnız 0 veya 1 değerini alabilir. (1.1) bağıntısıyla verilen n-bitlik bir vektörü inceleyelim . A = an −1an − 2 K a1a 0 (1.1) Burada 0 ≤ i ≤ n − 1 için ai = 0 veya 1’dir. Bu vektör, V tamsayı değerlerini 0 − ( 2n − 1) arasında gösterebilir. V = an-12n-1 + ... + a121 + a020 (1.2) Bu yüzden genellikle A ile gösterilen A vektörünün değeri n −1 A = ∑ a ir i (1.3) i= 0 bağıntısıyla tanımlanabilir. (1.3) bağıntısı pozitif tamsayıları göstermek içindir. Bu gösterim kesirli sayıları kapsayacak şekilde (1.4) bağıntısındaki gibi genişletilebilir. n −1 −m A = ∑ air i + ∑ air i= 0 = an-12 i = −1 n-1 + ... +a121 + a020 + a-12-1 + a-22-2 +... + a-m2-m (1.4) 101101.1101 bit dizisi (taban noktası ile birlikte) aşağıdaki değeri göstermektedir. 1x25 + 0x24 + 1x23 + 1x22 +0x21 + 1x20 + 1 +1x2-1 + 1x2-2 + 0x2-3 + 1x2-4 = 45 13 16 Bir sayı sisteminde her bit 0 ile (r-1) arasında bir değer alır. Bu durum hanelerden oluşan bir S kümesi oluşturur. S = {0,1,2, ... ,r-1} (1.5) Bu takımdaki bütün haneler pozitif olarak ağırlıklanmıştır. Ayrıca hem pozitif ve hem de negatif ağırlıklı hanelerin bulunduğu bir küme kurmak mümkündür, örneğin T = {-l, ... , -1,0,1, ... , l} (1.6) Burada l, kümenin alçak ve yüksek sınırını gösteren bir pozitif tamsayıdır. Bu artık (redundant) sayı sistemi olarak düşünülür, çünkü verilen bir sayıyı göstermek için birden çok yol olabilir. Örneğin n = 4 ve r = 2 için A = -5 sayısı aşağıda verilen dört gösterime sahip olur. Artık sayı sisteminin, aritmetik işlemlerde kullanılmasını zorlaştıran işte bu çok gösterimdir. Ayrıca her işaretli hane, bu haneyi göstermek için birden çok bit gerektirdiğinden, saklayıcı gereklerini ve saklama yolunun genişliğini arttırabilir. A = -5 → → → → 23 22 21 20 0 0 -1 -1 -1 -1 0 1 0 -1 1 0 -1 1 1 -1 1.1.1.1 Sekizli (Octal) Sayı Sistemi Sekizli sayı sistemi tabanı 8 olan bir sistem olup birçok bilgisayarda yaygın olarak kullanılmıştır. IBM 7090, DEC PDP-8 bilgisayarlarında ve birçok mikrobilgisayar yongalarında kolay ve doğrudan giriş/çıkış işlemi için sekizli sayılar kullanılmıştır. Bu sistemde haneler 0-7 arasındaki değerleri alır. Herhangi bir sayı (1.7) bağıntısı ile verilebilir. A = an-1 8n-1 + ... + a2 82 + a1 81 + a0 80 (1.7) Burada an-1, ... , a2, a1, a0 haneleri 0,1,2,3,4,5,6,7 değerlerini alabilir. Sekizliden Onluya Dönüşüm. (1.7) bağıntısı kullanılarak öğneğin (37)8 sayısını onluya dönüştürelim. 2 (37)8 = 3x81 + 7x80 = 3x8 + 7x1 = (31)10 Onludan Sekizliye Dönüşüm. Onludan sekizliye dönüşüm, onlu sayının tamsayı kısmı için tekrarlı bölme ve kesirli kısmı için tekrarlı çarpma kullanılarak yapılır. Örnek olarak (127)10 sayısını dönüştürelim. 127 = 15 + 7 8 15 = 1+ 7 8 1 = 0 +1 8 177 (127)10 = (177)8 bulunur. Kesirli onlu sayının sekizliye dönüşümü için (49.21875)10 sayısını ele alalım. Tam Kısım Kesirli Kısım 49 = 6 +1 8 6 = 0+6 8 0.21875 0.75 x x 8 8 1.75000 Sonuç (49.21875)10 = (61.16)8 6.00 61 1 6 1.1.1.2 Onaltılı (Hexadecimal) Sayı Sistemi Onaltılı sayı sistemi IBM 360, IBM 370, IBM 1130, Honeywell 200, ve RCA spectra 70 gibi birçok bilgisayarda kullanılmaktadır. Bu sistem, 10, 11, 12, 13, 14, 15 hane değerlerini temsil edebilmek için ilave sayı sembollerine ihtiyaç göstermektedir. Bu sistemde haneler 0-15 arasında değerler alır; Şekil 1.1. Onaltılı Tamsayılar. Herhangi bir onaltılı tamsayı (1.8) bağıntısıyla verilebilir. A = an-116n-1 + ...+ a2162 + a1161 + a0160 (1.8) Burada an-1 ... a1,a0 haneleri 0, 1, 2, ... 14,15, değerlerini alabilir. Örneğin (23)16 sayısının (35)10 sayısına eşit olduğunu gösterelim. (23)16 = 2x161 + 3x160 = 2x16 + 3x1 3 = (35)10 veya (1FF)16 = 1x162 + Fx161 + Fx160 = 1x256 + 15x16 + 15x1 = (511)10 Onlu 0 1 2 3 4 5 6 7 Onaltılı 0 1 2 3 4 5 6 7 Onlu 8 9 10 11 12 13 14 15 Onaltılı 8 9 A B C D E F Şekil 1.1. Onaltılı sayı sistemindeki haneler. Kesirli onaltılı sayıların onlu karşılığını bulmak için, kesir haneleri, konumlarına bağlı olarak 16’nın kuvvetlerine bölünür. (3B.8)16 = 3x161 + Bx160 + 0.8x16-1 = (59.5)10 Onlu Sayının Onaltıya Dönüşümü. Onludan onaltıya dönüşüm, tam kısmını tekrarlı olarak 16’ya bölerek ve kesirli kısmını tekrarlı olarak 16 ile çarparak yapılır. Aşağıdaki örnekte bu yöntem gösterilmiştir. (567.1875)10 = (?)16 Tam Kısım Kesirli Kısım 567 = 35 + 7 16 35 = 2+3 16 2 = 0+2 16 0.1875 x Sonuç (567.1875)10 = (237.3)16 16 3. 000 237 İkilinin Onaltıya Dönüşümü. İkili hanelerden dörtlü gruplar yaparak onaltıya dönüşüm sağlanabilir. Gruplamaya sağdan başlanır ve her dörtlü grubun yerine onaltılı eşdeğeri koyulur. Aşağıdaki örneklerle bu işlem gösterilmiştir. 4 (0110 1111 0101)2 = (?) 16 0110 1111 0101 6 F olduğundan 5 (0110 1111 0101)2 = 6F5 bulunur. 1.1.2 Sayı Gösterimleri Tüm matematik fonksiyonlar dört ana aritmetik işlem cinsinden ifade edilebilir: Toplama, çıkarma, çarpma ve böime. Bu işlemler üç tür sayı gösterimine karşı düşen üç çalışma modunda icra edilebilir: Sabit-noktalı (fixed point), kayan-noktalı (floating point,) ve onlu (binary coded decimal). Sabit-noktalı aritmetik basit olarak verinin sabit taban noktası ile gösterildiği problemlerde kullanılır, yani taban noktası sayıda sabit bir konumda kalır. Sabit noktalı işlemler iki sınıfa bölünebilir. Tamsayı aritmetiğinde kesir (radix) noktası sayının sağındadır. Bundan dolayı sabit-noktalı notasyonda gösterilmiş bir tamsayı, bu sayının tutulduğu kaydedicinin sağında imalı bir kesir noktasına sahiptir, Şekil 1.2. Kesirli aritmetikte, kesir noktası sayının solundadır. Bilgisayar tasarımcıların çoğu tamsayı biçimini benimser. X X X.....X . . X X X..... X Tamsayı biçimi Kesirli sayı biçimi Şekil 1.2. Sabit-noktalı sayı gösterim biçimleri Kayan-noktalı aritmetik, genlik ölçeklemesinin çok sık gerekli olduğu bilimsel ve mühendislik hesaplarında kullanılır. Kayan-noktalı işlemler de iki sınıfa ayrılır. Normalize edilmiş işlemler, hesaplamaya giren verilerin normalize edilmesini gerektirir. Bu gösterimde kesir noktasının hemen sağındaki bit 1’dir. Normalize edilmemiş işlemlerde sayılar kesirli biçimde gösterilir, ama kesir noktasının hemen sağındaki bit 1 veya 0 olabilir. Bilgisayarların çoğu normalize edilmiş sayıları kullanmaktadır. Her iki biçim Şekil 1.3’te gösterilmiştir, burada X = 0/1’dir. . 1 X X.....X Normalizeli biçim . X X X..... X Normalizesiz biçim 5 Şekil 1.3. Kayan-noktalı sayı biçimleri Kayan-noktalı aritmetik öiçekleme faktörü problemini ortadan kaldırır, ve sayı alanını sabit-noktalı aritmetiğin üstüne çıkarır. Kayan-noktalı bir sayı, f kesir (fraction) kısmı ve e üs (exponent) kısmı olmak üzere iki kısımdan meydana gelir. Bu iki kısım e’inci kuvveti alınmış bir tabanın f ile çarpımından elde edilen bir sayıyı gösterir, yani A kayan noktalı sayısı A = fxre (1.9) biçimde ifade edilir. Burada f ve e işaretli sabit noktalı sayılar ve r ise tabandır. Bazen kesir kısmına mantissa ve üs kısmına da karakteristik adı da verilebilir. Kesir kısmı genellikle işaretli genlik, üs ise 2’li tümlenmiş veya kutuplu biçimde temsil edilir. Doğruluk önemli olduğundan kesirde mümkün olduğu kadar çok anlamlı bit bulunmalıdır. Bu iş sayı normalize yapılarak başarılır. 2 tabanında normalizasyon, taban noktasının hemen sağındaki bit 1 oluncaya kadar kesirin sola doğru kaydırılması ve üssün de bu kaydırmaya uygun olarak azaltılması ile yapılır. Normalize edilmiş kesirin genliği (1.10) bağıntısıyla verilen mutlak değere sahiptir. (1/r) ≤ f <1 (1.10) Burada r tabanı göstermektedir. 32-bitlik kayan-noktalı bir ikili sayı biçimi Şekil 1.4’te gösterilmiştir. Sayının işareti her zaman en anlamlı hanede bulunur. Bu bit pozitif sayılar için 0 ve negatif sayılar için 1 olur. 31 30 S e 24 23 0 f 24 - bitlik kesir 7- bitlik işaretli üs sayının işareti Şekil 1.4. 32-bitlik ikili kayan-noktalı sayının biçimi. e üssü pozitif veya negatif tamsayı olabilir. Negatif üsler 2’li tümlenmiş biçimde tutulur. Kayan-noktalı sayıların toplanması 6 ve çıkarılması işlemlerinde üslerin karşılaştırılması gerektiğinden, üslerin işaretlerinin kullanılması gerekir. Halbuki karşılaştırma işlemi üslerin işaretlerini gerektirmeden yapılabilir. Bunun için kayan-noktalı sayı oluşturulurken her üsse pozitif bir değer eklenerek tüm üsler pozitif sayılara dönüştürülür. Bu pozitif değere kutuplama sabiti denir ve en negatif üssün genliğine eşittir. Eğer üs alanı m bitlik uzunluğa sahipse, o zaman kutuplama sabiti +2 m-1 olur ve tüm e üsleri 2m-1 kadar kutuplanır, yani bu üsler e kutuplu = e + 2m-1 (1.11) ile gösterilir. Bu kutuplama sayesinde 0 değerli kayan-noktalı bir sayının hem mantissası hem de üs kısmı tamamen sıfır olur. 2’li tümlenmiş gösterimde sıfır değerli sayı için üs en büyük negatif değerini alır. Onlu aritmetik onlu veriler üzerinde yapılan aritmetik,kaydırma ve düzenleme işlemleri için kullanılır. Onlu haneler paketli veya paketsiz biçimde gösterilebilir. Paketli biçimde her bayt, iki onlu hane içerir. İşaret hanesi de 4-bitlik olmalıdır. Paketsiz biçimde bir baytın en sağdaki 4-biti bir onlu hane oluşturur; en soldaki 4-bit ise onlu veriyi temsil etmek için kullanılmaz. Bu iki onlu sayı biçimi Şekil 1.5’te gösterilmiştir. 7 4 3 0 Hane Hane Hane İşaret Bölge Hane İşaret Hane Paketli biçim Paketsiz biçim Şekil 1.5. Onlu sayı biçimleri. İkili işlem yapan bir işlemci onlu sayıları alır, ikili biçime dönüştürür, işlemleri yapar, ve sonuçları tekrar onlu biçime dönüştürebilir. Bu durum az sayıda giriş/çıkış ve çok miktarda hesaplama için yeterlidir. Ama eğer bunun tersi geçerli ise, yani çok sayıda giriş/çıkış işlemi ve buna nispeten az miktarda hesaplama gerekiyorsa, o zaman onlu aritmetik kullanarak hesapları yapmak daha verimlidir. Bir onlu hane 4-bitten oluşur. 4-bitle 15’e kadar sayılar temsil edilebildiği halde, onlu hane 9’dan büyük değer alamayacağından 10-15 arasındaki değerler geçersiz onlu 7 hanelerdir. Bu yüzden onlu sayılarla işlem yapıldığı zaman her onlu hanenin geçerli olup olmadığı test edilmeli ve eğer geçersiz ise o haneye 6 eklenerek düzeltilmelidir. 1.1.3 Tamsayı Gösterimleri Eğer yalnız pozitif tamsayılar sabit-noktalı notasyonda gösterilecekse, o zaman nbitlik bir kelime 0-(2n-1) değerine kadar tüm sayıları gösterebilir. Ama hesaplamalarda hem pozitif hem de negatif tamsayılar kullanıldığından, pozitif ve negatif sayıların mümkün olduğunca eşit dağılabileceği bir kodlama biçimi bulunmalıdır. Bu kodlamada işaret denetimi kolay yapılabilmeli, 0’ların algılanması basit olmalı, ve dört işlemin icrası rahatça yapılabilmelidir. Konumlu sayı sisteminde pozitif ve negatif sayıları göstermek için kullanılan üç yöntem vardır: İşaretli genlik (sign magnitude), küçültülmüş tabanlı tümleme (diminished radix complement), ve tabanlı tümleme (radix complement). 1.1.3.1 İşaretli Genlik Bu gösterimde en anlamlı bit tamsayısının işaretini gösterir ve pozitif sayılar için 0, negatif sayılar için 1’dir. Pozitif sayı 0-(2n-1-1) arasında ve negatif sayı ise 0-[-(2n-1 -1)] arasında değerler alabilmektedir. Bu yüzden pozitif bir sayı A = (0an-2an-3 ... a1a0)r (1.12) ve negatif bir sayı -A = [(r-1)an-2an-3 ... a1a0]r (1.13) ile gösterilebilir. r = 2 için (1.12) ve (1.13) bağıntıları sırasıyla A = 0nn-2an-3 ... a1a0 -A = 1an-2an-3 ... a1a0 (1.14) haline gelir. İşaretli genlik notasyonunda pozitif sayı negatif sayıdan yalnız işaret hanesinde farklılık gösterir. an-2an-3 ... a1a0 genlik kısmı hem pozitif hemde negatif sayılar için aynıdır. İşaretli genlik gösteriminde var olan bir problem 0 sayısının iki farklı biçimde gösterilebilmesidir, yani +0 ve -0. İkinci problem zıt işaretli iki sayı toplanırken meydana gelir; sonucun işaretini belirlemek için genlikler karşılaştırılmalıdır. Diğer iki yöntemde bu durum gerekli değildir. İşaretli genlik gösterimi kayan-noktalı sayıların kesir kısmının gösterimi için sık sık kullanılmaktadır. 8 1.1.3.2.Küçültülmüş Tabanlı Tümleme İkili notasyonda küçültülmüş tabanlı (r-1) tümleme 1’li tümleme olarak bilinir. 0 (2n-1 - 1) arasındaki pozitif tamsayılar, ikili konumsal sayı sistemindeki gibi gösterilir, yani A = 0 an-2an-3 ... a1a0 (1.15) biçimindedir. 0 - [-(2n-1 -1)] arasındaki negatif sayılar ise, sayının pozitif eşdeğerlerindeki bitlerin tümleyenleri alındıktan sonra işaret hanesine 1 koyularak elde edilir. Bu yüzden pozitif bir sayı A = 0an-2an-3 ... a1a0 (1.16) ile ve aynı mutlak değere sahip negatif bir sayı ise A = 1an − 2 an − 3 K a1a0 1 a0 (1.17) ile gösterilir. Veya daha genel biçimde A = [ ( r − 1) an− 2 an− 3 K a1 a 0 ] r (1.18) ile gösterilebilir. Burada ai = ( r − 1) − ai dir. Bu gösterimde iki sayının işaretlerinin karşılaştırılması çok açıktır, çünkü en soldaki bit pozitif sayılar için 0 ve negatif sayılar için 1’dir. Ama 0 için çift gösterim halen daha devam etmektedir. Çünkü tamamen 0’lardan oluşan bir kelime (+0) tümlendiği zaman, tamamen 1’lerden oluşan bir kelime (-0) haline gelir. 1.1.3.3 Tabanlı Tümleme İkili notasyonda tabanlı tümleme 2’li tümlemedir. 0-(2n-1-1) arasındaki pozitif sayılar, ikili konumsal sistemde A = 0an-2an-3 ... a1a0 (1.19) bağıntısıyla gösterilir. Negatif sayılar, negatif değeri arzu edilen sayının 1’li tümleyenine 1 eklenerek bulunur. Bu yüzden negatif bir sayı ( A) +1 = ( 1an − 2 an − 3 K a1a0 ) + 1 (1.20) bağıntısıyla gösterilir. Genellikle negatif bir sayının tabanlı tümleyeni 9 ( A ) +1 = {[( r − 1) an − 2 an − 3 K a1a0 ] + 1}r biçiminde veya ( A) +1 (1.21) = r n − A ile gösterilir. İşaret denetimi yine yalnız iki bitin karşılaştırılmasına dayanır. 0 değerli sayının tek bir gösterimi vardır, çünkü bir 0 dizisinin negatifi alındığı zaman yine 0 dizisi elde edilir (anlamlı bit konumundan çıkan elde gözardı edilir). Sayı alanı (-2n-1) - (2n-1-1) arasındadır. Burada -2n-1 sayısı 1 ve bunu izleyen (n-1) adet 0 ile gösterilir. Toplama ve çıkarma küçültülmüş tabanlı tümlemedekinden daha kolay yapılır, ve sonuç daima doğru 2’li tümlenmiş biçimdedir. 1.1.4 Alfasayısal Kodlar Sayısal bilgisayarların çoğu uygulamalarında yalnız sayısal veriler değil aynı zamanda harfler de kullanılır. Örneğin binlerce poliçe hamili olan bir sigorta şirketi, kütüklerini işlemek için bilgisayar kullanmak zorundadır. Adları ve diğer ilgili bilgileri temsil edebilmek için, alfabedeki harflerin kodlanabilmesi gerekir. Ayrıca aynı ikili kod, sayıları ve $ gibi diğer özel karakterleri de temsil edebilmelidir. Alfasayısal karakter takımı, 10 tane onlu haneyi (rakamları), alfabedeki 26 harfi, ve bir çok özel karakteri içeren bir elemanlar takımıdır. Böyle bir takım yalnız büyük harfleri kapsarsa 36-64 arasında, veya hem büyük hem de küçük harfleri kapsarsa 64-128 arasında eleman içerir. İlk durumda 6-bitlik ikinci durumda ise 7-bitlik ikili koda ihtiyaç vardır. İkili kodlar bilgisayarlarda önemli rol oynar. Bu kodlar ikili kod olmalıdır, çünkü bilgisayarlar yalnız 1 ve 0’ları saklayabilir. Bilinmelidir ki, ikili kodlar yalnız sembolleri değiştirir, onların temsil ettikleri bilgilere ait elemanların anlamını değiştirmez. Bilgisayardaki bitleri rastgele incelediğimiz zaman çoğu kez ikili sayılardan ziyade bir tür kodlanmış bilgiyi temsil ettiklerine rastlarız. 1.1.4.1 ASCII Karakter Kod Alfasayısal karakterler için standart ikili kod ASCII (American Standart Code for Information Interdange) koddur. Tablo 1.1 de gösterilen 128 karakteri kodlamak için 7-bit kullanır. Kod bitleri B1 anlamsız ve B7 en anlamlı olacak şekilde atanmıştır. Örneğin A harfi 1000001 bit dizisiyle (sütun 100, satır 0001) temsil edilir. ASCII kod, basılabilen 94 grafik karakter ve çeşitli denetleme fonksiyonları için kullanılan 34 basılamayan karakter 10 içerir. Grafik karakterler A’dan Z’ye 26 büyük harf, 0’dan 9’a 10 rakkam, ve %, *,ve $ gibi 32 özel karakterden ibarettir. Tablo1.1 American Standard Coode for Information Interchange (ASCII) B7B6B5 B4B3B2B1 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 000 001 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 010 011 100 101 110 111 SP ! “ # $ % & ‘ ( ) * + ‘ — . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ‘ a b c d e f g h i j k ı m n o P q r s t u v w x y z { ¦ } ~ DEL Kontrol karakterleri NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI SP Null Start of heading Start of text End of text End of transmission Enquiry Acknowledge Bell Backspace Horizontal tab Line feed Vertical tab Form feed Carriage return Shift out Shift in Space DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US DEL Data link escape Device control 1 Device control 2 Device control 3 Device control 4 Negative acknowledge Synchronous idle End of transmission block Cancel End of medium Substitute Escape File separator Group separator Record separator Unit separator Delete 34 denetim karakteri, ASCII tabloda kısaltılmış adlarıyla gösterilmiştir. Bu karakterler tablonun aşağısında tam fonksiyonel adlarıyla yeniden listelenmiştir. Denetim 11 karakterleri, verilerin yolunu çizmek ve önceden belirlenmiş biçimde bir metnin basımını düzenlemek için kullanılır. Biçim etkileyiciler, bilgi ayırıcılar, ve haberleşme denetim karakterleri olmak üzere üç çeşit denetim karakteri vardır. Biçim etkileyiciler, baskının yerleşimini denetleyen karakterlerdir. Bunlara örnek olarak BS geri-alma (backspace), HT yatay tablolama (horizontal tabulation), ve CR geri-dönüş (carriage return) karakterleri verilebilir. Bilgi ayırıcılar, verileri paragraf ve sayfalar gibi bölümlere ayırmak için kullanılır. Bunlara RS kayıt ayırıcı (record separator) ve FS kütük ayırıcı (file separator) karakteri örnek olarak verilebilir. Haberleşme denetim karakterleri, uzak terminaller arasında metnin iletimi için yararlıdır. Telefon hatları üzerinden iletişim yapıldığı zaman metni çerçevelemek için kullanılan STX metni başlatma (start of text ) ve ETX metni sonlandırma (end of text) karakterleri bu sınıfa örnek olarak verilebilir. ASCII, 7-bitlik bir koddur, ama çoğu bilgisayarlar bayt adı verilen 8-bitlik büyüklüğü tek bir birim olarak kullanır. Bundan dolayı ASCII karakterler çoğunlukla en anlamlı biti 0 olmak üzere bayt başına bir karakter düşecek şekilde saklanır. Bu ilave bit uygulamaya bağlı olarak bazen özel amaçlar için kullanılır. Örneğin bazı yazıcılar (printer), en anlamlı biti 1 olan 8-bitlik ilave 128 ASCII karakter kullanılır. Bu sayede Greek karakterler ve italik biçimler üretilebilmektedir. IBM cihazlarda kullanılan diğer alfasayısal kod EBCDIC (Extended BCD Interchange Code) koddur. Bu kod her karakter için 8-bit kullanır. EBCDIC ile ASCII aynı karakter sembollerini kullanır, ama karakterlerin bit atamaları farklıdır. Adından da anlaşılacağı gibi; harfler ve rakamların ikili kodu, BCD kodun bir uzatımıdır. Bunun anlamı şudur: Kodun ilk ve son dört biti, BCD kodda olduğu gibi 0000-1001 arasında değişir. 1.2 LOJİK İŞLEMLER İkili lojik, iki ayrı değer alan değişkenler ve lojik anlam taşıyan işlemlerle uğraşır. Değişkenlerin aldığı bu iki değer farklı şekillerde adlandırılabilir, ama buradaki amaca uygun olması açısından ikili değer cinsinden düşünülmeleri ve her değişkene 1 veya 0 atanması uygundur. Değişkenler alfabedeki harflerle adlandırılır (örneğin A, B, C, ... gibi). İkili değişkenlere ilişkin üç temel lojik işlem vardır: AND, OR, NOT işlemleri. 12 1. AND İşlemi. Bu bir Boole çarpma işlemidir. A ve B Boole değişkenleri olmak üzere A AND B = AB şeklinde gösterilir. Bu işlemi gerçekleyen lojik kapının sembolik gösterimi ve bu işlemin doğruluk (truth) tablosu Şekil 1.6 da gösterilmiştir. Tablodan da görüleceği üzere AND işlemi iki değişkenin 1 olması durumunda 1 sonucunu verir. (a) (b) Şekil 1.6. (a) AND kapısının sembolik gösterimi, (b) doğruluk tablosu. 2. OR İşlemi. Bu bir Boole toplama işlemidir. A ve B Boole değişkenleri olmak üzere A OR B = A + B şeklinde gösterilir. Bu işlemi gerçekleyen lojik kapının sembolik gösterimi ve bu işlemin doğruluk tablosu Şekil 1.7 de gösterilmiştir. Her iki değişkenin aynı anda 0 olması durumunda OR işlemi 0 sonucunu doğurur. (a) (b) Şekil 1.7. (a) OR kapısının sembolik gösterimi, (b) doğruluk tablosu. 3. NOT İşlemi. Bu bir tümleme işlemidir. A bir Boole değişkenini veya fonksiyonunu göstermek üzere NOT A = A ile gösterilir. Bu işlemi gerçekleyen lojik kapının sembolik gösterimi ve doğruluk tablosu Şekil 1.8 de gösterilmiştir. (a) (b) Şekil 1.8. (a) NOT kapısının sembolik gösterimi, (b) doğruluk tablosu. Bu işlemler temel işlemler olup, bunlardan türetilen türev işlemler vardır. Türev işlemler XOR, NAND, NOR gibi işlemlerdir. NAND ve NOR işlemleri sırasıyla AND ve 13 OR işlemlerinin değillerine karşılık düşer, bu yüzden burada verilmeyeceklerdir. Ama XOR işlemi aritmetik işlemlerde ve eşitlik karşılaştırmada çok kullanıldığından burada açıklanması uygun olacaktır. 4. XOR İşlemi. Denetimli tümleme işlemidir. A ve B Boole değişkenleri olmak üzere A XOR B = A + B ile gösterilir. Bu işlemi gerçekleyen kapının sembolik gösterimi ve doğruluk tablosu Şekil 1.9 da verilmiştir. Doğruluk tablosundan görülebileceği üzere, A = 0 iken çıkış A + B = B dir, tersine A=1 iken A + B = B dir. Buradan A değişkeni sayesinde B değişkeninin tersinin alınıp alınmayacağı denetlenebilmektedir. (a) (b) Şekil 1.9. (a) XOR kapısının sembolik gösterimi, (b) doğruluk tablosu. XOR işlemi 1-bitlik iki sayının toplanmasında kullanılabilir. Doğruluk tablosundan görülebileceği üzere, A = B = 1 olduğu zaman toplam 2 etmesine rağmen a+B = 0 olmuştur. Bu sonuç sayı tabanı çıkarılarak bulunmuştur ve elde doğurur. Diğer durumlarda A+B değeri çıkış olarak alındığından, toplamı tam doğru olarak temsil etmektedir. XOR kapısı aynı zamanda eşitlik karşılaştırıcıdır. Doğruluk tablosundan görüleceği üzere, A ve B değişkenleri aynı değerli olduğu zaman çıkış 0, farklı olduğu zaman çıkış 1’dir. 1.3 BİLGİSAYARIN GENEL YAPISI Basit bir sayısal bilgasayarın blok dyagramı Şekil 1.10 da gösterilmiştir. Merkezi işlem birimi (CPU) çoğunlukla insan beynine benzetilir, çünkü burası tüm kararların alındığı ve sistem zamanlamasının üretildiği yerdir. CPU’da bir aritmetik lojik birim (ALU) vardır ve tüm matematiksel işlemler orada yapılır. Bu hesapların sonuçları akumülatör adı verilen CPU içindeki özel bir kaydedicide saklanır. Bu işi gerçeklemek için CPU’ya emretmek amacıyla kullanılan belirli bir komut dizisini saklayacak bir bellek birimi kullanılmalıdır. Bu emirlere bilgisayar programı adı verilir. Emirlerin işleyeceği veriler için bellekte yer ayrılır. Bu belleğe veri bellek adı verilir. 14 Giriş/çıkış cihazları olmadan bilgisayarın çok yararlı iş yapması mümkün değildir. Yapılacak işe ilişkin emirleri veya komutları bilgisayara girebileceğimiz cihaz klavyedir. Sonuçları ise yazıcı veya CRT ekran üzerinde gözleriz. Şekil 1.10. Basit bir bilgisayarın blok yapısı. Program belleğin içeriği incelendiği zaman, bizim için anlamı olmayan bir sayılar kümesi ile karşılaşırız. Ama CPU için bu sayıların anlamı büyüktür ve CPU’nun yürüteceği işlemleri gösteren bir komut takımını temsil eder. Bu sayılar, CPU’nun emir takımındaki çeşitli emirlere ilişkin işlem kodlarını (opcode) gösterir. CPU, bellek, ve giriş/çıkış cihazlar birbirleriyle haberleşebilmelidir. Örneğin CPU seçilecek bellek alanını belirleyebilmeli ve bu alana bilginin yazılacağını veya okunacağını tanımlayabilmelidir. Bu iş adres, veri, ve denetim hatları sayesinde yapılır. CPU belirli bir bellek alanının içeriğini okuyacağı zaman, ilk olarak o yerin adresini adres yoluna koyar. Bu adres program sayıcının içeriğidir. Denetim hatları belleğe erişileceğini ve bellek üzerinde örneğin okuma işleminin yapılacağını tanımlar. Bunun sonucunda seçilen bellek alanın içeriği veri yolu üzerinden CPU’ya taşınır. Bu üç yola sahip bilgisayar mimarisinin çalışmasına örnek olarak akumülatör içeriğini dış cihaza (örneğin yazıcıya) gönderen bir emiri inceleyelim. Bu emirin icrasi, yazıcı adresinin CPU tarafından adres yoluna koyulmasını gerektirir. Yazıcıya ait olan adres kodçözücü bu adresi değerlendirerek CS hattını aktif yapar. Daha sonra akumülatör içeriği veri yoluna koyulur, ve ardından yazma denetim işareti aktif yapılarak veri yolu 15 üzerindeki bilgi arayüz cihazına yazılmış olur. Arayüzün çıkışı aynı zamanda yazıcının girişine uygulanmış olduğundan, bilgi yazıcıya iletilmiş demektir. Adres, veri, ve denetim yollarının genişliği kullanılan CPU’ya bağlıdır. Emirleri 8bitlik verileri işleyebilen bir CPU’nun veri yolu genellikle 8-hatlı ve adres yolu 16-hatlı olmaktadır. Denetim yolunun genişliği 8-bitlik CPU’larda bile değişik olabilir. Bu yol CPU’yu tanımlayan bazı özel hatlar içerebilir. Ama her CPU’da ortak olan denetim hatları vardır, örneğin okuma, yazma,...vs hatları gibi. Denetim hatlarının bir kısmı CPU’ya giriş bir kısmı çıkıştır. Halbuki adres yolu sadece çıkış, veri yolu ise hem giriş hem de çıkış olabilmektedir. 1.4 MİKROBİLGİSAYARIN PROGRAMLANMASI 1. Makina ve Asembli Dili Programlama. Bütün bilgisayarlar ikili sayılar kullanılarak programlanmalıdır. Ama bu programlama biçimi programcı açısından çok hantaldır. Klavyeden girilen iki sayıyı toplayan bir Z80 mikroişlemci programı incelensin. 11011011 00000000 01000111 11011011 00000000 10000000 11010011 01000000 01110110 Bu programın çok açık olmadığı aşikardır. Ama Z80 işlemci için oldukça açıktır. Bu tüm programa amaç kodu (object kodu) denir ve CPU’nun icra edebileceği yegane kodu içerir. Ama programcının bu kodu kullanabilmesi hemen hemen imkansızdır. Şimdi bu programın onaltılı tabanda kodlandığı düşünülsün. DB 00 47 DB 00 80 D3 40 76 16 Elbette bu program daha okunabilir biçimdedir, ama programın görevi halen daha açık değildir. Şimdi de bu onaltılı kodlara karşı düşen mnemonic biçimler (emir işlem kodlarının kısaltımı) kullanılsın. İkili Onaltılı Mnenonic 11011011 DB IN 00000000 00 01000111 47 11011011 DB 00000000 00 10000000 80 A,(OOH) Açıklama ; 00 adresinden birinci ; sayıyı A kaydedicisine gir. LD B,A ; A’nın B’de kopyasını oluştur. IN ; 00 adresinden ikinci sayıyı ; A kaydedicisine gir. ; A ve B kaydedicilerini topla ve A,(00H) ADD A,B sonucu A’da sakla 11010011 D3 01000000 40 01110110 76 OUT (40H),A ; A’nın içeriğini kırk adresine yaz HALT ; Dur. Bu programın görevi şimdi oldukça açıktır. Birinci sayı 00 adresinden A kaydedicisine girilir. Klavye bu 00 adresine bağlanmıştır. Üstüne yazma yapılmasın diye birinci sayı A’dan B kaydedicisine taşınır. Daha sonra ikinci sayı klavyeden A kaydedicisine girilir ve A ve B kaydedicilerinin içerikleri toplanır. Sonuç, monitörün bağlı olduğu varsayılan 40 adresine gönderilir. En son emirle mikroişlemci durdurulur. Mikroişlemci emirleri ikili, onaltılı, ve mnomonic biçimde gösterilebilir. Kullanılan açıklamalar, programın yaptığı işi daha da netleştirir. Emirleri onaltılı biçimde girerek bilgisayarın programlanması makina dili programlama olarak bilinir. Bazı bilgisayarlar mnomonic biçimli emirler kullanılarak programlamaya izin verir. Buna da Assembli dili programlama denir. Assembli dili program kullanıldığı zaman Assembler adı verilen özel bir programa ihtiyaç vardır. Assembler programı, Assembli dili kütüğün oluşumunu kolaylaştıran bir cins editör ile birlikte verilir. Assembli dili kütüğe kaynak (source) kodu denir. Programın kaynak kod uyarlaması tamamlanınca, mnemoniclerin ikili kod karşılıklarını bulmak için assembler çağrılır ve amaç kod adı verilen yeni bir kütük oluşturulur. Bu kütük, belleğe yüklenip icra edilebilecek ikili kod içerir. 17 Tuş takımından programın onaltılı biçimde girilmesine izin veren mikroişlemci eğitici (trainer) sistemleri kullanıldığı zaman, girilen onaltılı sayıları mikroişlemcinin değerlendirmesi nasıl mümkün olmaktadır sorusu akla gelebilir. Bunun cevabı Şekil 1.11 yardımıyla açıklanabilir. Bu devre 16-den -4’e kodlayıcıdır. Bu devre 16 farklı girişi (0’dan F’ye kadar) alır ve bunların karşılığı olarak 0000-1111 arasında değişen 4-bitlik çıkışlar üretir. Bu sayede veriler onaltılı biçimde bilgisayara girilse de, bilgisayar bu verileri ikili biçimde almış olur. Şekil 1.11. 16-dan-4’e kodlayıcı devre. 2.Yüksek-Seviyeli Diller. BASIC programlama dili en basit yüksek- seviyeli programlama dilidir, ve bilgisayarlar ile birlikte verilmektedir. İki sayıyı toplayan program BASIC dilinde yazılırsa, 10 INPUT N1,N2 20 PRINT “SUM = “; N1 + N2 30 END 18 elde edilir. Orijinal ikili programla karşılaştırılışı çarpıcıdır. Elbette bu durum tüm yüksekseviyeli dillerin amacıdır. Programcının kendi diline mümkün olduğunca benzeyen bir dille bilgisayarla konuşması en arzulanan şeydir. BASIC dilinde programlama, BASIC yorumlayıcı veya derleyici gerektirir. Yorumlayan BASIC kullanıldığı zaman, uygulama programı, editör gerektirmeden belleğe sokulabilir. Daha sonra RUN komutu verilmesi, BASIC deyimlerini yorumlayıcının incelemesini ve ardından görevi gerçekleyecek makina kod dizisini icra etmesini sağlar. Yorumlayıcı kullanmak çok yavaş program icrası ile sonuçlanabilir. Eğer bilgisayar bir döngüye girerse, yorumlayıcı o döngüdeki emirleri defalarca yorumlamaya devam edecektir. Bilgisayar çok hızlı olduğundan bu gecikme programcı tarafından farkedilmeyebilir. Yüksek-seviyeli dildeki programları amaç koda dönüştürmek için derleyici kullanılabilir. Derleyici kullanmak assembler kullanmaya benzer, çünkü uygulama program kütüğünü oluşturmak için bir editör kullanılmalıdır. Yüksek seviyeli diller, bilgisayar donanımını ve emir takımını programcının bilmesini gerektirmez, ve böylece bu yükten programcıyı kurtarır. 19