Ders 12 / 16
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.
İçindekiler
İ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 ise üretir, VEYA kapısı en az biri 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. işlemi, o basamakta bırakır ve bir üst basamağa taşır.
| 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:
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):
Elde ifadesi sözle okunabilir: iki bit de ise elde üretilir; ya da bitlerden tam biri iken alt basamaktan elde geliyorsa yine üretilir.
Dalgalı Elde Toplayıcı
bitlik toplama, 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:
değeri, ’nin bitlerini XOR kapılarından geçirerek üretilir; sondaki ise en alt toplayıcının elde girişine verilerek sağlanır. Böylece tek bir denetim biti hem tersleme hem de elde girişini yönetir: ise devre toplama, 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 |
| İşaret | Sonucun en soldaki biti |
| Elde | En üst basamaktan elde çıkışı (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. ö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:
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: işaretsiz yorumda başa sarar, 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; tam toplayıcının zincirlenmesi 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 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.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.