Bölüm 1: Sayı Sistemleri
Giriş
Öğrenme Çıktıları
Onluk, ikili ve onaltılık 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.
ikiye 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 = 2006, MMVII = 1000 + 1000 + 7 = 2007.Konumsal Sistemler
Onluk Sistem
- Bugün çoğu insan saymak için onluk (10 tabanlı) temsili kullanır.
- Onluk 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.
- 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ık 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, onluk 165'e eşittir.
Konumsal Sistemler · Adım adım
İkiliden Onluğ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ık 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ık (hexadecimal) sistem 16 rakam kullanır: 0–9 ve A, B, C, D, E, F (10–15).
- Bir onaltılık rakam tam olarak 4 bite (bir nibble) karşılık gelir.
- Bu yüzden onaltılık sayılar ikiliye göre kompakt ve okunması kolaydır: 1010 0101b = A5h.
Konumsal Sistemler
Onaltılık Sayıları Yazmak
- Onaltılık 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, onluk 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 | onluk 10 (= 0Ah) — sonek yoksa onluktur |
Konumsal Sistemler · Adım adım
Onaltılıktan Onluğ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ık: 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ık 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ık yazar: bir bayt = tam 2 onaltılık rakam.
Konumsal Sistemler
Assembly'de Sayı Gösterimleri
| Yazım | Taban | Değer |
|---|---|---|
MOV AL, 65 | onluk (sonek yok ya da d) | 65 |
MOV AL, 41h | onaltılık | 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 | onluk, 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ığa ç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ık
43868 sayısı onaltılık 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 · Kodu adım adım çalıştır
Kod İzleme: DIV ile Onaltılık Basamaklar
ORG 100h MOV AX, 2989 ; sayı MOV BX, 16 ; taban MOV SI, 0 ; sayaç bol: MOV DX, 0 ; DX:AX DIV BX ; bölüm, kalan MOV kalan[SI], DL INC SI CMP AX, 0 ; bölüm 0 mı? JNE bol RET kalan DB 4 DUP(0)
AX = 2989 = 0BADh. Sayının onaltılık basamakları tekrar tekrar 16'ya bölünerek bulunacak.
BX = 16: hedef taban. BX = 2 ya da 8 olsaydı aynı kod o tabanın basamaklarını üretirdi.
SI = 0: sıradaki kalanın kalan dizisindeki yeri.
DX = 0. 16 bitlik DIV BX 32 bitlik DX:AX'i böler; DX sıfırlanmasaydı bölünen yanlış olurdu.
2989 ÷ 16 = 186, kalan 13: AX = 00BAh (bölüm), DX = 000Dh (kalan). İlk kalan en düşük basamaktır: D.
kalan[0] ← DL = 0Dh.
SI = 1; bölüm 186 ≠ 0 → ZF = 0, JNE bol'a döner.
Tur 2: DX = 0 yapıldı, 186 ÷ 16 = 11, kalan 10 → A.
kalan[1] ← 0Ah. Bölüm 11 ≠ 0: döngü sürer.
Tur 3: 11 ÷ 16 = 0, kalan 11 → B.
kalan[2] ← 0Bh.
SI = 3. Bölüm 0 → ZF = 1, JNE atlamaz: döngü biter, 3 basamak bulundu.
Bellekte kalanlar 0D 0A 0B; sondan başa okununca 0BADh. Kontrol: 11·256 + 10·16 + 13 = 2989 ✓
Aynı döngü her tabanda çalışır: kalan her zaman 0 … taban−1 arasıdır ve bir basamaktır.
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ığa (2Dh) çevirip 4'lü açmak daha hızlıdır.
Taban Dönüşümleri · Kodu adım adım çalıştır
Kod İzleme: Kalanlar CF'den Gelir
ORG 100h MOV AL, 45 ; bölünen MOV CX, 8 ; 8 bit bit: SHR AL, 1 ; kalan → CF RCR BL, 1 ; CF → BL LOOP bit RET
AL = 45 = 0010 1101b. Bir bit sağa kaydırmak sayıyı 2'ye böler; dışarı düşen bit bölmenin kalanıdır.
CX = 8: 8 bitin her biri için bir tur.
SHR AL, 1: 45 ÷ 2 = 22 (AL = 16h); düşen bit, yani kalan 1 → CF = 1.
RCR BL, 1: CF, BL'ye soldan (bit 7) girer; kalan saklandı.
LOOP: CX = 7 ≠ 0 → bit etiketine döner.
Tur 2 (özet): 22 ÷ 2 = 11, kalan 0. Önceki kalanlar BL'de bir sağa kaydı; CX = 6.
Tur 3 (özet): 11 ÷ 2 = 5, kalan 1. Önceki kalanlar BL'de bir sağa kaydı; CX = 5.
Tur 4 (özet): 5 ÷ 2 = 2, kalan 1. Önceki kalanlar BL'de bir sağa kaydı; CX = 4.
Tur 5 (özet): 2 ÷ 2 = 1, kalan 0. Önceki kalanlar BL'de bir sağa kaydı; CX = 3.
Tur 6 (özet): 1 ÷ 2 = 0, kalan 1. Önceki kalanlar BL'de bir sağa kaydı; CX = 2.
Tur 7 (özet): 0 ÷ 2 = 0, kalan 0. Önceki kalanlar BL'de bir sağa kaydı; CX = 1. Baştaki sıfırlar.
Tur 8 (özet): 0 ÷ 2 = 0, kalan 0. Önceki kalanlar BL'de bir sağa kaydı; CX = 0. Baştaki sıfırlar.
İlk kalan BL'nin bit 0'ına, son kalan bit 7'sine ulaştı: BL = 0010 1101b = 2Dh = 45. Kalanlar sondan başa okununca ikili gösterim çıkar.
2'nin kuvvetine bölmek için kaydırma yeter: SHR bölümü, CF kalanı verir. Bu yüzden ikili basamaklar 2'ye bölme kalanlarıdır.
Taban Dönüşümleri · Adım adım
Kesirli Kısım: 2 ile Çarpma
- Kesirli kısım 2 ile çarpılır; çarpımın tam kısmı (0 ya da 1) bir bit olur.
- Kalan kesirle devam edilir; kesir 0 olunca ya da istenen bit sayısına ulaşınca durulur.
- Tamsayı ve kesir ayrı çevrilip birleştirilir: 25,625 = 11001b + 0,101b = 11001,101b.
Örnek: 0,625 → ikili. Kesirli kısım tekrar tekrar 2 ile çarpılır.
0,625 × 2 = 1,25: tam kısım 1 → ilk kesir biti (2−1). Kesir 0,25 ile devam.
0,25 × 2 = 0,5: tam kısım 0 → 2−2 biti.
0,5 × 2 = 1,0: tam kısım 1, kalan kesir 0 → dur.
Sonuç 0,101b. Kontrol: 1/2 + 1/8 = 0,5 + 0,125 = 0,625 ✓ Bitler yukarıdan aşağı okunur (bölme yönteminin tersi).
Taban Dönüşümleri · Adım adım
0,1 → İkili: Tekrar Eden Kesir
0,1 → ikili: aynı yöntem.
0,1 × 2 = 0,2 → 0.
0,2 × 2 = 0,4 → 0.
0,4 × 2 = 0,8 → 0.
0,8 × 2 = 1,6 → 1, kesir 0,6.
0,6 × 2 = 1,2 → 1, kesir 0,2: bu kesir daha önce (2. satırda) görüldü!
0,2 yeniden çarpılıyor: 2.–5. satırlar sonsuza kadar tekrar eder.
Sonuç 0,1 = 0,0 0011 0011 0011…b: ikili tabanda sonlu değildir. 8 kesir biti ile 0,00011001b = 0,09765625 saklanır.
Payda 2'nin kuvveti olmayan kesirler (0,1 = 1/10) ikilide tam yazılamaz; bit sayısı sınırlı olduğu için yuvarlanır. IEEE 754'te de 0,1 yaklaşık saklanır: birçok dilde 0,1 + 0,2 ≠ 0,3 çıkmasının nedeni budur.
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 ikiye 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 | birler tümleyeni | ikiye 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 | birler tümleyeni | ikiye 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
Birler Tümleyeni 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 birler tümleyenini üretir.
Başlangıç.
+45 = 0010 1101b.
Tüm bitler ters çevrilir: 1101 0010b = D2h. birler tümleyeninde bu −45'tir; ikiye tümleyende −46!
İşaretli Sayılar
İkiye 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) bitler aynen kalır, soldaki bitlerin hepsi ters çevrilir.
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 ikiye tümleyeninin ikiye tümleyeni kendisidir.
İşaretli Sayılar · Kodu adım adım çalıştır
Kod İzleme: NOT + 1 ile NEG
ORG 100h MOV AL, 45 ; +45 MOV BL, AL NOT BL ; 1'e tümleyen INC BL ; + 1 NEG AL ; tek komutla CMP AL, BL ; aynı mı? ADD AL, 45 ; -45 + 45 MOV AX, 45 NEG AX ; 16 bitte -45 RET
AL = +45 = 0010 1101b (2Dh).
BL = AL: aynı değerin kopyası; tümleyen BL üzerinde iki adımda alınacak.
NOT BL: bütün bitler ters → 1101 0010b = D2h (birler tümleyeni). NOT bayrakları değiştirmez.
INC BL: + 1 → 1101 0011b = D3h. İşaretsiz 211 = 256 − 45; işaretli yorum −45.
NEG AL (0 − AL) aynı sonucu tek komutta verir: AL = D3h. İşlenen ≠ 0 → CF = 1.
CMP AL, BL: D3h − D3h = 0 → ZF = 1. İki yol aynı bit desenini üretti.
ADD AL, 45: D3h + 2Dh = 100h. 9. bit düşer (CF = 1), AL = 00h, ZF = 1: −45 + 45 = 0 ✓
AX = 45 = 002Dh: aynı sayı 16 bitte.
NEG AX: FFD3h = 65536 − 45. Düşük bayt yine D3h; üst bayt FFh, MSB = 1 → negatif (SF = 1).
−x = NOT x + 1 = 2n − x. NEG bunu tek komutta yapar; sonuç her genişlikte (8, 16 bit) aynı kuralla bulunur.
İş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 (ikiye 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 · Adım adım
Sabit Noktalı İşaretli Kesirler
8 bitin son 3'ü kesir olsun: Q5.3 biçimi (işaret dahil 5 tamsayı + 3 kesir biti). Örnek: −6,75.
Basamak ağırlıkları: en soldaki bit −16 (işaret biti), virgülden sonra ½, ¼, ⅛. Aralık −16 … +15,875, adım 1/8 = 0,125.
+6,75 = 4 + 2 + ½ + ¼ → 00110,110.
ikiye tümleyen (tersle + 1; virgül yok sayılır): 00110110 → 11001001 + 1 = 11001,010.
Kontrol: işaret biti −16 değerlidir: −16 + 8 + 1 + 0,25 = −6,75 ✓
Kısa yol: sayıyı 23 = 8 ile çarp, tamsayı gibi ikiye tümleyen al: −54 → CAh, sonra virgülü 3 bit sola koy.
İşaretli Sayılar · Etkileşimli
Bit Gezgini
Bir bit tıklanınca değeri tersine döner; 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 elde (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 (ikiye 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 ödünç yok (CF = 0).
İkili Aritmetik · Adım adım
Onaltılık Toplama: 9A7Ch + 5B96h
Onaltılık toplama: sağdan sola basamak basamak. Basamak toplamı 15'i aşarsa 16 çıkarılır, sola 1 elde verilir.
C + 6 = 18 ≥ 16 → yaz 2, elde 1.
7 + 9 + 1 = 17 → yaz 1, elde 1.
A + B + 1 = 22 → yaz 6, elde 1.
9 + 5 + 1 = 15 → yaz F, elde yok.
Sonuç F612h. 8086'da ADD AX, BX aynı sonucu verir; son basamaktan elde çıkmadığı için CF = 0.
Basamak değerleri onluk düşünülür (A = 10 … F = 15). Toplam 16 veya fazlaysa basamağa toplam − 16 yazılır.
İkili Aritmetik · Adım adım
Onaltılık Çıkarma: 9A7Ch − 5B96h
Onaltılık çıkarma: üstteki basamak yetmezse soldaki basamaktan 1 ödünç alınır; o basamağa 16 eklenir.
C − 6 = 6.
7 < 9 → soldan ödünç: 7 + 16 − 9 = 14 → E; soldaki A, 9 olur.
9 < B → yine ödünç: 9 + 16 − 11 = 14 → E; soldaki 9, 8 olur.
8 − 5 = 3.
Sonuç 3EE6h. En soldan ödünç gerekmediği için 8086'da SUB AX, BX sonrası CF = 0.
“−1” işaretleri ödünç veren basamakları gösterir. Aynı işlem tümleyenle toplamaya da çevrilebilir.
İkili Aritmetik · Adım adım
15'e ve 16'ya Tümleyen
5B96h'nin 15'e tümleyeni: her basamak F'den çıkarılır (F−5, F−B, F−9, F−6) → A469h. İkilide bu NOT işlemidir.
16'ya tümleyen = 15'e tümleyen + 1 = A46Ah. Bu, 4 basamakta −5B96h'nin gösterimidir (NEG).
9A7Ch − 5B96h = 9A7Ch + A46Ah = 13EE6h. 4 basamağı aşan 1 atılır: 3EE6h, doğrudan çıkarmayla aynı sonuç.
Ters yön: 5B96h − 9A7Ch = 5B96h + 6584h (9A7Ch'nin 16'ya tümleyeni) = C11Ah. Taşan basamak yok → sonuç negatiftir.
Büyüklüğü bulmak için tekrar 16'ya tümleyen alınır: C11Ah → 3EE6h, yani sonuç −3EE6h (−16102).
SUB AX, BX (AX = 5B96h, BX = 9A7Ch) doğrudan C11Ah verir ve ödünç olduğu için CF = 1; C11Ah işaretli yorumda −16102'dir.İkili Aritmetik
İşaretli Taşma Kuralı
| İşlem | İşaretler | Örnek (8 bit) | İşaretli yorum | OF |
|---|---|---|---|---|
| A + B | + ile + | 50h + 40h = 90h | 80 + 64 → −112 ✗ | 1 |
| A + B | − ile − | 9Ch + CEh = 6Ah | −100 + (−50) → +106 ✗ | 1 |
| A + B | farklı | 64h + CEh = 32h | 100 + (−50) = 50 ✓ | 0 (asla) |
| A − B | + eksi − | 64h − CEh = 96h | 100 − (−50) → −106 ✗ | 1 |
| A − B | − eksi + | 9Ch − 32h = 6Ah | −100 − 50 → +106 ✗ | 1 |
| A − B | aynı | 9Ch − CEh = CEh | −100 − (−50) = −50 ✓ | 0 (asla) |
- Taşma yalnızca aynı işaretli iki sayı toplanırken ya da farklı işaretli iki sayı çıkarılırken olabilir; belirtisi, sonucun işaretinin beklenenin tersi çıkmasıdır.
- Donanım kuralı: işaret bitine giren elde ile işaret bitinden çıkan elde farklıysa OF = 1. CF işaretli yorumda anlamsızdır (3. satırda CF = 1 ama sonuç doğru).
- Genişlikleri farklı işaretli sayılar toplanmadan önce kısa olan işaretle genişletilir: FBh (−5) + 0100h → FFFBh + 0100h = 00FBh = 251 ✓; sıfırla genişletilse 01FBh = 507 ✗.
İ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 turlarına bölünür (örneğin 5 MHz → 200 ns'lik tur).
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 Kodlu Onluk
- BCD (Binary Coded Decimal), her onluk 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.
| Onluk | 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
Gray Kodlaması
| Onluk | İ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.
Kodlamalar ve Devreler · Kodu adım adım çalıştır
Kod İzleme: SHR ve XOR ile Gray Kodu
ORG 100h MOV AL, 1011b ; 11 MOV BL, AL SHR BL, 1 ; B >> 1 XOR BL, AL ; G MOV AL, 1100b ; 12 MOV BH, AL SHR BH, 1 XOR BH, AL ; G RET
AL = 1011b = 11. Gray kodu formülü: G = B xor (B >> 1).
BL = AL: kaydırma kopya üzerinde yapılacak, B (AL) korunur.
SHR BL, 1: 0101b. En sağdaki bit düşer (CF = 1), sola 0 girer.
XOR BL, AL: 1011 xor 0101 = 1110b: 11'in Gray kodu. En yüksek bit ikiliyle aynı kaldı.
AL = 1100b = 12, bir sonraki sayı.
BH = AL.
SHR BH, 1: 0110b.
XOR → 1010b. 11 → 12 geçişinde ikilide 3 bit değişir (1011 → 1100); Gray kodunda yalnız 1 bit (1110 → 1010).
Özet
Özet
Özet
Alıştırmalar
- MCMXCIV ve MMXXVI sayılarını onluğa çevirin.
- 11001010b sayısını onluk ve onaltılığa çevirin.
- 2024 sayısını onaltılık ve ikili yazın.
- −100'ü 8 bitlik ikiye 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 sözcük 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
Alıştırmalar (2)
- 0,375 ve 0,2 sayılarını ikiliye çevirin (0,2 için 8 kesir biti).
- −3,625 sayısını 8 bitlik Q5.3 biçiminde (ikili ve onaltılık) yazın.
- 7C5Eh + 3BA9h toplamını; 3BA9h − 7C5Eh farkını 16'ya tümleyenle bulun.
- 8 bitte 70h + 30h, 90h − 20h ve 90h − F0h işlemlerinin sonucu ve OF değeri nedir?
Cevaplar
- 0,375 = 0,011b (0,75 → 0; 1,5 → 1; 1,0 → 1). 0,2 = 0,0011 0011…b → 0,00110011b.
- 3,625 × 8 = 29 → −29 = 256 − 29 = E3h = 11100,011b. Kontrol: −16 + 8 + 4 + 0,25 + 0,125 = −3,625.
- B807h. 7C5Eh'nin 16'ya tümleyeni 83A2h; 3BA9h + 83A2h = BF4Bh, taşan yok → −(10000h − BF4Bh) = −40B5h.
- A0h, OF = 1 (112 + 48 = 160); 70h, OF = 1 (−112 − 32 = −144); A0h, OF = 0 (−112 − (−16) = −96: aynı işaretliler çıkarıldı).
Ö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, EMO, 2014.
- Şadi Çağatay Öztürk, Oğuz Ergin, Intel 8086 ile Mikroişlemci Programlamaya Giriş, 2009.