Bir CPU aslında komut ve talimatların ne anlama geldiğini nasıl 'bilir'?


73

Bir işlemci farklı komutların ne anlama geldiğini nasıl 'bilir'?

MOV, PUSH, CALL, vb. Derleme seviyesi komutları düşünüyorum.


Bu çok bilgilendirici, fakat aradığım şey bir CPU'nun komut alıp göndermesine izin veren şey nedir?

Bu yorumu anlamıyorum. Bir CPU adresinden sorarak, bellekten talimatları alır. Bir CPU'nun sadece "gönderdiği" komutlar (en azından basit görünümde) veri iletmek için belleğe komutlar ve I / O cihazlarını çalıştırmak için I / O veri yollarındaki komutlardır.
Daniel R Hicks,

Herhangi bir CPU'nun merkezinde (basitçe) basit bir prosedür uygulamak için bağlanmış bir mantık var: Değeri yönerge adres kayıt defterinden alın, belleğe gönderin, belleğin döndürdüğü komutu alın ve daha sonra çok daha fazlasını sıkın talimatın ne anlama geldiğini ve nasıl uygulanacağını "anlayan" karmaşık kablolu mantık yuvası. Oh, ve oradaki bir yerde, yönerge adres kayıt defterini arttırın.
Daniel R Hicks,

Okuyucular soru ile ilgilenebilir Bilgisayar nasıl çalışır? üzerinde üzerinde Bilgisayar Bilimleri .
Raphael

Yanıtlar:


88

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.


2
Tamam, anlıyorum, sanırım :) Bu yüzden komut bit işlemcinin aldığı verilerle işlem yapmasını sağlayacak "anahtarları" değiştirir?
Simon Verbeke,

4
@Simon Verbeke, kesinlikle doğru. Sadece işlemcideki elektrik sinyallerinin akışını yönlendirmek için anahtarlar arasında geçiş yaparlar (ayrıca daha fazla komutu tekrar yüklemek için yönlendirebilirler!). Anahtar analojisi iyidir, çünkü her şey dijitaldir (mantık 1/0 veya doğru / yanlış). Sadece bildiğiniz gibi, mantık seviyesi gerçek bir voltajdır. 0 veya 1 olanı belirtmek mühendisin görevidir (örneğin, bir mantık 1, 2 volttan daha fazla olarak belirtilebilir).
Atılım

1
Derleyicinin veya derleyicinin aşağıya doğru her şeyi kaynattığı "İkili eşdeğeri komutları" opcod olarak adlandırılır. MIPS veya ARM gibi bir RISC mimarisinin opcode yapısına bakarsanız, opcode içindeki çeşitli bitlerin belirli işlemlerle nasıl eşleştiğini görebilirsiniz. Intel, uzun süre ve tekrar tekrar uzatılma eğiliminden dolayı, artık basit bir haritalama yapısına sahip değildir.
LawrenceC

3
Hayır, x86 mimarisinin uzun ömürlü ve zaman ve tekrar tekrar genişletilmesi nedeniyle, tek tek bitlerin işlemlerde mikro işlemlere eşleştirilmesinin MIPS veya ARM'de olduğu gibi kesilmiş ve kuru olmadığından bir dereceye kadar (bakınız d.umn.edu/~gshute/spimsal/talref.html , örneğin, Intel opcodes böyle bir şey değildir). Intel 1978'de x86 CPU'ları piyasaya sürdüğünde "RISC" hakkında çok fazla bir fikir olduğunu sanmıyorum.
LawrenceC

5
Sadece bazı CPU'ların mikro kodlanmış olduğu not edilmemelidir . Bazıları (çoğunlukla daha küçük cihazlar) doğrudan montaj işlemlerinde çalışır. Bu mimariye bağlıdır.
Sahte Adı

37

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


5
Araba kırma pedalı ile güzel bir benzetme.
rjmunro

10

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


2
Ayrıca, "mov" anımsatıcı sembolünün bu belirli bit kalıba atanmasının tamamen keyfi olduğunu belirtmekte fayda var . Prensipte bu talimatı "oof" olarak adlandıran bir montajcı yazabilirdim ve hatırlaması zor olmaktan öte işe yarayabilir.
dmckee


4

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


7
AND, OR ve NOT gibi mantıksal işlemler ve bit kaydırmanın eklenmesi daha temeldir. Ekleme aslında bu işlemler açısından ifade edilebilir. Aslında bu işlemleri gerçekleştirmekten başka bir şey yapmayan ayrık IC'ler (Texas Instruments LS serisi) vardır ve bunlardan bir CPU türünü oluşturmak mümkündür. Google, örneğin bir oyunun CPU olmadan nasıl yapıldığını görmek için "Pong şematik".
LawrenceC,

Daha fazla yazılım bakış açısıyla demek istedim :) Evet donanım / mantık anlamında delice bir NAND ve NOR kapıları var. İyi bir nokta.
n0pe

2

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.