Bir işlemci farklı komutların ne anlama geldiğini nasıl 'bilir'?
MOV, PUSH, CALL, vb. Derleme seviyesi komutları düşünüyorum.
Bir işlemci farklı komutların ne anlama geldiğini nasıl 'bilir'?
MOV, PUSH, CALL, vb. Derleme seviyesi komutları düşünüyorum.
Yanıtlar:
Bir bilgisayar montaj seviyesi talimatlarını yorumladığında , bu talimatlar CPU'nun okuması için ikili değerlerine dönüştürülür. CPU talimatları uyguladığında, komutun opcode kısmını mikro kod eşdeğerlerini içeren ayrı ayrı "mikroprogramlara" yorumlar . Tam bir montaj talimatı, bir opcode ve eğer gerekliyse, beraberinde gelen tüm geçerli verilerden oluşur (örneğin, kayıt isimleri, hafıza adresleri).
Mikrokod komutları oldukça düşük seviyelidir (montajdan çok daha fazlasıdır) ve mikroişlemcideki mantık akışını kontrol eden gerçek dijital sinyalleri kontrol eder. Örneğin, bir mikro kod talimatı bir durum kodu kayıt bayrağını yeni bir değerle güncelleyebilir veya bir ALU birimlerinden birine bir CPU kayıt cihazı bağlayabilir . Daha karmaşık görevler mümkündür, ancak bu size hangi mikro kodun kullanıldığı hakkında genel bir fikir verir.
Derlemeden yürütmeye genel akış aşağıdaki gibidir. Montaj talimatları bir araya getirildi (ikili eşdeğer 0s ve 1s, ya da bundan sonra mantık sinyalleri haline getirildi). Bu mantık sinyalleri CPU tarafından sırayla yorumlanır ve belirli bir talimatı yerine getirmek için CPU akışını yönlendiren daha düşük seviyeli mantık sinyallerine dönüştürülür. Bu, işlemcinin mimarisine ve tasarımına bağlı olarak bir veya daha fazla saat döngüsü sürebilir (çoğu işlemci referans el kitabı, örneğin bunun gibi belirli bir talimatı yürütmek için kaç saat döngüsü gerektiğini size söyler ).
Bunların tümü , akışını gerçek düşük seviye mantık geçitlerine yönlendiren, sabit programlanmış mikro kod (işlemcinin fiziksel olarak bir tür ROM'da , üretim sırasında ayarlanan fiziksel olarak gömülü ) ile yapılır . Bu, soyut montaj talimatları ile işlemcideki fiziksel elektrik mantığı arasında bir arayüz sağlar.
Böylece, özet olarak, işlemci talimatları işlemci tarafından birleştirilir ve yüklenir. İşlemci daha sonra talimatı "aslında" uygulayan özel talimatlara karşılık gelen mikro programa (mikro kod formunda) bakmak için bu talimatları kullanacaktır. Belirli bir talimat için mikro kodlar bir kez çalıştırıldığında (bir veya daha fazla saat döngüsü alabilir), işlemci bir sonraki talimatı almak için mikro kodu yürütür ve döngü tekrar eder.
İşlemci gerçekten komutların ne olduğunu 'bilmiyor'. Komutlar, işlemcinin komutları yorumladığımız şeyi yapmasına neden olan ikili kalıplardır.
Örneğin, bir ADD-R1-R2 operasyonu işlemi, 1 ve 2 numaralı kayıtların ALU’ya (aritmetik ve mantık birimi) ulaşmasına, ALU’nun çeşitli diğer şeyler yerine toplayıcı çıktısını kullanmasına ve ALU çıkış bunları (tüm başarmak için basit mantık devreleri vardır kayıt 2. değerini değiştirmek için çoklayıcı , toplayıcı , sayaç , ...), gerçek işlemciler çok karmaşık optimizasyonlar kullanmak rağmen.
Bir aracın frene bastığınızda nasıl yavaşlayacağını bildiğini sormak gibi bir şey. Otomobil bilmiyor, fren pedalı dolaylı olarak sert balataların tekerleklere nasıl bastırıldığını kontrol ediyor.
Örneğin, bir x86 / IA-32 işlemcisine hemen 8 bitlik bir değeri bir sicile taşımasını söyleyen talimatı alın. Bu komut için ikili kod 10110 ve ardından kayıt işleminin kullanılacağı 3 bitlik bir tanımlayıcıdır. AL yazmacının tanıtıcısı 000'dır, bu nedenle aşağıdaki makine kodu AL yazıcısını 01100001 verisiyle yükler.
10110000 01100001
Bu ikili bilgisayar kodu aşağıdaki gibi onaltılı olarak ifade edilerek daha okunaklı hale getirilebilir.
B0 61
Burada, B0 'Aşağıdaki değerin bir kopyasını AL'ye taşı' anlamına gelir ve 61, 01100001 değerinin onaltılı olarak 97 olduğu onaltılık bir gösterimidir. Intel assembly dili, bunun gibi talimatlar için mnemonic MOV (hareketin kısaltması) sağlar, böylece yukarıdaki makine kodu, noktalı virgül sonrasında gerekirse açıklayıcı bir yorumla, assembly dilinde aşağıdaki şekilde yazılabilir. Bunu okumak ve hatırlamak çok daha kolaydır.
http://en.wikipedia.org/wiki/Assembler_language
Başka bir deyişle, montaj programınızı 'birleştirdiğinizde',
MOV AL, 61h
CPU'nun özel bir anlam ifade ettiği ve ardından ona göre davrandığı sayılara dönüştürülür.
Önerilen Okuma:
Ayrıca, CS152: UC Berkeley'de Bilgisayar Mimarisi ve Mühendisliği dersi alan öğrencilerin notlarını CPU kullandıkları ders notlarına da bakın .
Eğer "ev yapımı işlemci" için google’a giderseniz, pek çok güzellik bulacaksınız.
En düşük seviyede, CPU'nun yapabileceği tüm eklemektir. Eklemeden, çıkartabilir, çarpabilir ve bölünebilir (bunların sadece farklı bir şekilde eklendiğini görerek). CPU, ekleri bellek adreslerine uygulayarak verileri bellekte taşımak için kullanır.
Bunun mümkün olan en düşük seviyede olduğunu unutmayın. CPU aslında bazı komutları mikro kod biçiminde “anlıyor”. Atılım'ın cevabını görün, çok iyi yazılmış.
Programmers.stackexchange.com adresinde ilgili bir cevap verdim, bkz. Bilgisayarlar nasıl çalışır? Bilgisayarların talimatları nasıl hareket eden elektronlara çevirdiği hakkında yere kadar her şeyin üzerinde kısaca yürüdüğüm yer.