Temel olarak her modern bilgisayar biraz zorlayıcı bir makine. Genellikle, bayt, sözcük, dwords veya qwords adı verilen veri kümelerinde bitleri iter.
Bir bayt 8 bit, 2 bayt (veya 16 bit) kelimesi, 2 dword (veya 32 bit) ve 2 qword (veya 64 bit) kelimesinden oluşur. Bunlar bit düzenlemenin tek yolu değil. 128 bit ve 256 bit manipülasyon da sıklıkla SIMD talimatlarında meydana gelir.
Montaj talimatları kayıtlar üzerinde çalışır ve hafıza adresleri genellikle yukarıdaki formlardan birinde çalışır.
ALU (aritmetik mantık birimleri), tam sayıları (genellikle İki'in Tamamlayıcı formatı) temsil ettikleri gibi bit kümeleri üzerinde, kayan nokta değerlerini (genellikle IEEE 754 tarzı float
ve double
) olduğu gibi FPU'lar üzerinde çalışırlar . Diğer parçalar, bazı format, karakterler, tablo girişleri, CPU talimatları veya adreslerden oluşan bir veri paketindeymiş gibi davranır.
Tipik bir 64 bit bilgisayarda, 8 baytlık (64 bit) paketler adreslerdir. Bu adresleri geleneksel olarak onaltılı formatta (gibi 0xabcd1234cdef5678
) gösteririz, ancak bu sadece insanların bit kalıplarını okuması için kolay bir yoldur. Her bir bayt (8 bit) iki onaltılık karakter olarak yazılmıştır (eşit olarak her onaltılık karakter - 0 - F - 4 bit anlamına gelir).
Gerçekte olan bir şey (aslında bir seviye için), genellikle bir kayıt defterinde saklanan veya bir bellek bankasında bitişik yerlerde saklanan bitlerin olduğu ve onları başka bir insana tarif etmeye çalıştığımızdır.
Bir işaretçiyi takip etmek, bellek denetleyicisinden bize bu konumdaki bazı verileri vermemizi istemekten ibarettir. Genelde, bellek denetleyicisinden belirli bir konumdaki belirli bir bayt sayısını (genellikle dolaylı olarak bir dizi konum, genellikle bitişik) istersiniz ve bu benim girmeyeceğim çeşitli mekanizmalar aracılığıyla iletilir.
Kod genellikle, alınacak veriler için - bir kayıt defteri, başka bir bellek adresi, vb. - bir hedef belirtir ve genellikle, kayan nokta verilerini bir tamsayı bekleyen bir sicile yüklemek veya tam tersi kötü bir fikirdir.
C / C ++ içindeki verinin türü, derleyicinin takip ettiği ve hangi kodun üretildiğini değiştiren bir şeydir. Genellikle, onu aslında herhangi bir türden yapan verilerde özünde hiçbir şey yoktur . Kod tarafından, tamsayı benzeri bir şekilde (ya da kayan noktaya benzeyen bir yol ya da adrese benzeyen bir şekilde) işlenen yalnızca bir bit topluluğu (bayt şeklinde düzenlenmiştir).
Bunun istisnaları var. Bazı şeylerin farklı türde bitler olduğu mimariler var . En yaygın örnek korumalı yürütme sayfalarıdır - CPU'ya ne yapacağını söyleyen talimatlar bit iken, çalışma zamanında yürütmek için kod içeren (bellek) sayfalar özel olarak işaretlenir, değiştirilemez ve işaretlenmemiş sayfaları çalıştıramazsınız yürütme sayfaları olarak.
Ayrıca yalnızca veri (bazen fiziksel olarak yazılamayan ROM'da saklanan!), Hizalama sorunları (bazı işlemciler double
belirli şekillerde hizalanmadıkça s bellekten yüklenemezler veya belirli hizalama gerektiren SIMD talimatları) ve sayısız diğer mimari tuhaflıklar.
Yukarıdaki detay seviyesi bile bir yalandır. Bilgisayarlar "gerçekten" bitler etrafında itmiyorlar, gerçekten gerilimleri ve akımı itiyorlar. Bu gerilimler ve akımlar bazen bitlerin soyutlama seviyesinde yapmaları gerekeni yapmazlar. Çipler, bu tür hataların çoğunu tespit etmek ve üst düzeyde bir soyutlamadan haberdar olmak zorunda kalmadan bunları düzeltmek için tasarlanmıştır.
Bu bile bir yalan.
Her bir soyutlama seviyesi aşağıdakini gizler ve yazdırmak için Feynman diyagramlarını göz önünde bulundurmadan problemleri çözmeyi düşünmenizi sağlar "Hello World"
.
Böylece, yeterli bir dürüstlük düzeyinde, bilgisayarlar bitleri zorlar ve bu bitlere nasıl kullanıldığı ile ilgili anlam verilir.