Bölüm 1: Sayı Sistemleri

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

Giriş

Öğrenme Çıktıları

Konumsal sistemler

Onluk, ikili ve onaltılık 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

ikiye 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
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.
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.
  • 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ık 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, onluk 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 Onluğ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ık 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ı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 assembler E120h'yi bir değişken/etiket adı sanır.
  • Örnek: 1234h, onluk 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, 10onluk 10 (= 0Ah) — sonek yoksa onluktur

Konumsal Sistemler · Adım adım

Onaltılıktan Onluğ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ık: 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ı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ımTabanDeğer
MOV AL, 65onluk (sonek yok ya da d)65
MOV AL, 41honaltılık65
MOV AL, 01000001bikili65
MOV AL, 101osekizli (octal, o ya da q)65
MOV AL, 'A'ASCII karakter65
MOV AL, -1onluk, işaretliFFh
6541h01000001b101o'A'AL = 0100 0001b (B0 41)
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ığa ç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ık

43868 sayısı onaltılık 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 · 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)
DIV BX ile bölme (taban 16)AX0BADhDX0000hSI0000hBX = 0000hkalan dizisi00000000+0 +1 +2 +3

AX = 2989 = 0BADh. Sayının onaltılık basamakları tekrar tekrar 16'ya bölünerek bulunacak.

DIV BX ile bölme (taban 16)AX0BADhDX0000hSI0000hBX = 0010h (16)kalan dizisi00000000+0 +1 +2 +3

BX = 16: hedef taban. BX = 2 ya da 8 olsaydı aynı kod o tabanın basamaklarını üretirdi.

DIV BX ile bölme (taban 16)AX0BADhDX0000hSI0000hBX = 0010h (16)kalan dizisi00000000+0 +1 +2 +3

SI = 0: sıradaki kalanın kalan dizisindeki yeri.

DIV BX ile bölme (taban 16)AX0BADhDX0000hSI0000hBX = 0010h (16)kalan dizisi00000000+0 +1 +2 +3

DX = 0. 16 bitlik DIV BX 32 bitlik DX:AX'i böler; DX sıfırlanmasaydı bölünen yanlış olurdu.

DIV BX ile bölme (taban 16)2989 ÷ 16 = 186kalan 13DAX00BAhDX000DhSI0000hBX = 0010h (16)kalan dizisi00000000+0 +1 +2 +3

2989 ÷ 16 = 186, kalan 13: AX = 00BAh (bölüm), DX = 000Dh (kalan). İlk kalan en düşük basamaktır: D.

DIV BX ile bölme (taban 16)2989 ÷ 16 = 186kalan 13DAX00BAhDX000DhSI0000hBX = 0010h (16)kalan dizisi0D000000+0 +1 +2 +3

kalan[0] ← DL = 0Dh.

DIV BX ile bölme (taban 16)2989 ÷ 16 = 186kalan 13DAX00BAhDX000DhSI0001hBX = 0010h (16)kalan dizisi0D000000+0 +1 +2 +3

SI = 1; bölüm 186 ≠ 0 → ZF = 0, JNE bol'a döner.

DIV BX ile bölme (taban 16)2989 ÷ 16 = 186kalan 13D186 ÷ 16 = 11kalan 10AAX000BhDX000AhSI0001hBX = 0010h (16)kalan dizisi0D000000+0 +1 +2 +3

Tur 2: DX = 0 yapıldı, 186 ÷ 16 = 11, kalan 10 → A.

DIV BX ile bölme (taban 16)2989 ÷ 16 = 186kalan 13D186 ÷ 16 = 11kalan 10AAX000BhDX000AhSI0001hBX = 0010h (16)kalan dizisi0D0A0000+0 +1 +2 +3

kalan[1] ← 0Ah. Bölüm 11 ≠ 0: döngü sürer.

DIV BX ile bölme (taban 16)2989 ÷ 16 = 186kalan 13D186 ÷ 16 = 11kalan 10A11 ÷ 16 = 0kalan 11BAX0000hDX000BhSI0002hBX = 0010h (16)kalan dizisi0D0A0000+0 +1 +2 +3

Tur 3: 11 ÷ 16 = 0, kalan 11 → B.

DIV BX ile bölme (taban 16)2989 ÷ 16 = 186kalan 13D186 ÷ 16 = 11kalan 10A11 ÷ 16 = 0kalan 11BAX0000hDX000BhSI0002hBX = 0010h (16)kalan dizisi0D0A0B00+0 +1 +2 +3

kalan[2] ← 0Bh.

DIV BX ile bölme (taban 16)2989 ÷ 16 = 186kalan 13D186 ÷ 16 = 11kalan 10A11 ÷ 16 = 0kalan 11BAX0000hDX000BhSI0003hBX = 0010h (16)kalan dizisi0D0A0B00+0 +1 +2 +3

SI = 3. Bölüm 0 → ZF = 1, JNE atlamaz: döngü biter, 3 basamak bulundu.

DIV BX ile bölme (taban 16)2989 ÷ 16 = 186kalan 13D186 ÷ 16 = 11kalan 10A11 ÷ 16 = 0kalan 11Bsondan başa okuAX0000hDX000BhSI0003hBX = 0010h (16)kalan dizisi0D0A0B00+0 +1 +2 +3

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= 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ığ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
00101101AL= 45CF00000000BL= 00hCX = 0bölme

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.

00101101AL= 45CF00000000BL= 00hCX = 8bölme

CX = 8: 8 bitin her biri için bir tur.

00010110AL= 22CF=100000000BL= 00hCX = 8bölme45 ÷ 2 = 22k 1

SHR AL, 1: 45 ÷ 2 = 22 (AL = 16h); düşen bit, yani kalan 1 → CF = 1.

00010110AL= 22CF=010000000BL= 80hCX = 8bölme45 ÷ 2 = 22k 1

RCR BL, 1: CF, BL'ye soldan (bit 7) girer; kalan saklandı.

00010110AL= 22CF=010000000BL= 80hCX = 7bölme45 ÷ 2 = 22k 1

LOOP: CX = 7 ≠ 0 → bit etiketine döner.

00001011AL= 11CF=001000000BL= 40hCX = 6bölme45 ÷ 2 = 22k 122 ÷ 2 = 11k 0

Tur 2 (özet): 22 ÷ 2 = 11, kalan 0. Önceki kalanlar BL'de bir sağa kaydı; CX = 6.

00000101AL= 5CF=010100000BL= A0hCX = 5bölme45 ÷ 2 = 22k 122 ÷ 2 = 11k 011 ÷ 2 = 5k 1

Tur 3 (özet): 11 ÷ 2 = 5, kalan 1. Önceki kalanlar BL'de bir sağa kaydı; CX = 5.

00000010AL= 2CF=011010000BL= D0hCX = 4bölme45 ÷ 2 = 22k 122 ÷ 2 = 11k 011 ÷ 2 = 5k 15 ÷ 2 = 2k 1

Tur 4 (özet): 5 ÷ 2 = 2, kalan 1. Önceki kalanlar BL'de bir sağa kaydı; CX = 4.

00000001AL= 1CF=001101000BL= 68hCX = 3bölme45 ÷ 2 = 22k 122 ÷ 2 = 11k 011 ÷ 2 = 5k 15 ÷ 2 = 2k 12 ÷ 2 = 1k 0

Tur 5 (özet): 2 ÷ 2 = 1, kalan 0. Önceki kalanlar BL'de bir sağa kaydı; CX = 3.

00000000AL= 0CF=010110100BL= B4hCX = 2bölme45 ÷ 2 = 22k 122 ÷ 2 = 11k 011 ÷ 2 = 5k 15 ÷ 2 = 2k 12 ÷ 2 = 1k 01 ÷ 2 = 0k 1

Tur 6 (özet): 1 ÷ 2 = 0, kalan 1. Önceki kalanlar BL'de bir sağa kaydı; CX = 2.

00000000AL= 0CF=001011010BL= 5AhCX = 1bölme45 ÷ 2 = 22k 122 ÷ 2 = 11k 011 ÷ 2 = 5k 15 ÷ 2 = 2k 12 ÷ 2 = 1k 01 ÷ 2 = 0k 10 ÷ 2 = 0k 0

Tur 7 (özet): 0 ÷ 2 = 0, kalan 0. Önceki kalanlar BL'de bir sağa kaydı; CX = 1. Baştaki sıfırlar.

00000000AL= 0CF=000101101BL= 2DhCX = 0bölme45 ÷ 2 = 22k 122 ÷ 2 = 11k 011 ÷ 2 = 5k 15 ÷ 2 = 2k 12 ÷ 2 = 1k 01 ÷ 2 = 0k 10 ÷ 2 = 0k 00 ÷ 2 = 0k 0

Tur 8 (özet): 0 ÷ 2 = 0, kalan 0. Önceki kalanlar BL'de bir sağa kaydı; CX = 0. Baştaki sıfırlar.

00000000AL= 0CF=000101101BL= 2DhCX = 0bölme45 ÷ 2 = 22k 122 ÷ 2 = 11k 011 ÷ 2 = 5k 15 ÷ 2 = 2k 12 ÷ 2 = 1k 01 ÷ 2 = 0k 10 ÷ 2 = 0k 00 ÷ 2 = 0k 0

İ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,25bit1kalan kesir 0,25

0,625 × 2 = 1,25: tam kısım 1 → ilk kesir biti (2−1). Kesir 0,25 ile devam.

0,625 × 2= 1,25bit1kalan kesir 0,250,25 × 2= 0,5bit0kalan kesir 0,5

0,25 × 2 = 0,5: tam kısım 0 → 2−2 biti.

0,625 × 2= 1,25bit1kalan kesir 0,250,25 × 2= 0,5bit0kalan kesir 0,50,5 × 2= 1,0bit1kalan kesir 0,0

0,5 × 2 = 1,0: tam kısım 1, kalan kesir 0 → dur.

0,625 × 2= 1,25bit1kalan kesir 0,250,25 × 2= 0,5bit0kalan kesir 0,50,5 × 2= 1,0bit1kalan kesir 0,0yukarıdan aşağı oku0,101b

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,2bit0kalan kesir 0,2

0,1 × 2 = 0,2 → 0.

0,1 × 2= 0,2bit0kalan kesir 0,20,2 × 2= 0,4bit0kalan kesir 0,4

0,2 × 2 = 0,4 → 0.

0,1 × 2= 0,2bit0kalan kesir 0,20,2 × 2= 0,4bit0kalan kesir 0,40,4 × 2= 0,8bit0kalan kesir 0,8

0,4 × 2 = 0,8 → 0.

0,1 × 2= 0,2bit0kalan kesir 0,20,2 × 2= 0,4bit0kalan kesir 0,40,4 × 2= 0,8bit0kalan kesir 0,80,8 × 2= 1,6bit1kalan kesir 0,6

0,8 × 2 = 1,6 → 1, kesir 0,6.

0,1 × 2= 0,2bit0kalan kesir 0,20,2 × 2= 0,4bit0kalan kesir 0,40,4 × 2= 0,8bit0kalan kesir 0,80,8 × 2= 1,6bit1kalan kesir 0,60,6 × 2= 1,2bit1kalan kesir 0,2

0,6 × 2 = 1,2 → 1, kesir 0,2: bu kesir daha önce (2. satırda) görüldü!

0,1 × 2= 0,2bit0kalan kesir 0,20,2 × 2= 0,4bit0kalan kesir 0,40,4 × 2= 0,8bit0kalan kesir 0,80,8 × 2= 1,6bit1kalan kesir 0,60,6 × 2= 1,2bit1kalan kesir 0,20,2 × 2= 0,4bit0kalan kesir 0,4

0,2 yeniden çarpılıyor: 2.–5. satırlar sonsuza kadar tekrar eder.

0,1 × 2= 0,2bit0kalan kesir 0,20,2 × 2= 0,4bit0kalan kesir 0,40,4 × 2= 0,8bit0kalan kesir 0,80,8 × 2= 1,6bit1kalan kesir 0,60,6 × 2= 1,2bit1kalan kesir 0,20,2 × 2= 0,4bit0kalan kesir 0,4tekrar eden00110,0 0011 0011 …b

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

  • 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 ikiye tümleyen (two's complement) adını alır.
00h … 7Fh80h … FFh (MSB = 1)işaretsiz: 0128255işaretli: 0+127−128−1FBh = 251 = 256 − 5 → −5
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ük
birler
tümleyeni
ikiye
tümleyen
00000000
00011111
00102222
00113333
01004444
01015555
01106666
01117777
İkiliİşaretsizİşaret-
büyüklük
birler
tümleyeni
ikiye
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
Tablodaki ortadaki sütun işaret-büyüklük gösterimidir (1000 = −0, 1111 = −7). 8086 ve tüm modern işlemciler ikiye tümleyen kullanır: tek bir sıfır vardır ve aralık −8 … +7'dir.

İş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 NOT komutu birler tümleyenini üretir.

Başlangıç.

+45 =001011012Dh

+45 = 0010 1101b.

+45 =001011012DhNOT →11010010D2h (−45, birler t.)

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 NEG komutu 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 =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 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
00101101AL2Dhişaretsiz 45 · işaretli +4500000000BL00hişaretsiz 0 · işaretli +0CF0ZF0SF0OF0

AL = +45 = 0010 1101b (2Dh).

00101101AL2Dhişaretsiz 45 · işaretli +4500101101BL2Dhişaretsiz 45 · işaretli +45CF0ZF0SF0OF0

BL = AL: aynı değerin kopyası; tümleyen BL üzerinde iki adımda alınacak.

00101101AL2Dhişaretsiz 45 · işaretli +4511010010BLD2hişaretsiz 210 · işaretli -46CF0ZF0SF0OF0NOT: 0 ↔ 1

NOT BL: bütün bitler ters → 1101 0010b = D2h (birler tümleyeni). NOT bayrakları değiştirmez.

00101101AL2Dhişaretsiz 45 · işaretli +4511010011BLD3hişaretsiz 211 · işaretli -45CF0ZF0SF1OF0NOT + 1

INC BL: + 1 → 1101 0011b = D3h. İşaretsiz 211 = 256 − 45; işaretli yorum −45.

11010011ALD3hişaretsiz 211 · işaretli -4511010011BLD3hişaretsiz 211 · işaretli -45CF1ZF0SF1OF0NEG = 0 − x

NEG AL (0 − AL) aynı sonucu tek komutta verir: AL = D3h. İşlenen ≠ 0 → CF = 1.

11010011ALD3hişaretsiz 211 · işaretli -4511010011BLD3hişaretsiz 211 · işaretli -45CF0ZF1SF0OF0fark 0 → eşit

CMP AL, BL: D3h − D3h = 0 → ZF = 1. İki yol aynı bit desenini üretti.

00000000AL00hişaretsiz 0 · işaretli +011010011BLD3hişaretsiz 211 · işaretli -45CF1ZF1SF0OF0100h: elde düştü

ADD AL, 45: D3h + 2Dh = 100h. 9. bit düşer (CF = 1), AL = 00h, ZF = 1: −45 + 45 = 0 ✓

0000000000101101AX= 002Dh · işaretsiz 45 · işaretli +4511010011BLD3hişaretsiz 211 · işaretli -45CF1ZF1SF0OF0

AX = 45 = 002Dh: aynı sayı 16 bitte.

1111111111010011AX= FFD3h · işaretsiz 65491 · işaretli -4511010011BLD3hişaretsiz 211 · işaretli -45CF1ZF0SF1OF016 bit NEG

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.
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 (ikiye 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 · 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.

−168421½¼⅛ ,

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.

−168421½¼⅛+6,7500110110,36h

+6,75 = 4 + 2 + ½ + ¼ → 00110,110.

−168421½¼⅛+6,7500110110,36h−6,7511001010,CAh

ikiye tümleyen (tersle + 1; virgül yok sayılır): 00110110 → 11001001 + 1 = 11001,010.

−168421½¼⅛+6,7500110110,36h−6,7511001010,CAh−16 + 8 + 1 + ¼ = −6,75 ✓

Kontrol: işaret biti −16 değerlidir: −16 + 8 + 1 + 0,25 = −6,75 ✓

−168421½¼⅛+6,7500110110,36h−6,7511001010,CAh−6,75 × 2³ = −54 → 256 − 54 = 202 = CAh

Kısa yol: sayıyı 23 = 8 ile çarp, tamsayı gibi ikiye tümleyen al: −54 → CAh, sonra virgülü 3 bit sola koy.

İşlemci için CAh sıradan bir bayttır; virgülün yeri programcının kabulüdür. Toplama aynen çalışır: −6,75 + 2,5 → CAh + 14h = DEh = 11011,110b = −16 + 11,75 = −4,25 ✓

İş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.
abeldegiriştoplameldeçıkış
00000
01010
10010
11001
11111
0 + 0= 0elde 0yaz 00 + 1= 1elde 0yaz 11 + 0= 1elde 0yaz 11 + 1= 10elde 1yaz 0

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

A = 1011.

A =101111B =01106

B = 0110.

A =101111B =01106NOT B =1001birler tümleyeni

B'nin bitleri ters çevrilir: 1001.

A =101111B =01106NOT B =1001birler tümleyeni+1 →1010−B (ikiye t.)

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

A =101111B =01106NOT B =1001birler tümleyeni+1 →1010−B (ikiye t.)A + (−B) =101015 bit: soldaki elde atılır

1011 + 1010 = 10101 (5 bit).

A =101111B =01106NOT B =1001birler tümleyeni+1 →1010−B (ikiye 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 ödünç yok (CF = 0).

İkili Aritmetik · Adım adım

Onaltılık Toplama: 9A7Ch + 5B96h

elde+C679AB959A7Ch = 395485B96h = 23446

Onaltılık toplama: sağdan sola basamak basamak. Basamak toplamı 15'i aşarsa 16 çıkarılır, sola 1 elde verilir.

elde+C679AB9512C + 6 = 12 + 6 = 1818 − 16 = 2, elde 1

C + 6 = 18 ≥ 16 → yaz 2, elde 1.

elde+C679AB9512117 + 9 + 1 = 1717 − 16 = 1, elde 1

7 + 9 + 1 = 17 → yaz 1, elde 1.

elde+C679AB95121116A + B + 1 = 10 + 11 + 1 = 2222 − 16 = 6, elde 1

A + B + 1 = 22 → yaz 6, elde 1.

elde+C679AB95121116F9 + 5 + 1 = 15 = F16'dan küçük, elde yok

9 + 5 + 1 = 15 → yaz F, elde yok.

elde+C679AB95121116FKontrol: 39548 + 23446= 62994 ✓= F612h

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

ödünç−C679AB95Üstteki basamak küçüksesoldan 16 ödünç alınır

Onaltılık çıkarma: üstteki basamak yetmezse soldaki basamaktan 1 ödünç alınır; o basamağa 16 eklenir.

ödünç−C679AB956C − 6 = 12 − 6 = 6ödünç yok

C − 6 = 6.

ödünç−C679AB956−1E7 − 9 olmaz → 16 ödünç7 + 16 − 9 = 14 = E

7 < 9 → soldan ödünç: 7 + 16 − 9 = 14 → E; soldaki A, 9 olur.

ödünç−C679AB956−1E−1EA − 1 = 9, 9 − B olmaz9 + 16 − 11 = 14 = E

9 < B → yine ödünç: 9 + 16 − 11 = 14 → E; soldaki 9, 8 olur.

ödünç−C679AB956−1E−1E39 − 1 = 88 − 5 = 3

8 − 5 = 3.

ödünç−C679AB956−1E−1E3Kontrol: 39548 − 23446= 16102 ✓= 3EE6h

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

15'e tümleyenFFFFh − 5B96h= A469hher basamak F'den çıkarılır

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.

15'e tümleyenFFFFh − 5B96h= A469hher basamak F'den çıkarılır16'ya tümleyenA469h + 1= A46Ah= 10000h − 5B96h

16'ya tümleyen = 15'e tümleyen + 1 = A46Ah. Bu, 4 basamakta −5B96h'nin gösterimidir (NEG).

15'e tümleyenFFFFh − 5B96h= A469hher basamak F'den çıkarılır16'ya tümleyenA469h + 1= A46Ah= 10000h − 5B96h9A7C − 5B969A7Ch + A46Ah= 1 3EE6htaşan 1 atılır → 3EE6h ✓

9A7Ch − 5B96h = 9A7Ch + A46Ah = 13EE6h. 4 basamağı aşan 1 atılır: 3EE6h, doğrudan çıkarmayla aynı sonuç.

15'e tümleyenFFFFh − 5B96h= A469hher basamak F'den çıkarılır16'ya tümleyenA469h + 1= A46Ah= 10000h − 5B96h9A7C − 5B969A7Ch + A46Ah= 1 3EE6htaşan 1 atılır → 3EE6h ✓5B96 − 9A7C5B96h + 6584h= C11Ahtaşan yok → sonuç negatif

Ters yön: 5B96h − 9A7Ch = 5B96h + 6584h (9A7Ch'nin 16'ya tümleyeni) = C11Ah. Taşan basamak yok → sonuç negatiftir.

15'e tümleyenFFFFh − 5B96h= A469hher basamak F'den çıkarılır16'ya tümleyenA469h + 1= A46Ah= 10000h − 5B96h9A7C − 5B969A7Ch + A46Ah= 1 3EE6htaşan 1 atılır → 3EE6h ✓5B96 − 9A7C5B96h + 6584h= C11Ahtaşan yok → sonuç negatif−(16'ya t. C11Ah)= −3EE6h10000h − C11Ah = 3EE6h

Büyüklüğü bulmak için tekrar 16'ya tümleyen alınır: C11Ah → 3EE6h, yani sonuç −3EE6h (−16102).

İkilideki 1'e / ikiye tümleyenin onaltılık karşılığıdır. 8086'da 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 yorumOF
A + B+ ile +50h + 40h = 90h80 + 64 → −112 ✗1
A + B− ile −9Ch + CEh = 6Ah−100 + (−50) → +106 ✗1
A + Bfarklı64h + CEh = 32h100 + (−50) = 50 ✓0 (asla)
A − B+ eksi −64h − CEh = 96h100 − (−50) → −106 ✗1
A − B− eksi +9Ch − 32h = 6Ah−100 − 50 → +106 ✗1
A − Baynı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)
*ç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ü
JK, set ve reset özelliklerine ek olarak J = K = 1 iken tersleme (toggle) yapar; onu esnek yapan bu üçüncü özelliktir.

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 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.
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.

Sonuç (+1) × (2−3) × 1,25; onluk 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 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ığı 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.
BCD 250010010125ikili 2500011001= 19h (16 + 8 + 1)
OnlukBCD
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.
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

Gray Kodlaması

Onlukİ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.

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
B (AL)1011= 11B >> 1 (BL)G (BL)

AL = 1011b = 11. Gray kodu formülü: G = B xor (B >> 1).

B (AL)1011= 11B >> 1 (BL)G (BL)

BL = AL: kaydırma kopya üzerinde yapılacak, B (AL) korunur.

B (AL)1011= 11B >> 1 (BL)0101= 5G (BL)

SHR BL, 1: 0101b. En sağdaki bit düşer (CF = 1), sola 0 girer.

B (AL)1011= 11B >> 1 (BL)0101= 5G (BL)1110= 14xorGray(11) = 1110

XOR BL, AL: 1011 xor 0101 = 1110b: 11'in Gray kodu. En yüksek bit ikiliyle aynı kaldı.

B (AL)1100= 12B >> 1 (BH)G (BH)Gray(11) = 1110

AL = 1100b = 12, bir sonraki sayı.

B (AL)1100= 12B >> 1 (BH)G (BH)Gray(11) = 1110

BH = AL.

B (AL)1100= 12B >> 1 (BH)0110= 6G (BH)Gray(11) = 1110

SHR BH, 1: 0110b.

B (AL)1100= 12B >> 1 (BH)0110= 6G (BH)1010= 10xorGray(11) = 1110Gray(12) = 1010yalnız bit 2 farklı

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

Konumsal sistemlerDeğer = Σ rakam × tabankonum. İkili (b), onaltılık (h), onluk; 1 onaltılık rakam = 4 bit.
DönüşümOnluktan: tabana böl, kalanları aşağıdan yukarı oku. İkili ↔ onaltılık: 4'lü gruplar.
İşaretli sayılarikiye 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ı onluğa çevirin.
  2. 11001010b sayısını onluk ve onaltılığa çevirin.
  3. 2024 sayısını onaltılık ve ikili yazın.
  4. −100'ü 8 bitlik ikiye 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 sözcük 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

Alıştırmalar (2)

  1. 0,375 ve 0,2 sayılarını ikiliye çevirin (0,2 için 8 kesir biti).
  2. −3,625 sayısını 8 bitlik Q5.3 biçiminde (ikili ve onaltılık) yazın.
  3. 7C5Eh + 3BA9h toplamını; 3BA9h − 7C5Eh farkını 16'ya tümleyenle bulun.
  4. 8 bitte 70h + 30h, 90h − 20h ve 90h − F0h işlemlerinin sonucu ve OF değeri nedir?
Cevaplar
  1. 0,375 = 0,011b (0,75 → 0; 1,5 → 1; 1,0 → 1). 0,2 = 0,0011 0011…b → 0,00110011b.
  2. 3,625 × 8 = 29 → −29 = 256 − 29 = E3h = 11100,011b. Kontrol: −16 + 8 + 4 + 0,25 + 0,125 = −3,625.
  3. B807h. 7C5Eh'nin 16'ya tümleyeni 83A2h; 3BA9h + 83A2h = BF4Bh, taşan yok → −(10000h − BF4Bh) = −40B5h.
  4. 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.

Son

Bölüm 1: Sayı Sistemleri
Sonraki bölüm: Bölüm 2: 8086 Mimarisi · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.