Mikroişlemciler Sayı gösterimleri
İçerik Sayı gösterimleri Gerçek sayılar BCD Sayılar ASCII Sayılar Yönsüz, Yön büyüklük, One’s complement, Two’s complement, biased Gerçek sayılar Single Precision, Double Precision BCD Sayılar ASCII Sayılar Shift ve Rotate
Veri gösterimi Bilgisayarlar, binary değerler üzerinde çalışırlar (transistörlerden oluşmalarının bir sonucu) Sayıların, farklı binary gösterimleri bulunmaktadır: Sadece pozitif sayılar Pozitif ve negatif sayılar İnsanlar taraafından olay bir şekilde anlaşılma gerekliliği Bilgilsayar işlemlerinde hız gereksinimleri
Tam sayı gösterimleri Genelde kullanılan 5 adet tam sayı gösterimi bulunmaktadır: Yönsüz Yön ve büyüklük One’s complement Two’s complement Biased (daha az bilinir)
Tam sayı gösterimleri (devam) Farklı zamanlarda, farklı gösterimler kullanılmıştır. Günümüz bilgisayarlarının goğunluğu two’s complement gösterim kullanırlar. Çünkü, Donanım daha hızlı çalışır Donanım daha basittir (hızlı çalışmasını da sağlar)
Yönsüz sayılar Daha önceden de bilgiğiniz standart binary kodlama Sadece pozitif sayılar gösterilir. n bit: 0 ile 2n - 1 arasını gösterir Örnekler: 5: 0000 0101 134: 1000 0110
Yön büyüklük Pozitif ve negatif sayılar gösterilebilir. MSB (most significant bit – en önemli bit), yönü belirtmek için kullanılır. Pozitif sayılar için MSB 0, negatif sayılar için 1’dir Örnekler: 5: 0000 0101 -5: 1000 0101
One’s Complement Pozitif sayılar, yönsüz ile aynı şekilde gösterilir. Negatiflik için ise, pozitif gösterimdeki tüm bitlerin tersleri alınır. Örnekler: 5: 0000 0101 -5: 1111 1010
Two’s Complement Pozitif sayıların gösterimi, yönsüz gösterim ile aynıdır. Negatiflik, one’s complement alındıktan sonra 1 ilave edilerek bulunur. Örnekler: 5: 0000 0101 -5: 1111 1011
Biased gösterim 2n-1 veya 2n-1-1 sayılarından biri bias değeri olarak seçilir. Tam sayı değerine, bu değer ilave edilerek gerçek değere ulaşılır. Sonucun, yönsüz gösterimi, biased gösterim olarak bulunur. Örnekler: bias=127 ise, 5: 1000 0100 (132) bias=127 ise -5: 0111 1010 (122)
Two’s Complement’de yönlü genişletme 8 bitlik yönlü bir sayının 16 bit olarak ifade edilmesinin gerekli olduğu durumlarda kullanılır. Bu durumda, en soldaki bit (MSB) tekrar edilir. Örnek: 5: 0000 0101 (8 bit) 0000 0000 0000 0101 (16 bit) -5: 1111 1010 (8 bit) 1111 1111 1111 1011 (16 bit)
Karakter gösterimi Karakter gösteriminde, ASCII kodları kullanılır Karakterler 8 bit olarak gösterilir. Örnekler: ‘A’: 0100 0001 (65 veya 41h) ‘B’: 0100 0010 (66 veya 42h) ‘0’: 0011 0000 (48 veya 30h) ‘9’: 0011 1001 (57 veya 39h)
String->tam sayı dönüşümü ‘0’ karakteri ile 0 sayısı farklıdır. ‘354’ karakter dizisini 354 sayısına dönüştürmek için aşağıdaki algorita kullanılır: ‘3’ oku ve 3’e dönüştür (30h=‘0’ çıkart) ‘5’ oku ve 5’e dönüştür TamSayı= 3 * 10 + 5 = 35 ‘4’ oku ve 4’e dönüştür TamSayı= 35 * 10 + 4 = 354
Gerçek sayıların gösterimi Gerçek sayılar (veya floating-point sayılar), bilgisayar programlarında sıklıkla karşılaşılır Gerçek bir sayı, binary sisteme çevrilmelidir Farklı gösterimler mevcuttur. Ancak Intel mikroişlemciler, IEEE 754, v10.0 standardını kullanırlar. Intel 8086, floating point komutları içermez. Bu komutların kodlanması gereklidir.
Gerçek sayıların binary’ye dönüştürülmesi Sayıyı, integer ve fractional kısımlarına ayırınız. Integer kısım, kolayca binary’ye çevrilir. Fractional kısım ise, sürekli olarak iki ile çarpıp integer kısım alınarak bulunur.
Örnek: 64.2’nin binary’ye dönüştürülmesi Sayıyı 64 ve 0.2 olarak ikiye ayır 64’ün binary gösterimi 100 0000’dır 0.2’nin gösterimi, aşağıdaki şekilde bulunur: 0.2 * 2 = 0.4 0 (En önemli bit) 0.4 * 2 = 0.8 0 0.8 * 2 = 1.6 1 0.6 * 2 = 1.2 1 0.2 * 2 = 0.4 0 (kendini tekrar eder) 0.2 = 0.0011 0011 0011 … Bu durumda, 64.2 şu şekilde gösterilebilir: 100 0000.0011 0011 0011 …
Bilimsel gösterim Gerçek sayılar, normalize edilmeli (normalized) ve bilimsel gösterimde (scientific notation) yazılmalıdır. Bilimsel gösterimde, bir sayı üç kısımdan oluşur: Sign Mantissa Exponent Normalize formda, mantissa’nın integer kısmı 1’dir
Örnek: 64.2’nin bilimsel gösterimi 64.2 binary olarak şu şekilde gösterilebilir: 1.00 0000 0011 0011 0011 … × 26 Burada, 1.00 0000 0011 0011 0011 … kısmına mantissa adı verilir. 6 kısmına ise exponent adı verilir. Sign, artıdır (+).
IEEE 754 Standardı IEEE 754 standardına göre, floating point sayılar, 32 bit veya 64 bit olarak gösterilir. 32 bit’lik versiyona single-precision ve 64 bitlik versiyona ise double-precision adı verilir.
Single Precision 31 30 23 22 S Exponent Mantissa İlk bit (31. bit), yönü gösterir (0 ise pozitif ve 1 ise negatiftir) Sonraki 8 bit (23-30) biased exponent (bias = 127) kısmıdır Sonraki 23 bit ise (0-22) mantissa nın 24 bitini gösterir. Mantissa’nın ilk bitinin gösterilmesine gerek yoktur.
Double Precision 63 62 52 51 S Exponent Mantissa İlk bit (63. bit), yönü gösterir (0 ise pozitif ve 1 ise negatiftir) Sonraki 11 bit (52-62) biased exponent (bias = 1023) kısmıdır Sonraki 52 bit ise (0-51) mantissa nın 52 bitini gösterir. Mantissa’nın ilk bitinin gösterilmesine gerek yoktur.
64.2 (Single Precision) 64.2 pozitif olduğu için, yön biti 0’dır. Exponent 6’dır; 127 ilave edilir ve 133 değerine ulaşılır(6 + 127 = 133 = 1000 0101) Mantissa 1.00 0000 0011 0011 0011 …’dir Integer kısmındaki 1 ihmal edilir ve fractional kısımdan 23 bit alınır: 000 0000 0110 0110 0110 0110 Birleştir:0100 0010 1000 0000 0110 0110 0110 0110 (veya 42806666h)
64.2 (Double Precision) 64.2 pozitif olduğu için, yön biti 0’dır Exponent 6’dır; 1023 ilave edilir ve 1029 değerine ulaşılır (6 + 1023 = 1029 = 100 0000 0101) Mantissa 1.00 0000 0011 0011 0011 …’dır Integer kısmındaki 1 ihmal edilir ve fractional kısımdan 52 bit alınır: 0000 0000 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 Birleştir: 0100 0000 0101 0000 0000 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 (veya 40500CCCCCCCCCCCh)
Ayrıcalıklar Sıfır, tüm bitler sıfır olarak gösterilir Sonsuz sayısını göstermek için, exponent kısmındaki tüm bitler bir, mantissa’daki tüm bitler sıfır olarak değerine atanır. Yön biti ise, pozitif veya negatifi gösterir. +∞ = 0 1111 1111 000 0000 0000 0000 0000 0000 -∞ = 1 1111 1111 000 0000 0000 0000 0000 0000
Egzersizler 12.3’ün Single ve Double precision gösterimlerini hesaplayınız (cevap: 4144 CCCDh ve 4028 9999 9999 999Ah) -23.4’ün Single ve Double precision gösterimlerini hesaplayınız (cevap: C1BB 3333h ve C037 6666 6666 6666h) 3F80 0000h, hangi floating point sayının single precision gösterimidir?
BCD (Binary Coded Decimal) Veri Bazı durumlarda, tam sayıların her basamağını 4 bit olarak göstermek gerekli olabilir. Örneğin, 1234h, 1234 decimal değerini gösterebilir. Bu sayılara BCD sayılar ismi verilir. BCD sayılar ile kullanılmak üzere özel komutlar bulunmaktadır.
DAA DAA: Decimal Adjust after Addition İki BCD sayının AL register’ında yapılan toplama işleminin sonuçlarını düzeltir. Örnek: MOV AL, 15 ; AL = 0Fh DAA ; AL = 15h
DAA Örnek BX ve DX register’larında bulunan iki 4-digit BCD sayının toplama sonucu CX register’ında BCD olarak saklanacaktır. MOV DX, 1234h ; 1234 BCD sayısını sakla MOV BX, 3099h ; 3099 BCD sayısını sakla MOV AL, BL ; Düşük bayt basamaklarını topla ADD AL, DL ; AL = 34h + 99h = CDh DAA ; CF = 1, AL = 33h (133) MOV CL, AL ; Düsük bayt’taki sonucu sakla MOV AL, BH ; AL = 30h (Yüksek basamakları topla) ADC AL, DH ; AL = 43h DAA ; CF = 0, AL = 43h MOV CH, AL ; Yüksek bayt’taki sonucu sakla
DAS DAS: Decimal Adjust after Subtraction AL register’ında bulunan iki BCD değerinin fark sonucunu düzeltin. DAA’ya benzer, ancak çıkarma işleminden sonra kullanılır.
ASCII kodlanmış sayılar Örneğin, 19, 3139h olarak gösterilebilir. ‘1’in ASCII kodu31h (49) ve ‘9’un ASCII kodu 39h (57) dir. ASCII kodlanmış sayılar için özel komutlar bulunmaktadır: AAA, AAD, AAM ve AAS.
AAA AAA: ASCII Adjust after Addition AH ve AL register’larındaki iki ASCII kodlanmış sayının toplamı sonucunu düzeltir. AL üzerinde çalışır. AL ve AH’yi değiştirir. AAA’dan sonra AX’e 3030h ilave edelim. Örnek: MOV AX, '01' ; AX = 3031h (‘1’in ASCII kodu) ADD AL, '9' ; AL = 6Ah AAA ; AH = 01h, AL = 00h ADD AX, 3030h ; AX = 3130 (10’un ASCII kodu)
Diğer ASCII Kod operasyonları AAD: ASCII Adjust before Division AAM: ASCII Adjust after Multiplication AAS: ASCII Adjust after Subtraction
Shift ve Rotate Shift ve rotate komutları, binary bit seviyesinde binary sayıları değiştirir. I/O aygıtlarını kontrol eden alt seviye kontrol yazılımlarında sıklıkla kullanılır. Shift/Rotate adedi, ivedi bir değer veya CL register’ındaki değer olabilir. Örnek: SHL AX, 1 SHR BX, CL
Shift Bir register veya hafıza adresindeki veri, sola veya sağa kaydırılır. Basit aritmetik işlemler yapar: 2+n ile çarpım (sola shift) ve 2-n ile bölüm (sağa shift). Mikroişlemci komut setinde 4 adet shift komutu bulunur: İki tane mantıksal; iki tane aritmetik shift
Shift Komutları Mantıksal shift’ler (SHL, SHR), boşta kalan bite 0 değerini verir. Aritmetik shift operasyonları ise Sağa shift’te 0 ilave edilir. Sola shift’te ise, yön biti kopyalanır.
Mantıksal vs. Aritmetik? Mantıksal shift, yönsüz verileri çarpar veya böler. Aritmetik shift, yönlü sayıları çarpar veya böler. Sola shift operasyonu, her shift işlemi için 2 ile çarpar. Sağa shift operasyonu, her shift işlemi için 2 ile böler. 2 kere shift operasyonu, 4 ile çarpar veya böler.
Rotate