Mikroişlemci için maksimum opcod sayısı


13

resim açıklamasını buraya girin

Soru için maksimum opcode sayısı nedir, cevap c seçeneğidir, ancak bence bu seçenek d'dir, çünkü her adres her bir bellek konumunu belirtir, 16 adres satırı vardır, yani 2 ^ 16 adres yani 2 ^ 16 bellek konumu.

Bu nedenle, her konum bir opcode içeriyorsa, toplam 2 ^ 16 konum 2 ^ 16 opcode içerir ve maksimum opcode sayısıdır, ancak cevap c olarak verilir, bu da 2 ^ 12'dir. Bu nasıl mümkün olabilir?


7
Soru, ISA'da kaç FARKLI opcodun mümkün olduğunu sormaktır, mümkün olan en büyük programı kaç talimat oluşturabileceğini değil.
Brian Drummond

5
@BrianDrummond - bu yorumla birlikte, sadece ISA'nın evrensel olmayan çalışma şekli hakkında varsayımlar yaparsanız soru önemlidir. Örneğin, Z80'in 8 bitlik bir veri yolu vardır, ancak 800 farklı geçerli opcodun bulunduğu bir bölgede vardır - çünkü mevcut işlemleri genişletmek ve değiştirmek için önek bayt kullanır.
Jules

15
Kitapta ifade edilen soru anlamsız. Veri yolu boyutu ile opcode boyutu arasında doğal bir doğrudan yazışma yoktur. JVM, 32 bit veri modelini temel alır ancak 8 bit opcode sahiptir.
chrylis -on grev-

10
Bu soru, soruda verilenin ötesinde çok fazla bilgiye sahip olmadıkça tutarsızdır. Yanıt almak için sürecin özellikleri hakkında birçok varsayım yapmak zorundayız - gerçek dünyadaki işlemcilerin büyük çoğunluğu için doğru olmayan varsayımlar!
David Schwartz

14
Soru saçmalık. Gerekirse, bir talimat op kodu birden fazla bellek sözcüğünü kapsayabilir. Doğal bir sınır yoktur.
Hot Licks

Yanıtlar:


31

Tüm seçenekler yanlış . Bir işlemcinin uygulayabileceği maksimum (benzersiz) opco sayısı, veri yolu genişliği ile sınırlı değildir.


Normalde bir 12+ bit CPU, veri komut başına bir komut olacak şekilde tasarlanmıştır, böylece çoğu komutu tek seferde okuyabilir. Böylece normal bir CPU 2 ^ 12 opcode sınırlandırılarak tasarlanabilir.

2 ^ 12 = 4096'dan fazla opcode sahip mevcut CPU mimarileri çok nadirdir, çünkü çok fazla ihtiyaç duyulmaz çünkü çok fazla - öğrenmesi için çok fazla, gerçekten kullanışlı olmak için çok fazla, çok fazla maliyetli silikon alan boşa harcanır.

Güncelleme : Yorumlarda belirtildiği gibi, x86 komut setinin tüm olası varyasyonları, nasıl saydığınıza bağlı olarak 6000'den fazla olabilir! Bu daha çok bir istisna.

Ancak 4 bit CPU 2 ^ 4 = 16 için talimatlar çoğu zaman yeterli değildir, bu nedenle bu tür işlemcilerin çoğu daha fazlasına sahiptir.

Bir CPU'nun veri yoluna uyandan daha fazla opcode sahip olmasının birden fazla yolu ve nedeni olabilir:

Kelime yayma talimatları

Bir işlemcinin tek bir veri döngüsünde bir komutu okumasına gerek yoktur - birden fazla ardışık döngü kullanabilir. Aslında çoğu CPU, opcode alanını genişletmek yerine talimat argümanları için daha yaygın olarak kullanılmasına rağmen.

Örnek: intel 4004'te veri / adres satırları olarak çoğullanan sadece 4 satır, 4 bit veri sözcüğü, ancak 8 bit talimatlarda 40'tan fazla opcod vardır.

Önekler ve Sonekler

Bir (CISC) işlemcinin gerektiği kadar komut öneki ve soneki olabilir.

Bunlar, yaptıklarını değiştirmek için gerçek bir talimatın önüne eklenir - biraz veya tamamen.

"Benzersiz opcode" tanımınıza bağlıdır. Bir komutun veri olmayan herhangi bir parçasının opcode'un bir parçası olduğunu varsayarsa, toplam sayıları olası tüm varyasyonları içerecektir. Bununla birlikte, bazıları bu eklerin talimatın farklı parçaları olduğuna inanmaktadır.

Örnek: Intel x86 CPU'larda aslında 4M opcode yoktur. Bununla birlikte, tüm önekleri bir opcode'un parçası olarak sayarsanız, modern CPU'lar 15 bYtes'e kadar olan talimatlara izin verir - bu bir çok olası opcodes'tir. Birçoğu sadece aynı şeyi yapacak olsa da - bu onların "benzersiz" olmalarının tanımına bağlıdır.

Modlar

Bir işlemcinin, tamamen farklı bir opcodes setine sahip olabileceği birden fazla çalışma modu olabilir.

Örnekler: intel x86_64, 32-bit (gerçek / v86 / korumalı) ve farklı opcode sahip 64-bit modlarına sahiptir. ARM işlemcilerin ARM 32 bit ve başparmak 16 bit modları olabilir.

Veri yolu biti çoğullama

Sorular "veri satırlarını" ve "adres satırlarını" belirtir, ancak hem dahili veri yolu hem de dahili adres veri yolu, gerçek veri yolu hatlarının miktarından daha geniş olabilir.

Çoğullanmış veri yolu verileri sırayla, yani ilk yarı, sonra ikinci yarı olarak gönderilir. CPU onu tam boyutlu dahili kayıtlara kaydeder ve bunlarda çalışır.

Bu genellikle maliyetleri ve / veya çip fiziksel ayak izi boyutunu azaltmak için yapılır.

Örnekler arasında Intel 4004, LPC veri yolu üzerindeki herhangi bir şey ve Nintendo64'ün CPU'su olan ve yalnızca 32 satırlı veri yolu olan NEC VR4300 yer alır.

Paralel veri yolu yok

Bir önceki noktanın devamı olarak, bir CPU'nun paralel bir veriyolu göstermesine bile gerek yoktur.

CPU kolayca yalnızca I2C, SPI vb. Sıralı bir veri yolunu açığa çıkarabilir.

Muhtemelen böyle özel bir CPU üretmek için çok uygun maliyetli değildir, ancak çok sayıda düşük pinli sayı mikroişlemcisi (hem CPU hem de bellek içerir), bu değerli pinleri daha kullanışlı bir şey için kaydetmek için bu şekilde yapılır. Örneğin, atmel ATTINY4 / 5/6/10 yongalarının toplamda 6 pimi vardır, ikisi güç için, biri sıfırlama için, üç genel amaçlı. Talimatlar sırayla tescilli 3 satırlı arayüz üzerinden gönderilir.

Mikrodenetleyici tanımınıza bağlı olarak, bir mikroişlemci olarak düşünülebilir veya bir tane işlemek üzere programlanabilir (yani sıralı bir veri yolu veya veri yolu ile özel bir CPU simüle etmek).

Bu soru açıkça bir tür veri yolu IS'nin açıkta olduğunu, ancak paralel bir veri yolu olduğunu belirtmez. Teoride, 12 hatlı veri yolu tek bir seri veri hattı ve 11 yardımcı / toprak / durum hattından oluşabilir , ancak bu muhtemelen çok akılcı bir fikir değildir.

Özel talimat veri yolu

Aslında bir işlemcinin veriyle aynı veri yolu hatlarındaki talimatları kabul etmesi bile gerekmez.

Bu, ALU'ların bir mikroişlemcinin bir parçası olmaktan ziyade ayrık yongalar olduğu, ancak şimdi çoğu zaman ekonomik olarak uygun olmadığı durumlarda kolayca olabilir.

Ancak hiçbir şey, yalnızca talimatlar için özel hatlara sahip bir CPU uygulamanızı engellemez. Böyle bir CPU, bir veri dizisinde (SIMD) tek bir işlem yapılması gerektiğinde yararlı olabilir.

Talimat veri yolu genişliği tamamen keyfi olduğundan, mümkün olan maksimum opcode sayısı da öyle.


4
İlgi çekici bir nokta olarak, x86-64'te kime sorduğunuza bağlı olarak 1000 ile 6000 arasında opcode sahiptir ( 1 , 2 , 3 ).
LMS

Asla onları saymaya çalışmadım, ama tüm varyasyonlarla mantıklı.
Jack White

13

Maksimum sayıda opcod aslında birkaç şekilde düşünülebilir:

  • Mümkün olan en fazla sayıda benzersiz opcod

Bu, veri yolu genişliğinden değil, talimat genişliğinden toplanabilir. Genellikle bir opcode tek bir bellek erişimine sığar ve daha sonra cevap 2 ^ 12 olur. Ancak bir işlemci, olası opcod sayısını 2 ^ 12'nin üzerine çıkarmak için çok döngülü bir opcode kod çözme işlemi uygulayabilir.

  • İşlemcinin doğrudan ele alabileceği maksimum talimat (opcode içeren) sayısı.

İşlemcinin doğrudan adresleyebileceği maksimum komut (opcode içeren) sayısı, adres veri yolu genişliği (2 ^ 16) ile sınırlıdır. Bununla birlikte, dolaylı olarak işlemci daha fazla belleği ele alabilir, örneğin bir opcode, başka bir kaynaktan talimatlar almak için sayfa değiştirmeyi veya benzer bir işlemi kolaylaştırabilir.


2
Soru o kadar belirsiz değil. İkinci noktanız olarak yorumlanması gerekiyorsa, " saklanabilen / adreslenebilen / ... maksimum komut sayısı" olarak formüle edilirdi. "Opcode" kelimesi, adreslenebilirlik aralığıyla değil, talimat kümesi ile ilgili olduğunu açıkça ortaya koymaktadır.
dim

11
Çok kelimeli op kodlarının oldukça mümkün olduğunu belirtmek için +1, bu yüzden soru çok iyi değil.
Spehro Pefhany

2
Anadili İngilizce olanların genellikle kullandıkları kelimelerin çıplak anlamlarını anlamalarını zorlaştıran bir önyargıları vardır. Uluslararası İngilizce konuşanlar okuduğunda veya duyduğunda ikinci (amaçlanan) anlamı alamayabilirler. Aynı şey bir öğrenci yeni bir ifade öğrendiğinde de geçerlidir - formülasyonlar belirsiz ise yanlış anlaşılması kolaydır. Bu yüzden, öğrencinin her bir talimatın içinde bir opcode parçası içerdiğini öğrendiğini tahmin ediyorum. Evet, bunun doğru olduğunu söyleyebilirim. Gerçekten, 01. sorudaki ifadeler belirsizdir.
HKOB

4
@SpehroPefhany Evet, soru kuşkusuz başka bağlam olmadan belirsiz. OP'ye, talimat uzunluğu ne olursa olsun, opcodeun ilk bellek erişiminde getirileceği öğretilmişse, cevap (c) 'dir, aksi takdirde cevap verilemez. Mesele şu ki, OP EE.SE sorusunda yeterli bağlam vermiş miydi, yoksa öğretmen (ler) i belirsiz bir soru sormuş ve formüle edilmiş bir şey vermiş miydi?
Lorenzo Donati - Codidact.org

1
@SpehroPefhany True :) Ama İngilizce - belki de hafif rahatsızlıkları için - aynı zamanda Uluslararası İngilizce dünyasının bir parçasıdır ( bbc.com/capital/story/… )
HKOB

4

Bu soru ile karıştırılmaya hakkınız var - çok kötü yazılmış.

Ancak, bu sorunun amacının makine için talimat sözcük boyutunu belirlemek olduğundan şüpheleniyorum . Sağlanan eksik veriler göz önüne alındığında, bu veri yolunun genişliğine karşılık gelmelidir ; adres veriyolunun genişliği ana belleğin maksimum boyutunu belirler.

Uygulamada, belirli bir makinenin talimatlarının "opcode" alanı genellikle talimatın kendisinden önemli ölçüde daha küçüktür, ancak talimat veri veri yolundan daha geniş olabilir.

Eski Motorola 68008 bunun bir örneğidir - 8 bitlik bir veri yoluna sahip 68000'in maliyetini düşüren bir versiyonuydu, ancak aynı 16 bitlik talimat kelimelerini kullandı; kaynak ve hedef kayıtlarını ve hepsi opcode değil, işlenen olarak kabul edilmesi gereken adresleme modunu tanımlayın ). Adresleme modu bitlerini bazılarının yaptığı gibi opcode'a eklerseniz, toplamda 10 bitlik bir opcode alanı oluşturulur. Gerçek talimatlar bazı adresleme modlarında önemli ölçüde daha uzun olabilir.


"geri kalanı kaynak ve hedef kayıtlarını ve hepsi opcode değil, işlenen olarak kabul edilmesi gereken adresleme modunu tanımlar" ... bu biraz fikir. Bir RISC mimarisi için bu açıkça doğrudur, ancak çoğu durumda CISC mimarileri o kadar ad hoc bir şekilde tanımlanır ki, muhtemelen her kombinasyonu ayrı bir opcode olarak saymak mantıklıdır. Z80 bir örnektir - talimatlarının çoğunun opcode bitlerinde kodlanmış bir veya iki kayıt seçimi olsa da, adresleme modları tamamen geçici ve önekler yorumlamayı değiştirir ...
Jules

... hem adresleme modu hem de kayıt birçok durumda, bu da bit alanlarındaki kayıtların yorumlanmasını basitten biraz daha az yapar. Çoğu dokümantasyon ve montajcı, her bir talimat ve kayıt kombinasyonunun ayrı bir opcode olduğu ve sadece anlık değerlerin ve dolaylı adres ofset değerlerinin gerçekte işlenenler olduğu anlayışı üzerinde çalışıyor gibi görünmektedir. Bu dünya görüşü, standart derleme dil formatının kayıtların, anımsatıcının bir parçası olarak kodlanan, bağımsız değişken olarak verilmeyen bir komutla çalıştırıldığı önceki 8080 ile paylaşılmaktadır.
Jules

Doğru - Z80 bu şekilde 8 bitlik mikro kodlu CPU'lara özgüdür. 6502 kod çözme devresinin optimize edilmesine izin veren daha mantıklı bir opcode eşlemesine sahipti. Ancak özellikle talimatlarında çok farklı adresleme modu ve hedef kayıt alanları olan 68K hakkında konuşuyordum. Bunları çıkardıktan sonra, opcode alanı hala 68008'in veri yolundan daha geniş olabilir.
Chromatix

1

Edson DeCastro, PDP-8'in neredeyse aynı şekilde 15 adres ve 12 veri hattına sahip bir bilgisayar tasarladı.

Dolayısıyla, yayınlanan sorunun cevabı 574 op-kodu, çünkü PDP-8'in 284 op-kodu vardı ve Ed sadece yarı deli.


2
Sorunun neden anlamsız olduğu düşünüldüğünde, neden aşağı oyun - bu kadar iyi bir cevap olduğundan emin değilim. :)
Jules

Şüpheliyim, aşağı oyun 284 * 2 = 568 değil, 574 değil.
Mark
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.