Bölüm 3: Sayı Sistemleri
Giriş
Öğrenme Çıktıları
Ondalık, ikili ve onaltılı sayıların değerini basamak ağırlıklarıyla hesaplamak.
Sayıları tabanlar arasında bölme ve gruplama yöntemleriyle dönüştürmek.
2'ye tümleyen gösterimini kullanarak negatif sayıları yazmak, toplamak ve çıkarmak.
BCD, IEEE 754, Gray kodu ve bayt sıralamasının (endian) bellekte nasıl göründüğünü açıklamak.
Sayıların Temsili
Sayıları Temsil Etme Yöntemleri
- Sayısal bir değeri temsil etmenin birçok yolu vardır.
- İnsanlar uzun zaman önce saymak için sopaları kullandılar; sonra sopaların resimlerini çizmeyi ve kâğıda geçirmeyi öğrendiler.
- Bu yüzden 5 sayısı önce
| | | | |şeklinde temsil edildi. - Roma İmparatorluğu'nda
| | |hâlâ üç sopayı temsil ederken, V beş, X on sopayı temsil etmeye başladı. - Bugün kullandığımız konumsal sistemde bir rakamın değeri, bulunduğu basamağa da bağlıdır.
Sayıların Temsili
Romen Rakamları
| Simge | Değer |
|---|---|
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
- Antik Roma İmparatorluğu'nda kullanılan bir sayı sistemidir.
- Toplama ve çıkarma üzerine kuruludur: büyük simgeden sonra gelen küçük simge eklenir (VI = 6), önce gelen çıkarılır (IV = 4).
- Çıkarma yalnızca şu çiftlerde yapılır: IV, IX, XL, XC, CD, CM.
- Sıfır ve basamak kavramları yoktur; bu yüzden toplama, çarpma gibi işlemler çok zahmetlidir.
Sayıların Temsili · Adım adım
Romen Rakamlarını Okumak
MCMLXXXVI
Sayı soldan sağa, değer gruplarına ayrılır.
M = 1000.
CM: C, M'den önce geldiği için çıkarılır → 1000 − 100 = 900.
LXXX = 50 + 10 + 10 + 10 = 80.
VI = 5 + 1 = 6.
Toplam 1000 + 900 + 80 + 6 = 1986.
MMVII
MMVI = 2007 yanlıştır; MMVI = 2006, MMVII = 1000 + 1000 + 7 = 2007.Konumsal Sistemler
Ondalık Sistem
- Bugün çoğu insan saymak için ondalık (10 tabanlı) temsili kullanır.
- Ondalık sistemde 10 rakam vardır: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
- Bu rakamlar herhangi bir değeri temsil edebilir, örneğin 754.
- Bir sayının değeri, her rakamın tabanın, rakamın konumundaki üssüyle çarpımlarının toplamıdır.
Konumsal Sistemler
Konumun Önemi
- Her rakamın konumu önemlidir: 7 sona konursa 547 olur, bambaşka bir değer.
- Herhangi bir sayının sıfırıncı kuvveti 1'dir: x0 = 1. Bu yüzden en sağdaki basamak her tabanda “birler” basamağıdır.
- 00 matematikte belirsiz kabul edilir; sayı sistemleri ve polinomlarda uzlaşım olarak 1 alınır (kaynaktaki ifade bu anlamdadır).
- Romen sisteminden farkı: aynı rakam (7) konumuna göre 700, 70 ya da 7 değerini alır; boş basamak için 0 gerekir.
Konumsal Sistemler
İkili Sistem
- Bilgisayarlar insanlar kadar akıllı değildir; elektronik bir makineyi iki durumlu yapmak kolaydır: açık/kapalı, yüksek/düşük gerilim, 1/0.
- Bu yüzden bilgisayarlar ikili (binary) sistemi kullanır.
- İkili sistemde 2 rakam vardır: 0 ve 1; taban 2'dir.
- Basamak ağırlıkları 2'nin kuvvetleridir: 1, 2, 4, 8, 16, 32, 64, 128 …
Konumsal Sistemler
Bit, Nibble, Byte, Word
| Birim | Bit | İşaretsiz aralık | 8086'da |
|---|---|---|---|
| bit | 1 | 0 … 1 | bayrak |
| nibble | 4 | 0 … 15 (0h … Fh) | bir onaltılı rakam, bir BCD basamağı |
| byte | 8 | 0 … 255 | AL, BL …, DB |
| word | 16 | 0 … 65535 | AX, BX …, DW |
| double word | 32 | 0 … 4 294 967 295 | DX:AX, DD |
İkili sayıdaki her basamağa BIT (binary digit) denir. n bit ile 2n farklı değer gösterilebilir.
Konumsal Sistemler
İkili Sayıları Okumak
- Assembly'de ikili sayılar genellikle b harfiyle sonlandırılır:
101b= 5. - Örnek:
10100101b, ondalık 165'e eşittir.
Konumsal Sistemler · Adım adım
İkiliden Ondalığa: 1111011b
(1111011)2: 7 basamak, ağırlıklar 2⁰ … 2⁶.
Basamak 0: 1 × 2⁰ = 1 → ara toplam 1.
Basamak 1: 1 × 2¹ = 2 → ara toplam 3.
Basamak 2: 0 × 2² = 0 → ara toplam 3.
Basamak 3: 1 × 2³ = 8 → ara toplam 11.
Basamak 4: 1 × 2⁴ = 16 → ara toplam 27.
Basamak 5: 1 × 2⁵ = 32 → ara toplam 59.
Basamak 6: 1 × 2⁶ = 64 → ara toplam 123.
Konumsal Sistemler
Onaltılı Sistem
| 10'luk | 2'lik | 16'lık |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 3 | 0011 | 3 |
| 4 | 0100 | 4 |
| 5 | 0101 | 5 |
| 6 | 0110 | 6 |
| 7 | 0111 | 7 |
| 10'luk | 2'lik | 16'lık |
|---|---|---|
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 12 | 1100 | C |
| 13 | 1101 | D |
| 14 | 1110 | E |
| 15 | 1111 | F |
- Onaltılı (hexadecimal) sistem 16 rakam kullanır: 0–9 ve A, B, C, D, E, F (10–15).
- Bir onaltılı rakam tam olarak 4 bite (bir nibble) karşılık gelir.
- Bu yüzden onaltılı sayılar ikiliye göre kompakt ve okunması kolaydır: 1010 0101b = A5h.
Konumsal Sistemler
Onaltılı Sayıları Yazmak
- Onaltılı sayılar genellikle h ile sonlandırılır:
5Fh= 5×16 + 15 = 95. - Harfle (A…F) başlayan sayıların başına 0 eklenir:
0E120h. Aksi hâlde assemblerE120h'yi bir değişken/etiket adı sanır. - Örnek:
1234h, ondalık 4660'a eşittir.
| Yazım | Anlamı |
|---|---|
MOV AL, 0FFh | AL = 255 ✓ |
MOV AL, FFh | hata: FFh tanımsız bir ad |
MOV AX, 10 | ondalık 10 (= 0Ah) — sonek yoksa ondalıktır |
Konumsal Sistemler · Adım adım
Onaltılıdan Ondalığa: A12Fh
(A12F)16: A = 10, F = 15. Ağırlıklar 16⁰ = 1, 16¹ = 16, 16² = 256, 16³ = 4096.
F × 16⁰ = 15 × 1 = 15.
2 × 16¹ = 2 × 16 = 32 → 47.
1 × 16² = 1 × 256 = 256 → 303.
A × 16³ = 10 × 4096 = 40960 → 41263.
Konumsal Sistemler · Adım adım
İkili ↔ Onaltılı: Dörtlü Gruplama
İkili sayı sağdan başlayarak 4'lü gruplara ayrılır (gerekirse sola 0 eklenir).
1010 = 8 + 2 = 10 → A.
1011 = 8 + 2 + 1 = 11 → B.
0101 = 4 + 1 = 5 → 5.
1100 = 8 + 4 = 12 → C. Sonuç: 0AB5Ch.
- Ters yön de aynı: her onaltılı rakam 4 bite açılır:
3Eh→ 0011 1110b. - Örnek:
1101011b→ 0110 1011 → 6Bh (soldaki gruba 0 eklendi). - Bu yüzden programcılar ikili veriyi hep onaltılı yazar: bir bayt = tam 2 onaltılı rakam.
Konumsal Sistemler
Assembly'de Sayı Gösterimleri
| Yazım | Taban | Değer |
|---|---|---|
MOV AL, 65 | ondalık (sonek yok ya da d) | 65 |
MOV AL, 41h | onaltılı | 65 |
MOV AL, 01000001b | ikili | 65 |
MOV AL, 101o | sekizli (octal, o ya da q) | 65 |
MOV AL, 'A' | ASCII karakter | 65 |
MOV AL, -1 | ondalık, işaretli | FFh |
B0 41. Taban yalnızca insanlar için bir yazım biçimidir; bellekte her şey ikilidir.Taban Dönüşümleri
Onluktan Diğer Tabanlara
- Onluk değer istenen tabana bölünür.
- Her seferinde bölüm saklanır, kalan alınır (kalan bir basamaktır, 0 … taban−1).
- Bölüm sıfır olana kadar bölmeye devam edilir.
- Kalanlar sondan başa (aşağıdan yukarı) yazılınca sonuç elde edilir: ilk kalan en düşük basamaktır.
Örnek: 39'u onaltılıya çevirelim.
39 ÷ 16 = 2, kalan 7 (birler basamağı).
2 ÷ 16 = 0, kalan 2. Bölüm 0 → dur.
Kalanlar aşağıdan yukarı: 27h. Kontrol: 2 × 16 + 7 = 39 ✓
Taban Dönüşümleri · Adım adım
43868 → Onaltılı
43868 sayısı onaltılı sistemde nasıl ifade edilir?
43868 ÷ 16 = 2741, kalan 12 → C.
2741 ÷ 16 = 171, kalan 5.
171 ÷ 16 = 10, kalan 11 → B.
10 ÷ 16 = 0, kalan 10 → A.
Sonuç 0AB5Ch (A ile başladığı için başa 0). Kontrol: 10·4096 + 11·256 + 5·16 + 12 = 43868 ✓
Taban Dönüşümleri · Adım adım
45 → İkili (2'ye Bölme)
Aynı yöntem ikili için de geçerlidir: 45'i 2'ye böl.
45 ÷ 2 = 22, kalan 1.
22 ÷ 2 = 11, kalan 0.
11 ÷ 2 = 5, kalan 1.
5 ÷ 2 = 2, kalan 1.
2 ÷ 2 = 1, kalan 0.
1 ÷ 2 = 0, kalan 1.
Sonuç 101101b. Kontrol: 32 + 8 + 4 + 1 = 45 ✓ Alternatif: büyük sayıyı önce onaltılıya (2Dh) çevirip 4'lü açmak daha hızlıdır.
Taban Dönüşümleri · Etkileşimli
Taban Dönüştürücü
İşaretli Sayılar
İşaretli Sayılar
0FFhgibi bir sayı pozitif mi negatif mi? Bit deseninden kesin söylemek mümkün değil: hem 255 hem −1 olabilir.- 8 bit ile 256 farklı kombinasyon oluşturulabilir (sıfır dahil).
- İlk 128 kombinasyon (0 … 127) pozitif sayıları, sonraki 128 kombinasyon (128 … 255) negatif sayıları temsil eder.
- −5 elde etmek için 5, kombinasyon sayısından (256) çıkarılır: 256 − 5 = 251 = FBh.
- Genel kural (n bit): −x ↔ 2n − x. Bu gösterim 2'ye tümleyen (two's complement) adını alır.
İşaretli Sayılar
Sayı Çemberi
- 4 bitlik tüm desenler bir çember üzerinde: saat yönünde ilerlemek +1 demektir.
- 0111 (7) ile 1000 arasında işaretli yorum +7'den −8'e atlar → işaretli taşma (OF).
- 1111 ile 0000 arasında işaretsiz yorum 15'ten 0'a atlar → elde (CF).
- Negatif sayıların hepsinde en yüksek bit (MSB) 1'dir: MSB işaret biti olarak okunur.
- Toplama ve çıkarma devresi her iki yorum için aynıdır; işlemci yalnızca bayrakları farklı kurar.
İşaretli Sayılar
4 Bitlik Gösterimler
| İkili | İşaretsiz | İşaret-büyüklük | 1'e tümleyen | 2'ye tümleyen |
|---|---|---|---|---|
0000 | 0 | 0 | 0 | 0 |
0001 | 1 | 1 | 1 | 1 |
0010 | 2 | 2 | 2 | 2 |
0011 | 3 | 3 | 3 | 3 |
0100 | 4 | 4 | 4 | 4 |
0101 | 5 | 5 | 5 | 5 |
0110 | 6 | 6 | 6 | 6 |
0111 | 7 | 7 | 7 | 7 |
| İkili | İşaretsiz | İşaret-büyüklük | 1'e tümleyen | 2'ye tümleyen |
|---|---|---|---|---|
1000 | 8 | −0 | −7 | −8 |
1001 | 9 | −1 | −6 | −7 |
1010 | 10 | −2 | −5 | −6 |
1011 | 11 | −3 | −4 | −5 |
1100 | 12 | −4 | −3 | −4 |
1101 | 13 | −5 | −2 | −3 |
1110 | 14 | −6 | −1 | −2 |
1111 | 15 | −7 | −0 | −1 |
İşaretli Sayılar
1'e Tümleyen Yöntemi
- 1's complement: bir sayının negatifini almak için sayının bütün bitleri tersine çevrilir (1 → 0, 0 → 1); bitwise NOT.
- 8 bitlik örnek: 00101101 → 11010010.
- Sorun: iki sıfır vardır (00000000 = +0, 11111111 = −0) ve toplama sonrası elde geri eklenmelidir (end-around carry).
- 8086'da
NOTkomutu 1'e tümleyeni üretir.
Başlangıç.
+45 = 0010 1101b.
Tüm bitler ters çevrilir: 1101 0010b = D2h. 1'e tümleyende bu −45'tir; 2'ye tümleyende −46!
İşaretli Sayılar
2'ye Tümleyen Yöntemi
- Negatif sayıları temsil etmek için kullanılan standart yöntemdir: önce tüm bitler ters çevrilir, sonra 1 eklenir.
- 8086'da
NEGkomutu bunu tek adımda yapar (0 − x). - Kısa yol: sağdan ilk 1'e kadar (o dahil) bitleri aynen yaz, kalanları ters çevir.
Başlangıç.
+45 = 0010 1101b.
Tüm bitler ters çevrilir (bitwise NOT): 1101 0010b.
1 eklenir: 1101 0011b = D3h = 211 = 256 − 45 ✓ Bu, −45'in 8 bitlik gösterimidir.
Kontrol: D3h + 2Dh = 100h → 8 bitte 00h. Bir sayının 2'ye tümleyeninin 2'ye tümleyeni kendisidir.
İşaretli Sayılar
−5 + 5 = 0
- Yöntem matematikteki −5 + 5 = 0 kuralıyla uyumlu olmalıdır.
- 5 ve 251 baytları toplanırsa sonuç 255'i aşar (256).
- Dokuzuncu bit bayta sığmaz ve düşer; kalan 8 bit sıfırdır.
- Yani aynı toplama devresi hem işaretsiz hem işaretli sayılar için doğru sonuç verir.
İşaretli Sayılar
İşaretli Aralıklar
| Genişlik | Kombinasyon | İşaretsiz | İşaretli (2'ye tümleyen) | Negatifler |
|---|---|---|---|---|
| 8 bit | 256 | 0 … 255 | −128 … +127 | 80h … FFh |
| 16 bit | 65536 | 0 … 65535 | −32768 … +32767 | 8000h … FFFFh |
| 32 bit | 4 294 967 296 | 0 … 4 294 967 295 | −2 147 483 648 … +2 147 483 647 | 80000000h … |
- Kombinasyonların üst yarısı kullanıldığında yüksek bit her zaman 1'dir; bu bit sayının işaretini belirlemek için kullanılır (SF bayrağı).
- 16 bit ile 65536 kombinasyon: ilk 32768 (0 … 32767) pozitif, diğer 32768 (32768 … 65535) negatif sayılardır.
- Negatif aralık pozitiften bir fazladır: −128'in pozitif karşılığı 8 bite sığmaz (NEG 80h = 80h, OF = 1).
- İşaret genişletme: 8 bitlik işaretli sayı 16 bite taşınırken MSB sola kopyalanır: FBh (−5) → FFFBh. 8086:
CBW(AL → AX),CWD(AX → DX:AX).
İşaretli Sayılar · Kodu adım adım çalıştır
NEG ve CBW
MOV AL, 5 NEG AL ; AL = 0 - 5 ADD AL, 5 ; -5 + 5 MOV AL, 0FBh ; -5 CBW ; AL → AX işaretli MOV AL, 80h ; -128 NEG AL ; -(-128) = ?
AL = 05h.
NEG: AL = 0 − 5 = FBh (251 = 256 − 5). Sonuç ≠ 0 olduğundan CF = 1; SF = 1.
FBh + 05h = 100h → AL = 00h: CF = 1 (elde düştü), ZF = 1, OF = 0 (işaretli sonuç doğru).
AL = FBh. AH hâlâ 00h → AX = 00FBh = +251 (işaretsiz).
CBW: AL'nin MSB'si (1) AH'ye kopyalanır → AX = FFFBh = −5 (16 bit). Bayraklar değişmez.
AL = 80h = −128 (AH yine FFh).
−(−128) = +128, 8 bite sığmaz: NEG sonucu yine 80h, OF = 1.
İşaretli Sayılar · Etkileşimli
Bit Gezgini
Bitlere tıkla: aynı 8 bitin işaretsiz, işaretli, BCD ve Gray kodu yorumları birlikte görünür.
İkili Aritmetik
İkili Tabanda Toplama
- İki sayının her basamağı için dört durum vardır: 0+0, 0+1, 1+0 ve 1+1.
- En düşük basamaktan başlanarak iki sayının aynı basamakları toplanır.
- Basamak toplamı 0 ya da 1 ise doğrudan yazılır.
- Toplam 2 (10b) ise taşıma (carry) oluşur: basamağa 0 yazılır, 1 bir sonraki basamağa eklenir.
- Önceki eldeyle toplam 3 (11b) olabilir: 1 yazılır, 1 elde.
| a | b | eldegiriş | toplam | eldeçıkış |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
Bu tablo bir tam toplayıcı (full adder) devresinin doğruluk tablosudur; 8 tanesi zincirlenince 8 bitlik toplayıcı olur.
İkili Aritmetik · Adım adım
Toplama: 110001101 + 100001011
110001101b (397) + 100001011b (267). Sağdan sola, sütun sütun toplanır.
Basamak 0: 1 + 1 = 2 → 0 yaz, 1 elde.
Basamak 1: 0 + 1 + 1 (elde) = 2 → 0 yaz, 1 elde.
Basamak 2: 1 + 0 + 1 (elde) = 2 → 0 yaz, 1 elde.
Basamak 3: 1 + 1 + 1 (elde) = 3 → 1 yaz, 1 elde.
Basamak 4: 0 + 0 + 1 (elde) = 1 → 1 yaz.
Basamak 5: 0 + 0 = 0 → 0 yaz.
Basamak 6: 0 + 0 = 0 → 0 yaz.
Basamak 7: 1 + 0 = 1 → 1 yaz.
Basamak 8: 1 + 1 = 2 → 0 yaz, 1 elde.
Basamak 9: 0 + 0 + 1 (elde) = 1 → 1 yaz. Sonuç 1010011000b = 664 ✓ (10. bit, 9 bitlik toplama sığmadı → elde).
İkili Aritmetik · Adım adım
İkili Tabanda Çıkarma
- Çıkarma, tümleyenle toplamaya dönüştürülür: A − B = A + (−B).
- Çıkarılacak sayının bütün bitleri ters çevrilir.
- Tümleyen alınmış sayıya 1 eklenir (2'ye tümleyen).
- Elde edilen sayı ile ilk sayı toplanır; bit genişliğini aşan elde atılır.
- Böylece işlemcide ayrı bir çıkarıcı devreye gerek kalmaz.
İlk sayı 1011 (11), ikinci sayı 0110 (6).
A = 1011.
B = 0110.
B'nin bitleri ters çevrilir: 1001.
1 eklenir: 1010 = −6 (4 bit).
1011 + 1010 = 10101 (5 bit).
4 bite sığmayan soldaki 1 atılır: 0101 = 5 = 11 − 6 ✓
8086'da SUB komutu bu atılan eldeyi tersine çevirerek CF'ye yazar: elde 1 ise borç yok (CF = 0).
İkili Aritmetik
Desteklenen İşlemler
| Op. | Anlam | Örnek → değer |
|---|---|---|
~ | not (tüm bitleri tersler) | ~0Fh → F0h (8 bit) |
* | çarpma | 3*4 → 12 |
/ | bölme (tam sayı) | 17/5 → 3 |
% | mod (kalan) | 17%5 → 2 |
+ | toplama | 40h+2 → 42h |
- | çıkarma (ve tekli −) | -5 → FBh |
<< | sola kaydırma | 1<<4 → 16 |
>> | sağa kaydırma | 80h>>3 → 10h |
& | bit düzeyinde VE | 0F0h&3Ch → 30h |
^ | bit düzeyinde XOR | 0Fh^05h → 0Ah |
| | bit düzeyinde VEYA | 0F0h|0Fh → FFh |
- emu8086 assembler'ının sabit ifadelerde desteklediği işleçlerdir.
- İfade derleme zamanında hesaplanır:
MOV AX, 3*4+1→MOV AX, 13. - İşlemci çalışırken bunları yapmaz; çalışma zamanında karşılıkları
NOT,MUL,DIV,ADD,SUB,SHL,SHR,AND,XOR,ORkomutlarıdır. - Yalnızca sabitlerle çalışır:
MOV AX, BX*2geçersizdir.
Kodlamalar ve Devreler
Sayısal Sistem ve İkili Sinyaller
- Sayısal sistemdeki yazılımlar bir rakam topluluğunu temsil eder; bu rakamlar veri ve komut öbeklerini oluşturur.
- Yazılımı oluşturan veriler ve komutlar, gerçek elektrik devrelerinde gerilim ve akım kullanılarak yaratılır.
- Sayısal bilgisayarlarda yüksek ve düşük olmak üzere iki çeşit sinyal kullanılır: 1 (yüksek), 0 (düşük).
- Gerilim tam 5 V ya da 0 V olmak zorunda değildir; eşik aralıkları vardır (TTL: ≥ 2,0 V → 1, ≤ 0,8 V → 0). Bu tolerans sayısal devreleri gürültüye karşı dayanıklı yapar.
- İkili sinyaller bilgisayarların temel iletişim dilidir; “bit” ikili sayının her bir basamağıdır.
Kodlamalar ve Devreler
Flip-Flop Devreleri
- Sayısal elektronikte kullanılan temel bellek elemanlarıdır: 1 bit saklar.
- Bir bilgiyi bir sonraki saat darbesine kadar saklarlar.
- Girdi ve saat sinyali alarak bir çıktı (Q ve tersi Q′) üretir.
- Saat sinyali belirli bir anı temsil eder; girdi bu saat darbesi sırasında flip-flop'a yüklenir.
- Yazmaçlar (AX, BX …) yan yana konmuş 16 flip-flop'tan oluşur.
Kodlamalar ve Devreler
Flip-Flop Türleri
| Tür | Girişler | Davranış (saat darbesinde) | Karakteristik |
|---|---|---|---|
| SR (Set-Reset) | S, R | S = 1 → Q = 1 (set); R = 1 → Q = 0 (reset); S = R = 0 → değişmez | S = R = 1 yasak |
| D (Data) | D | Tek veri girişini saat sinyaliyle çıkışa yükler: Q ← D | yazmaç/bellek hücresi |
| JK | J, K | J = 1 → set, K = 1 → reset, J = K = 0 → değişmez, J = K = 1 → ters çevir | SR'nin yasak durumu yok |
| T (Toggle) | T | T = 1 iken her darbede çıkışını değiştirir; T = 0 → değişmez | sayaç, frekans bölücü |
Kodlamalar ve Devreler
D Flip-Flop Zamanlaması
- D girişi saat darbeleri arasında istediği kadar değişebilir; çıkışı etkilemez.
- Yükselen kenarda D örneklenir ve bir sonraki kenara kadar Q'da saklanır: 1 bitlik bellek.
- 8086'nın tüm iç işlemleri bu şekilde saat çevrimlerine bölünür (örneğin 5 MHz → 200 ns'lik çevrim).
Kodlamalar ve Devreler
Kayan Nokta: IEEE 754
- Kesirli sayılar için IEEE 754 standardı kullanılır; tek duyarlıklı (single) sayı 32 bittir.
- 32 bit üç gruba ayrılır: işaret (sign, 1 bit), üs (exponent, 8 bit) ve mantissa (fraction, 23 bit).
- İlk bit işaret bitidir: 0 pozitif, 1 negatif.
- Üs 127 kaydırmalı (biased) saklanır: gerçek üs = e − 127.
- Mantissa, normalize sayının kesirli kısmıdır; baştaki 1 yazılmaz (gizli bit): değer = (−1)s × 1,f × 2e−127.
8086 kayan nokta komutu içermez; bu işlemler 8087 matematik yardımcı işlemcisi ya da yazılımla yapılır. 64 bitlik double: 1 + 11 + 52 bit, kaydırma 1023.
Kodlamalar ve Devreler · Adım adım
IEEE 754 Çözümleme
Örnek: 0 01111100 01000000000000000000000 = 3E200000h.
İşaret biti 0 → sayı pozitif: (+1).
Üs 01111100b = 124 → gerçek üs 124 − 127 = −3 → 2−3.
Mantissa 0100…0 = 0×2⁻¹ + 1×2⁻² = 0,25 → gizli bitle 1,25.
Sonuç: (+1) × 2−3 × 1,25 = 1,25 / 8 = 0,15625.
Kodlamalar ve Devreler · Adım adım
IEEE 754 Kodlama: −6,5
−6,5'i 32 bitlik IEEE 754'e çevirelim.
Negatif → işaret biti 1.
6,5 = 110,1b (4 + 2 + 0,5). Normalize: 1,101b × 2².
Üs: 2 + 127 = 129 = 10000001b.
Mantissa: gizli 1 atılır, kalan 101 sağa 0'larla tamamlanır.
Sonuç: 1100 0000 1101 0000 0…0b = C0D00000h.
| Desen | Anlam |
|---|---|
| e = 0, f = 0 | ±0 |
| e = 255, f = 0 | ±∞ (ör. 1/0) |
| e = 255, f ≠ 0 | NaN (sayı değil, ör. 0/0) |
| e = 0, f ≠ 0 | normalize edilmemiş (çok küçük) sayı |
Kodlamalar ve Devreler
BCD: İkili Kodlanmış Ondalık
- BCD (Binary Coded Decimal), her ondalık basamağı dört bit ile temsil eden bir sistemdir.
- Her rakam 0'dan 9'a kadar 4 bitle ifade edilir; 1010 … 1111 desenleri geçersizdir.
- Örnek: 25 →
0010 0101(BCD) — ikili karşılığı ise0001 1001(19h). - Paketli BCD: bir baytta iki basamak (25h). Paketsiz: her baytta bir basamak (02h 05h).
- Kullanım: saat yongaları (RTC), 7 parçalı göstergeler, hesap makineleri, finansal hesaplar.
| Ondalık | BCD |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
Kodlamalar ve Devreler · Adım adım
BCD Toplama ve Düzeltme
BCD 38 ile BCD 45'i toplayalım.
38 → 0011 1000.
45 → 0100 0101.
İkili toplanır: 0111 1101 = 7Dh. Düşük basamak 1101 (13) BCD'de geçersiz.
Geçersiz basamağa (ya da AF = 1 ise) 6 eklenir: 16 − 10 = 6 kullanılmayan desen atlanır.
Sonuç 1000 0011 = 83 ✓. 8086'da bu düzeltmeyi ADD AL, BL ardından DAA yapar.
Düşük nibble'dan elde çıktığında (ör. 29 + 18 = 41h, AF = 1) da 6 eklenir → 47. Yüksek basamak 9'u aşarsa ona da 60h eklenir ve CF = 1 olur.
Kodlamalar ve Devreler
Little Endian ve Big Endian
- Little endian: en küçük anlamlı bayt (LSB) en düşük bellek adresindedir. Intel x86 (8086 dahil) little endian'dır.
- Big endian: en büyük anlamlı bayt (MSB) en düşük adrestedir. PowerPC (çoğunlukla), Motorola 68000 ve ağ iletişimi (“network byte order”) big endian kullanır.
04 03 02 01, big endian düzeni 01 02 03 04'tür.Kodlamalar ve Devreler · Kodu adım adım çalıştır
8086'da Little Endian
MOV AX, 1234h MOV [0200h], AX ; word yaz MOV BL, [0200h] ; düşük adres MOV BH, [0201h] ; yüksek adres MOV CX, [0200h] ; word oku
AX = 1234h: AH = 12h, AL = 34h.
Word 0200h'ye yazılır: [0200h] = 34h (düşük bayt), [0201h] = 12h.
Düşük adresteki bayt okunur: BL = 34h.
Yüksek adresteki bayt: BH = 12h → BX = 1234h.
Word olarak okununca işlemci baytları yeniden birleştirir: CX = 1234h. Sıralama yalnızca bayt bayt bakınca görünür.
Kodlamalar ve Devreler
Gray Kodlaması
| Ondalık | İkili | değişen bit | Gray |
|---|---|---|---|
| 0 | 000 | – | 000 |
| 1 | 001 | 1 | 001 |
| 2 | 010 | 2 | 011 |
| 3 | 011 | 1 | 010 |
| 4 | 100 | 3 | 110 |
| 5 | 101 | 1 | 111 |
| 6 | 110 | 2 | 101 |
| 7 | 111 | 1 | 100 |
- Ardışık sayıların ikili temsilinde yalnızca bir bit değişir.
- İkilide 3'ten 4'e (011 → 100) geçerken üç bit birden değişir; bitler aynı anda değişmezse ara değerler (ör. 111) okunabilir.
- Gray kodunda bu geçiş 010 → 110: tek bit, hatalı ara değer yok.
- Döner kodlayıcılar (encoder), analog-sayısal dönüştürücüler ve Karnaugh haritalarında kullanılır; elektriksel gürültüye karşı dayanıklıdır.
- 3 bitlik dizi: 000, 001, 011, 010, 110, 111, 101, 100.
Kodlamalar ve Devreler · Adım adım
İkiliden Gray Koduna
Dönüşüm formülü: G = B XOR (B >> 1).
B = 0110 (6).
B bir bit sağa kaydırılır: 0011.
Bit bit XOR: 0110 ⊕ 0011 = 0101 → 6'nın Gray kodu.
- Kural: Gray'in en yüksek biti ikiliyle aynıdır; her sonraki bit, ikilideki kendisi ile solundaki bitin XOR'udur.
- 8086 ile tek komutla:
MOV BL, AL/SHR BL, 1/XOR AL, BL. - Geri dönüş: Ben yüksek = Gen yüksek, sonra Bi = Bi+1 XOR Gi.
Özet
Özet
Özet
Alıştırmalar
- MCMXCIV ve MMXXVI sayılarını ondalığa çevirin.
- 11001010b sayısını ondalık ve onaltılıya çevirin.
- 2024 sayısını onaltılı ve ikili yazın.
- −100'ü 8 bitlik 2'ye tümleyen olarak yazın. 16 bitte nasıl görünür?
- 0F0h + 20h işleminin 8 bitlik sonucu, CF ve işaretli yorumu nedir?
- BCD 47 + 36 toplamını düzeltmeyle yapın.
- 0 10000010 01100000000000000000000 IEEE 754 sayısının değeri nedir?
- 5'in 3 bitlik Gray kodu nedir? 0ABCDh, 0200h adresine word olarak yazılırsa [0200h] nedir?
Cevaplar
- 1000 + 900 + 90 + 4 = 1994; 2026.
- 128 + 64 + 8 + 2 = 202 = CAh.
- 7E8h = 0111 1110 1000b.
- 256 − 100 = 156 = 9Ch = 1001 1100b; 16 bitte FF9Ch.
- 110h → 10h, CF = 1; işaretli −16 + 32 = +16 doğru (OF = 0).
- 0100 0111 + 0011 0110 = 0111 1101 (7Dh) → +6 → 83h = BCD 83.
- +1,011b × 2³ = 1011b = 11,0.
- 101 ⊕ 010 = 111; [0200h] = CDh, [0201h] = ABh.
Özet
Kaynaklar
- M. Morris Mano, Michael D. Ciletti, Digital Design, 5. baskı, Pearson, 2013.
- Barry B. Brey, The Intel Microprocessors, 8. baskı, Pearson, 2009 — Bölüm 1: sayı sistemleri.
- IEEE Std 754-2019, IEEE Standard for Floating-Point Arithmetic.
- emu8086 belgeleri: Numbering systems tutorial.
- Mehmet Bodur, Mikroişlemcilere Giriş: Assembler ile Yazılım ve Arayüz.