---
title: 'Aritmetiğin Donanımdaki Karşılığı'
source: 'https://academia.sh/tr/kurslar/bilgisayarlar-nasil-calisir/aritmetigin-donanimdaki-karsiligi'
course: 'Bilgisayarlar Nasıl Çalışır'
language: tr
updated: '2026-08-17T18:08:12+00:00'
license: 'CC BY-SA 4.0'
---

# Aritmetiğin Donanımdaki Karşılığı

Mantık kapılarından toplayıcı devrelere, çıkarmanın aynı devrede yapılması ve durum bayraklarının üretimi.

İkinci derste, `topla` komutunun 66 numaralı yazmaca bir sonuç yazdığı söylendi ama bu
sonucun nasıl üretildiği açık bırakıldı. Bu ders o boşluğu doldurur: toplama işlemi,
donanımda hangi yapılarla gerçekleşir?

Yanıt, ilk konudaki iki dersi birleştirir. Bit düzeyi işleçler dersinde tanımlanan VE,
VEYA ve XOR işlemleri; işaretli tam sayılar dersinde tanımlanan ikiye tümleyen
gösterimi. İkisi bir araya geldiğinde, aritmetik birimin tamamı kurulur.

## Mantık Kapıları

**Mantık kapısı (logic gate)**, bir veya iki giriş bitinden bir çıkış biti üreten
fiziksel devre öğesidir. Davranışları, önceki konuda tanımlanan doğruluk tablolarının
aynısıdır: VE kapısı yalnızca iki girişi de $1$ ise $1$ üretir, VEYA kapısı en az biri
$1$ ise, XOR kapısı girişler farklı ise.

Bu, o dersteki işleçlerin kaynağını da açıklar: `a & b` ifadesi, sözcük genişliği kadar
VE kapısının aynı anda çalışması demektir. Bit düzeyi işlemlerin ucuz olmasının nedeni
budur — her bit için tek bir kapı yeterlidir ve bitler birbirini beklemez.

Aritmetik ise bu bağımsızlığı bozar: bir basamağın sonucu, alt basamaklardan gelen elde
bitine bağlıdır.

## Yarım Toplayıcı

İki biti toplamak, elle yapılan toplamanın aynısıdır. $1 + 1$ işlemi, o basamakta $0$
bırakır ve bir üst basamağa $1$ taşır.

| $a$ | $b$ | Toplam | Elde |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |

Toplam sütunu XOR tablosunun, elde sütunu VE tablosunun aynısıdır:

$$
\text{toplam} = a \oplus b, \qquad \text{elde} = a \wedge b
$$

Bu iki kapılık devreye **yarım toplayıcı (half adder)** denir. Adındaki eksiklik şudur:
alt basamaktan gelen eldeyi hesaba katmaz.

## Tam Toplayıcı

Gerçek bir toplamada her basamağın üç girdisi vardır: iki bit ve alt basamaktan gelen
elde. Bu üç girdiyi işleyen devre **tam toplayıcıdır (full adder)**:

$$
\text{toplam} = a \oplus b \oplus c_{\text{giriş}}
$$

$$
c_{\text{çıkış}} = (a \wedge b) \vee \big(c_{\text{giriş}} \wedge (a \oplus b)\big)
$$

Elde ifadesi sözle okunabilir: iki bit de $1$ ise elde üretilir; ya da bitlerden tam
biri $1$ iken alt basamaktan elde geliyorsa yine üretilir.

## Dalgalı Elde Toplayıcı

$n$ bitlik toplama, $n$ tam toplayıcının zincirlenmesiyle kurulur: her toplayıcının elde
çıkışı, bir üstteki toplayıcının elde girişine bağlanır. Bu düzene **dalgalı elde
toplayıcı (ripple-carry adder)** denir.

Zincirin bir maliyeti vardır: en üst basamağın sonucu, elde biti tüm basamaklardan
geçene kadar kararlı değildir. Devrenin gecikmesi bit sayısıyla orantılı büyür.

Bu gecikmeyi azaltmak, sayısal tasarımın klasik problemidir. Elde bitlerini basamak
basamak beklemek yerine, giriş bitlerinden doğrudan hesaplayan tasarımlar — elde
öngörülü toplayıcılar — daha fazla kapı kullanarak daha kısa gecikme sağlar. Alan ile
hız arasındaki bu değiş tokuş, donanım tasarımının her katmanında tekrarlanır.

## Çıkarma İçin Ayrı Devre Yoktur

İşaretli tam sayılar dersinde, ikiye tümleyenin tercih edilme nedeninin toplama
devresini değiştirmemesi olduğu söylenmişti. Bunun devredeki karşılığı şudur:

$$
a - b = a + (\lnot b) + 1
$$

$\lnot b$ değeri, $b$'nin bitlerini XOR kapılarından geçirerek üretilir; sondaki $+1$
ise en alt toplayıcının elde girişine $1$ verilerek sağlanır. Böylece tek bir denetim
biti hem tersleme hem de elde girişini yönetir: $0$ ise devre toplama, $1$ ise çıkarma
yapar.

Karşılaştırma işlemleri de aynı devreyi kullanır. İki değerin karşılaştırılması, farkın
hesaplanıp sonucun bayraklarına bakılmasıdır; sonucun kendisi saklanmaz.

## Durum Bayrakları

Aritmetik ve mantık birimi, sonucun yanı sıra sonucu niteleyen bitler üretir. Dört
bayrak yaygındır:

| Bayrak | Kurulma koşulu |
|---|---|
| Sıfır | Sonucun tüm bitleri $0$ |
| İşaret | Sonucun en soldaki biti $1$ |
| Elde | En üst basamaktan elde çıkışı $1$ (işaretsiz taşma) |
| Taşma | En üst basamağa giren elde ile çıkan elde farklı (işaretli taşma) |

Son satır, işaretli taşmanın donanımdaki tanımıdır. İki pozitif sayı toplanırken en üst
basamağa elde girip çıkmıyorsa, sonuç işaret bitine taşmış demektir — değer negatif
görünür. $127 + 1$ örneğinde olan tam olarak budur.

Elde ve taşma bayraklarının ayrı tutulması, aynı toplama devresinin hem işaretsiz hem
işaretli yorumu desteklemesini sağlar. Hangi bayrağın anlamlı olduğuna, değeri hangi
yorumla kullandığını bilen program karar verir. Koşullu dallanma komutları da bu
bayrakları okur.

## Devreyi Programla Kurmak

Aşağıdaki program, tam toplayıcıyı ve sekiz bitlik dalgalı elde toplayıcıyı bit düzeyi
işleçlerle kurar:

```python
def tam_toplayici(a: int, b: int, elde_giris: int) -> tuple[int, int]:
    """Üç giriş bitinden toplam ve elde çıkışını üretir."""
    toplam = a ^ b ^ elde_giris
    elde_cikis = (a & b) | (elde_giris & (a ^ b))
    return toplam, elde_cikis


def topla(x: int, y: int, bit: int = 8, cikar: bool = False) -> dict:
    """Dalgalı elde toplayıcı; cikar=True ise x - y hesaplar."""
    elde = 1 if cikar else 0
    sonuc = 0
    for i in range(bit):
        a = (x >> i) & 1
        b = ((y >> i) & 1) ^ (1 if cikar else 0)   # çıkarmada b terslenir
        if i == bit - 1:
            elde_giris_ust = elde                  # en üst basamağa giren elde
        t, elde = tam_toplayici(a, b, elde)
        sonuc |= t << i
    return {
        "sonuc": sonuc,
        "sifir": sonuc == 0,
        "isaret": ((sonuc >> (bit - 1)) & 1) == 1,
        "elde": elde == 1,
        "tasma": elde_giris_ust != elde,
    }


print(topla(5, 3))                    # 8, taşma yok
print(topla(5, 3, cikar=True))        # 2, çıkarma aynı devrede
print(topla(127, 1)["tasma"])         # True  — işaretli taşma
print(topla(255, 1)["elde"])          # True  — işaretsiz taşma
print(topla(255, 1)["sonuc"])         # 0     — başa sardı
```

`cikar` bayrağının iki yerde birden kullanılması — hem `b` bitlerinin terslenmesinde hem
de başlangıç eldesinde — donanımdaki tek denetim bitinin karşılığıdır.

Çıktılar, ilk konudaki iddiaları doğrular: $255 + 1$ işaretsiz yorumda başa sarar,
$127 + 1$ işaretli yorumda taşma bayrağını kurar. O derste "donanım her iki taşmayı da
ayrı bayraklarla bildirir" denmişti; bu dersteki devre, o bayrakları üreten yapının
kendisidir.

## Özet

- Mantık kapıları, bit düzeyi işleçlerin fiziksel karşılığıdır; her bit bağımsız
  işlendiği için bu işlemler ucuzdur.
- Yarım toplayıcı iki biti toplar: toplam XOR, elde VE kapısıyla üretilir.
- Tam toplayıcı alt basamaktan gelen eldeyi de hesaba katar; $n$ tam toplayıcının
  zincirlenmesi $n$ bitlik toplayıcıyı verir.
- Zincirleme gecikmesi bit sayısıyla artar; elde öngörülü tasarımlar daha çok kapı
  kullanarak gecikmeyi azaltır.
- Çıkarma ayrı bir devre gerektirmez: ikinci işlenen terslenir ve elde girişine $1$
  verilir.
- Aritmetik birim sonucun yanında sıfır, işaret, elde ve taşma bayraklarını üretir;
  elde işaretsiz, taşma işaretli yorumun taşmasını bildirir.

## Sonraki Adım

Bu konu, verinin bellekte nasıl durduğunu ve komutların donanımda nasıl yürütüldüğünü
kurdu. Geriye tek bir halka kaldı: bir programcının yazdığı metin, bu komutlara nasıl
dönüşür? Sonraki konu, kaynak koddan çalışan sürece uzanan zinciri — derleme, bağlama ve
yükleme adımlarını — ele alacak.
