Bölüm 3: Sayı Sistemleri

Mikroişlemciler
Romen rakamlarıOndalık, ikili, onaltılıTaban dönüşümleriİşaretli sayılar1'e ve 2'ye tümleyenİkili toplama/çıkarmaIEEE 754 kayan noktaFlip-flopBCDLittle/Big EndianGray kodu
Sercan KÜLCÜ · Giresun Üniversitesi · Elektrik-Elektronik Mühendisliği

Giriş

Öğrenme Çıktıları

Konumsal sistemler

Ondalık, ikili ve onaltılı sayıların değerini basamak ağırlıklarıyla hesaplamak.

Dönüşüm

Sayıları tabanlar arasında bölme ve gruplama yöntemleriyle dönüştürmek.

İşaretli sayılar

2'ye tümleyen gösterimini kullanarak negatif sayıları yazmak, toplamak ve çıkarmak.

Kodlamalar

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.
5 sopaIII = 3VV = 5XX = 10754konumsal: 7·100 + 5·10 + 4

Sayıların Temsili

Romen Rakamları

SimgeDeğer
I1
V5
X10
L50
C100
D500
M1000
  • 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

MCMLXXXVI

Sayı soldan sağa, değer gruplarına ayrılır.

M1000CMLXXXVI

M = 1000.

M1000+CM900LXXXVI

CM: C, M'den önce geldiği için çıkarılır → 1000 − 100 = 900.

M1000+CM900+LXXX80VI

LXXX = 50 + 10 + 10 + 10 = 80.

M1000+CM900+LXXX80+VI6

VI = 5 + 1 = 6.

M1000+CM900+LXXX80+VI6= 1986

Toplam 1000 + 900 + 80 + 6 = 1986.

MMVII

M1000+M1000+VII7= 2007
Düzeltme: Kaynaktaki 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.
710²700510¹50410⁰4700 + 50 + 4 = 754
Genel formül: dn−1…d1d0 = Σ di × bi, burada b taban, i basamağın konumudur (sağdan, 0'dan başlar).

Konumsal Sistemler

Konumun Önemi

710²700510¹50410⁰4754510²500410¹40710⁰7547
  • 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 …
101100105 V0 Vyüksek = 1düşük = 0

Konumsal Sistemler

Bit, Nibble, Byte, Word

00010111000101110001011100010111bitnibble (4 bit)byte (8 bit)word (16 bit)double word (32 bit)yüksek bit (MSB) →← düşük bit (LSB)
BirimBitİşaretsiz aralık8086'da
bit10 … 1bayrak
nibble40 … 15 (0h … Fh)bir onaltılı rakam, bir BCD basamağı
byte80 … 255AL, BL …, DB
word160 … 65535AX, BX …, DW
double word320 … 4 294 967 295DX: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.
12⁷12802⁶012⁵3202⁴002³012²402¹012⁰1128 + 32 + 4 + 1 = 165
Kısa yol: yalnızca 1 olan basamakların ağırlıklarını topla. 8 bitlik ağırlıklar: 128 · 64 · 32 · 16 · 8 · 4 · 2 · 1.

Konumsal Sistemler · Adım adım

İkiliden Ondalığa: 1111011b

12⁶12⁵12⁴12³02²12¹12⁰

(1111011)2: 7 basamak, ağırlıklar 2⁰ … 2⁶.

12⁶6412⁵3212⁴1612³802²012¹212⁰1toplam = 1

Basamak 0: 1 × 2⁰ = 1 → ara toplam 1.

12⁶6412⁵3212⁴1612³802²012¹212⁰1toplam = 3

Basamak 1: 1 × 2¹ = 2 → ara toplam 3.

12⁶6412⁵3212⁴1612³802²012¹212⁰1toplam = 3

Basamak 2: 0 × 2² = 0 → ara toplam 3.

12⁶6412⁵3212⁴1612³802²012¹212⁰1toplam = 11

Basamak 3: 1 × 2³ = 8 → ara toplam 11.

12⁶6412⁵3212⁴1612³802²012¹212⁰1toplam = 27

Basamak 4: 1 × 2⁴ = 16 → ara toplam 27.

12⁶6412⁵3212⁴1612³802²012¹212⁰1toplam = 59

Basamak 5: 1 × 2⁵ = 32 → ara toplam 59.

12⁶6412⁵3212⁴1612³802²012¹212⁰1toplam = 123

Basamak 6: 1 × 2⁶ = 64 → ara toplam 123.

(1111011)2 = 1×2⁰ + 1×2¹ + 0×2² + 1×2³ + 1×2⁴ + 1×2⁵ + 1×2⁶ = 1 + 2 + 0 + 8 + 16 + 32 + 64 = 123

Konumsal Sistemler

Onaltılı Sistem

10'luk2'lik16'lık
000000
100011
200102
300113
401004
501015
601106
701117
10'luk2'lik16'lık
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F
  • 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 assembler E120h'yi bir değişken/etiket adı sanır.
  • Örnek: 1234h, ondalık 4660'a eşittir.
116³4096216²512316¹48416⁰44096 + 512 + 48 + 4 = 4660
YazımAnlamı
MOV AL, 0FFhAL = 255 ✓
MOV AL, FFhhata: FFh tanımsız bir ad
MOV AX, 10ondalık 10 (= 0Ah) — sonek yoksa ondalıktır

Konumsal Sistemler · Adım adım

Onaltılıdan Ondalığa: A12Fh

A16³116²216¹F16⁰

(A12F)16: A = 10, F = 15. Ağırlıklar 16⁰ = 1, 16¹ = 16, 16² = 256, 16³ = 4096.

A16³40960116²256216¹32F16⁰15toplam = 15

F × 16⁰ = 15 × 1 = 15.

A16³40960116²256216¹32F16⁰15toplam = 47

2 × 16¹ = 2 × 16 = 32 → 47.

A16³40960116²256216¹32F16⁰15toplam = 303

1 × 16² = 1 × 256 = 256 → 303.

A16³40960116²256216¹32F16⁰15toplam = 41263

A × 16³ = 10 × 4096 = 40960 → 41263.

(A12F)16 = 15 + 32 + 256 + 40960 = 41263

Konumsal Sistemler · Adım adım

İkili ↔ Onaltılı: Dörtlü Gruplama

1010101101011100

İkili sayı sağdan başlayarak 4'lü gruplara ayrılır (gerekirse sola 0 eklenir).

1010101101011100A

1010 = 8 + 2 = 10 → A.

1010101101011100AB

1011 = 8 + 2 + 1 = 11 → B.

1010101101011100AB5

0101 = 4 + 1 = 5 → 5.

1010101101011100AB5C

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ımTabanDeğer
MOV AL, 65ondalık (sonek yok ya da d)65
MOV AL, 41honaltılı65
MOV AL, 01000001bikili65
MOV AL, 101osekizli (octal, o ya da q)65
MOV AL, 'A'ASCII karakter65
MOV AL, -1ondalık, işaretliFFh
Hepsi aynı makine kodunu üretir: 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= 2kalan7

39 ÷ 16 = 2, kalan 7 (birler basamağı).

39 ÷ 16= 2kalan72 ÷ 16= 0kalan2

2 ÷ 16 = 0, kalan 2. Bölüm 0 → dur.

39 ÷ 16= 2kalan72 ÷ 16= 0kalan2aşağıdan yukarı oku27h

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= 2741kalan12=C

43868 ÷ 16 = 2741, kalan 12 → C.

43868 ÷ 16= 2741kalan12=C2741 ÷ 16= 171kalan5

2741 ÷ 16 = 171, kalan 5.

43868 ÷ 16= 2741kalan12=C2741 ÷ 16= 171kalan5171 ÷ 16= 10kalan11=B

171 ÷ 16 = 10, kalan 11 → B.

43868 ÷ 16= 2741kalan12=C2741 ÷ 16= 171kalan5171 ÷ 16= 10kalan11=B10 ÷ 16= 0kalan10=A

10 ÷ 16 = 0, kalan 10 → A.

43868 ÷ 16= 2741kalan12=C2741 ÷ 16= 171kalan5171 ÷ 16= 10kalan11=B10 ÷ 16= 0kalan10=Aaşağıdan yukarı oku0AB5Ch

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= 22kalan1

45 ÷ 2 = 22, kalan 1.

45 ÷ 2= 22kalan122 ÷ 2= 11kalan0

22 ÷ 2 = 11, kalan 0.

45 ÷ 2= 22kalan122 ÷ 2= 11kalan011 ÷ 2= 5kalan1

11 ÷ 2 = 5, kalan 1.

45 ÷ 2= 22kalan122 ÷ 2= 11kalan011 ÷ 2= 5kalan15 ÷ 2= 2kalan1

5 ÷ 2 = 2, kalan 1.

45 ÷ 2= 22kalan122 ÷ 2= 11kalan011 ÷ 2= 5kalan15 ÷ 2= 2kalan12 ÷ 2= 1kalan0

2 ÷ 2 = 1, kalan 0.

45 ÷ 2= 22kalan122 ÷ 2= 11kalan011 ÷ 2= 5kalan15 ÷ 2= 2kalan12 ÷ 2= 1kalan01 ÷ 2= 0kalan1

1 ÷ 2 = 0, kalan 1.

45 ÷ 2= 22kalan122 ÷ 2= 11kalan011 ÷ 2= 5kalan15 ÷ 2= 2kalan12 ÷ 2= 1kalan01 ÷ 2= 0kalan1aşağıdan yukarı oku101101b

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

  • 0FFh gibi 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.
Düzeltme: Kaynakta “128..256” yazıyor; 8 bitte en büyük kombinasyon 255'tir (0 … 255 = 256 değer). 16 bitte de negatif aralık 32768 … 65535'tir.

İşaretli Sayılar

Sayı Çemberi

000000110001220010330011440100550101660110770111-881000-791001-6101010-5111011-4121100-3131101-2141110-11511114 bitiç: işaretsizdaire: işaretli
  • 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ük1'e tümleyen2'ye tümleyen
00000000
00011111
00102222
00113333
01004444
01015555
01106666
01117777
İkiliİşaretsizİşaret-büyüklük1'e tümleyen2'ye tümleyen
10008−0−7−8
10019−1−6−7
101010−2−5−6
101111−3−4−5
110012−4−3−4
110113−5−2−3
111014−6−1−2
111115−7−0−1
Kaynak tablodaki ortadaki sütun aslında işaret-büyüklük gösterimidir (1000 = −0, 1111 = −7). 8086 ve tüm modern işlemciler 2'ye tümleyen kullanır: tek bir sıfır vardır ve aralık −8 … +7'dir.

İş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 NOT komutu 1'e tümleyeni üretir.

Başlangıç.

+45 =001011012Dh

+45 = 0010 1101b.

+45 =001011012DhNOT →11010010D2h (−45, 1'e t.)

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 NEG komutu 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 =001011012Dh

+45 = 0010 1101b.

+45 =001011012DhNOT →11010010D2h

Tüm bitler ters çevrilir (bitwise NOT): 1101 0010b.

+45 =001011012DhNOT →11010010D2h+ 1 →11010011D3h = −45

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.
11111011−5 ya da 251+0000010151000000000bu bit düşer (bayta sığmaz) → CF = 18 bitlik sonuç = 0

İşaretli Sayılar

İşaretli Aralıklar

GenişlikKombinasyonİşaretsizİşaretli (2'ye tümleyen)Negatifler
8 bit2560 … 255−128 … +12780h … FFh
16 bit655360 … 65535−32768 … +327678000h … FFFFh
32 bit4 294 967 2960 … 4 294 967 295−2 147 483 648 … +2 147 483 64780000000h …
  • 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.
abeldegiriştoplameldeçıkış
00000
01010
10010
11001
11111

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

elde397+ 267110110110000001011

110001101b (397) + 100001011b (267). Sağdan sola, sütun sütun toplanır.

elde397+ 2671100110110000001011

Basamak 0: 1 + 1 = 2 → 0 yaz, 1 elde.

elde397+ 267110011010110000001011

Basamak 1: 0 + 1 + 1 (elde) = 2 → 0 yaz, 1 elde.

elde397+ 26711001101010110000001011

Basamak 2: 1 + 0 + 1 (elde) = 2 → 0 yaz, 1 elde.

elde397+ 2671100110101011110000001011

Basamak 3: 1 + 1 + 1 (elde) = 3 → 1 yaz, 1 elde.

elde397+ 267110011010101111001100001011

Basamak 4: 0 + 0 + 1 (elde) = 1 → 1 yaz.

elde397+ 2671100110101011110011000001011

Basamak 5: 0 + 0 = 0 → 0 yaz.

elde397+ 26711001101010111100110000001011

Basamak 6: 0 + 0 = 0 → 0 yaz.

elde397+ 267110011010101111001100000010111

Basamak 7: 1 + 0 = 1 → 1 yaz.

elde397+ 2671100110101011110011000000101110

Basamak 8: 1 + 1 = 2 → 0 yaz, 1 elde.

elde397+ 267110011010101111001100000010111011= 664

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 =101111

A = 1011.

A =101111B =01106

B = 0110.

A =101111B =01106NOT B =10011'e tümleyen

B'nin bitleri ters çevrilir: 1001.

A =101111B =01106NOT B =10011'e tümleyen+1 →1010−B (2'ye t.)

1 eklenir: 1010 = −6 (4 bit).

A =101111B =01106NOT B =10011'e tümleyen+1 →1010−B (2'ye t.)A + (−B) =101015 bit: soldaki elde atılır

1011 + 1010 = 10101 (5 bit).

A =101111B =01106NOT B =10011'e tümleyen+1 →1010−B (2'ye t.)A + (−B) =101015 bit: soldaki elde atılırsonuç =01015 ✓

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)
*çarpma3*4 → 12
/bölme (tam sayı)17/5 → 3
%mod (kalan)17%5 → 2
+toplama40h+2 → 42h
-çıkarma (ve tekli −)-5 → FBh
<<sola kaydırma1<<4 → 16
>>sağa kaydırma80h>>3 → 10h
&bit düzeyinde VE0F0h&3Ch → 30h
^bit düzeyinde XOR0Fh^05h → 0Ah
|bit düzeyinde VEYA0F0h|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, OR komutlarıdır.
  • Yalnızca sabitlerle çalışır: MOV AX, BX*2 geç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.
101100105 V0 Vyüksek = 1düşük = 0

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.
RSClkQQ′VEVEVEYA-DEĞİLVEYA-DEĞİL

Kodlamalar ve Devreler

Flip-Flop Türleri

TürGirişlerDavranış (saat darbesinde)Karakteristik
SR (Set-Reset)S, RS = 1 → Q = 1 (set); R = 1 → Q = 0 (reset); S = R = 0 → değişmezS = R = 1 yasak
D (Data)DTek veri girişini saat sinyaliyle çıkışa yükler: Q ← Dyazmaç/bellek hücresi
JKJ, KJ = 1 → set, K = 1 → reset, J = K = 0 → değişmez, J = K = 1 → ters çevirSR'nin yasak durumu yok
T (Toggle)TT = 1 iken her darbede çıkışını değiştirir; T = 0 → değişmezsayaç, frekans bölücü
Düzeltme: Kaynakta JK için “set, reset ve sıfırlama özellikleri” deniyor; reset ile sıfırlama aynı şeydir. JK'yı esnek yapan üçüncü özellik J = K = 1 iken tersleme (toggle) yapmasıdır.

Kodlamalar ve Devreler

D Flip-Flop Zamanlaması

ClkDQQ, yalnızca saatin yükselen kenarında (kesikli çizgiler) D'nin o anki değerini alır
  • 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.
00111110001000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

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

00111110001000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

Örnek: 0 01111100 01000000000000000000000 = 3E200000h.

00111110001000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

İşaret biti 0 → sayı pozitif: (+1).

00111110001000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

Üs 01111100b = 124 → gerçek üs 124 − 127 = −3 → 2−3.

00111110001000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

Mantissa 0100…0 = 0×2⁻¹ + 1×2⁻² = 0,25 → gizli bitle 1,25.

00111110001000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

Sonuç: (+1) × 2−3 × 1,25 = 1,25 / 8 = 0,15625.

Kaynaktaki sonuç “(+1) × (2−3) × 1,25” doğrudur; ondalık değeri 0,15625'tir.

Kodlamalar ve Devreler · Adım adım

IEEE 754 Kodlama: −6,5

00000000000000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

−6,5'i 32 bitlik IEEE 754'e çevirelim.

10000000000000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

Negatif → işaret biti 1.

10000000000000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

6,5 = 110,1b (4 + 2 + 0,5). Normalize: 1,101b × 2².

11000000100000000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

Üs: 2 + 127 = 129 = 10000001b.

11000000110100000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

Mantissa: gizli 1 atılır, kalan 101 sağa 0'larla tamamlanır.

11000000110100000000000000000000işaretüs (8 bit)kesir / mantissa (23 bit)313023220

Sonuç: 1100 0000 1101 0000 0…0b = C0D00000h.

DesenAnlam
e = 0, f = 0±0
e = 255, f = 0±∞ (ör. 1/0)
e = 255, f ≠ 0NaN (sayı değil, ör. 0/0)
e = 0, f ≠ 0normalize 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ığı ise 0001 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ıkBCD
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001

Kodlamalar ve Devreler · Adım adım

BCD Toplama ve Düzeltme

BCD 38 ile BCD 45'i toplayalım.

380011 100038h

38 → 0011 1000.

380011 100038h+ 450100 010145h

45 → 0100 0101.

380011 100038h+ 450100 010145h= ?0111 11017Dh1101 = 13 > 9 → geçersiz basamak

İkili toplanır: 0111 1101 = 7Dh. Düşük basamak 1101 (13) BCD'de geçersiz.

380011 100038h+ 450100 010145h= ?0111 11017Dh1101 = 13 > 9 → geçersiz basamak+ 60000 0110düzeltme

Geçersiz basamağa (ya da AF = 1 ise) 6 eklenir: 16 − 10 = 6 kullanılmayan desen atlanır.

380011 100038h+ 450100 010145h= ?0111 11017Dh1101 = 13 > 9 → geçersiz basamak+ 60000 0110düzeltme= 831000 001183h1000 0011BCD 83 ✓

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

32 bitlik değer 12345678h, adres 0100h'den itibaren:Little endian (Intel x86)78h0100h56h0101h34h0102h12h0103hLSB (78h) en düşük adresteBig endian (ağ, PowerPC)12h0100h34h0101h56h0102h78h0103hMSB (12h) en düşük adreste
  • 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.
Düzeltme: Kaynaktaki örnekte sıralamalar yer değiştirmiş. 01020304h için little endian bellek düzeni 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
—0200h—0201h

AX = 1234h: AH = 12h, AL = 34h.

34h0200h12h0201h

Word 0200h'ye yazılır: [0200h] = 34h (düşük bayt), [0201h] = 12h.

34h0200h12h0201h

Düşük adresteki bayt okunur: BL = 34h.

34h0200h12h0201h

Yüksek adresteki bayt: BH = 12h → BX = 1234h.

34h0200h12h0201h

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İkilideğişen bitGray
0000–000
10011001
20102011
30111010
41003110
51011111
61102101
71111100
  • 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).

B0110ikili (6)

B = 0110 (6).

B0110ikili (6)B >> 10011bir sağa kaydır

B bir bit sağa kaydırılır: 0011.

B0110ikili (6)B >> 10011bir sağa kaydırB XOR (B >> 1)0101Gray

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

Konumsal sistemlerDeğer = Σ rakam × tabankonum. İkili (b), onaltılı (h), ondalık; 1 onaltılı rakam = 4 bit.
DönüşümOnluktan: tabana böl, kalanları aşağıdan yukarı oku. İkili ↔ onaltılı: 4'lü gruplar.
İşaretli sayılar2'ye tümleyen: tersle + 1 (NEG). MSB işaret bitidir; 8 bit −128…127, 16 bit −32768…32767.
KodlamalarIEEE 754: işaret/üs(127)/mantissa. BCD: basamak başına 4 bit, +6 düzeltme. x86 little endian. Gray: tek bit değişir.

Özet

Alıştırmalar

  1. MCMXCIV ve MMXXVI sayılarını ondalığa çevirin.
  2. 11001010b sayısını ondalık ve onaltılıya çevirin.
  3. 2024 sayısını onaltılı ve ikili yazın.
  4. −100'ü 8 bitlik 2'ye tümleyen olarak yazın. 16 bitte nasıl görünür?
  5. 0F0h + 20h işleminin 8 bitlik sonucu, CF ve işaretli yorumu nedir?
  6. BCD 47 + 36 toplamını düzeltmeyle yapın.
  7. 0 10000010 01100000000000000000000 IEEE 754 sayısının değeri nedir?
  8. 5'in 3 bitlik Gray kodu nedir? 0ABCDh, 0200h adresine word olarak yazılırsa [0200h] nedir?
Cevaplar
  1. 1000 + 900 + 90 + 4 = 1994; 2026.
  2. 128 + 64 + 8 + 2 = 202 = CAh.
  3. 7E8h = 0111 1110 1000b.
  4. 256 − 100 = 156 = 9Ch = 1001 1100b; 16 bitte FF9Ch.
  5. 110h → 10h, CF = 1; işaretli −16 + 32 = +16 doğru (OF = 0).
  6. 0100 0111 + 0011 0110 = 0111 1101 (7Dh) → +6 → 83h = BCD 83.
  7. +1,011b × 2³ = 1011b = 11,0.
  8. 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.

Son

Bölüm 3: Sayı Sistemleri
Sonraki bölüm: Bölüm 3: Assembly
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.