Maksymalna liczba kodów dla mikroprocesora


13

wprowadź opis zdjęcia tutaj

Jaka jest maksymalna liczba kodów dla pytania, odpowiedź jest opcją c, ale myślę, że jest to opcja d, ponieważ każdy adres określa każdą lokalizację pamięci, istnieje 16 linii adresu, co oznacza 2 ^ 16 adresów, tj. 2 ^ 16 miejsc w pamięci.

Tak więc, jeśli każda lokalizacja zawiera jeden kod operacji, łącznie 2 ^ 16 lokalizacji zawiera 2 ^ 16 kodów i jest to maksymalna liczba kodów, ale odpowiedź jest podana jako c, czyli 2 ^ 12. Jak to jest możliwe?


7
Pytanie brzmi: ile RÓŻNYCH kodów w ISA, a nie ile instrukcji może stanowić największy możliwy program.
Brian Drummond,

5
@BrianDrummond - przy tej interpretacji pytanie jest jednak sensowne tylko wtedy, gdy przyjmiesz założenia dotyczące działania ISA, które nie są uniwersalne. Na przykład, Z80 ma 8-bitową magistralę danych, ale gdzieś w regionie 800 różnych ważnych kodów operacyjnych - ponieważ wykorzystuje przedrostki bajtów do rozszerzania i zmieniania dostępnych operacji.
Jules

15
Pytanie sformułowane w książce nie ma sensu. Nie ma nieodłącznej bezpośredniej zależności między rozmiarem magistrali a rozmiarem kodu. JVM jest oparty na 32-bitowym modelu danych, ale ma 8-bitowe kody operacyjne.
Chrylis

10
To pytanie jest niespójne, chyba że mamy dużo informacji wykraczających poza to, co podano w pytaniu. Musielibyśmy poczynić wiele założeń dotyczących charakterystyki procesu, aby uzyskać odpowiedź - założenia, które nie są prawdziwe dla zdecydowanej większości rzeczywistych procesorów!
David Schwartz

14
Pytanie to bzdury. Jeśli to konieczne, kod operacji może obejmować wiele słów pamięci. Nie ma nieodłącznego ograniczenia.
Hot Licks

Odpowiedzi:


31

Wszystkie opcje są złe . Maksymalna liczba (unikalnych) kodów operacyjnych, które procesor może wykonać, nie jest ograniczona szerokością magistrali.


Zwykle 12-bitowy procesor jest zaprojektowany tak, aby mieć jedno polecenie na słowo danych, dzięki czemu może odczytać większość instrukcji za jednym razem. Zatem normalny procesor musi być zaprojektowany do limitu 2 ^ 12 kodów.

Istniejące architektury procesorów, które mają więcej niż 2 ^ 12 = 4096 kodów, są bardzo rzadkie po prostu dlatego, że prawie nigdy nie potrzeba tak wielu - zbyt wielu do nauczenia się, zbyt wielu, aby były naprawdę przydatne, zbyt dużej ilości zmarnowanej kosztownej przestrzeni krzemowej.

Aktualizacja : Jak wskazano w komentarzach, wszystkie możliwe odmiany zestawu instrukcji x86 mogą w rzeczywistości sumować ponad 6000, w zależności od tego, jak liczyć! Jest to jednak bardziej wyjątek.

Jednak dla 4-bitowego procesora 2 ^ 4 = 16 instrukcje bardzo często nie wystarczają, więc wiele takich procesorów ma więcej.

Może być wiele sposobów i powodów, dla których procesor może zawierać więcej kodów operacyjnych niż to, co pasuje do szyny danych, w tym:

Instrukcje obejmujące wszystkie słowa

Procesor nie musi czytać polecenia w jednym cyklu danych - może korzystać z wielu kolejnych cykli. W rzeczywistości większość procesorów tego nie robi - chociaż jest częściej używana do argumentów instrukcji niż do rozszerzania przestrzeni opcode.

Przykład: intel 4004 ma tylko 4 linie, które są multipleksowane jako linie danych / adresu, 4-bitowe słowo danych, ale więcej niż 40 kodów w instrukcjach 8-bitowych.

Przedrostki i przyrostki

Procesor (CISC) może mieć tyle prefiksów i sufiksów instrukcji, ile potrzebuje.

Są one poprzedzone rzeczywistą instrukcją, aby zmienić to, co robi - albo trochę, albo całkowicie.

To zależy od twojej definicji „unikalnego kodu operacyjnego”. Jeśli ktoś zakłada, że ​​jakakolwiek część instrukcji, która nie jest danymi, jest częścią kodu operacyjnego, ich całkowita liczba obejmowałaby wszystkie możliwe odmiany. Jednak niektórzy uważają, że te afiksy są odrębnymi częściami instrukcji.

Przykład: procesory Intel x86 nie mają w rzeczywistości 4M kodów. Jeśli jednak policzysz wszystkie prefiksy jako część kodu operacyjnego, nowoczesne procesory pozwalają na instrukcje o długości 15 bajtów - to DUŻO możliwych kodów operacyjnych. Chociaż wielu po prostu zrobi to samo - zależy to od zdefiniowania ich jako „unikalnych”.

Tryby

Procesor może mieć wiele trybów działania, w których może mieć zupełnie inny zestaw kodów operacyjnych.

Przykłady: intel x86_64 ma tryby 32-bitowe (rzeczywiste / v86 / chronione) i 64-bitowe, które mają różne kody operacyjne. Procesory ARM mogą mieć tryby ARM 32-bit i thumb 16-bit.

Multipleksowanie bitów magistrali

W pytaniach podano „linie danych” i „linie adresowe”, jednak zarówno wewnętrzna magistrala danych, jak i wewnętrzna magistrala adresowa mogą być szersze niż ilość rzeczywistych linii magistrali.

Dane zmultipleksowanej magistrali są wysyłane sekwencyjnie, tj. Pierwsza połowa, a następnie druga połowa. Procesor przechowuje go w pełnowymiarowych rejestrach wewnętrznych i na nich działa.

Odbywa się to często w celu zmniejszenia kosztów i / lub zmniejszenia fizycznej wielkości mikroukładu.

Przykłady obejmują intel 4004, wszystko na szynie danych LPC i NEC VR4300, procesor Nintendo64, który miał tylko 32-liniową szynę danych.

Brak magistrali równoległej

Jako kontynuacja poprzedniego punktu, procesor wcale nie musi w ogóle wystawiać szyny równoległej.

Procesor może łatwo odsłonić tylko sekwencyjną magistralę, taką jak I2C, SPI itp.

Prawdopodobnie nie jest bardzo opłacalne wytwarzanie tak dedykowanego procesora, ale wiele mikrokontrolerów o niskiej liczbie pinów (obejmujących zarówno procesor, jak i pamięć) jest stworzonych w ten sposób, aby zapisać te cenne piny na coś bardziej przydatnego. Na przykład chipy atmel ATTINY4 / 5/6/10 mają tylko 6 styków, dwa do zasilania, jeden do resetowania, trzy do ogólnego zastosowania. Instrukcje są przesyłane sekwencyjnie przez zastrzeżony 3-liniowy interfejs.

W zależności od definicji mikrokontrolera, może być uważany za mikroprocesor lub może być zaprogramowany do działania jako jeden (tj. Do symulacji dedykowanego procesora z sekwencyjną magistralą lub szynami).

To pytanie wyraźnie stwierdza, że ​​jakiś rodzaj magistrali danych jest narażony, ale nie to, że jest to szyna równoległa. Teoretycznie dane 12-linia autobus może składać się z jednego do szeregowej transmisji danych linii i 11 auxilary / parter / status linii , mimo że prawdopodobnie nie będzie to bardzo rozsądny pomysł.

Dedykowana magistrala instrukcji

W rzeczywistości procesor nie musi nawet przyjmować instrukcji na tych samych liniach magistrali, co dane.

Może się tak łatwo zdarzyć, gdy ALU były dyskretnymi układami scalonymi, a nie częścią mikroprocesora, ale obecnie nie są ekonomicznie opłacalne.

Ale nic nie stoi na przeszkodzie, aby wdrożyć procesor z dedykowanymi liniami tylko dla instrukcji. Taki procesor może być przydatny, gdy trzeba wykonać jedną operację na tablicy danych (SIMD).

Ponieważ szerokość magistrali instrukcji jest całkowicie dowolna, więc maksymalna możliwa liczba operacji kodu.


4
Jako ciekawostkę, x86-64 ma od 1000 do 6000 kodów, w zależności od tego, kogo zapytasz ( 1 , 2 , 3 ).
LMS

Nigdy nie próbowałem ich nawet policzyć, ale przy wszystkich odmianach ma to sens.
Jack White

13

Maksymalną liczbę kodów operacyjnych można rzeczywiście wymyślić na kilka sposobów:

  • Maksymalna możliwa liczba unikalnych kodów.

Można to zebrać na podstawie szerokości instrukcji, a nie szerokości magistrali danych. Zwykle opcode pasuje do pojedynczego dostępu do pamięci, a wtedy odpowiedź to 2 ^ 12. Ale procesor może zaimplementować proces cyklicznego dekodowania opkodu, aby zwiększyć liczbę możliwych kodów wykraczających poza 2 ^ 12.

  • Maksymalna liczba instrukcji (zawierających kody operacyjne), które procesor może bezpośrednio rozwiązać.

Maksymalna liczba instrukcji (zawierających kody), które procesor może bezpośrednio adresować, jest ograniczona szerokością szyny adresowej (2 ^ 16). Pośrednio procesor może jednak być w stanie zaadresować więcej pamięci, np. Kod operacji może ułatwić zamianę strony lub podobną operację w celu pobrania instrukcji z innego źródła.


2
Pytanie nie jest tak dwuznaczne. Gdyby miał być interpretowany jako twój drugi punkt, zostałby sformułowany jako „maksymalna liczba instrukcji, które mogą być przechowywane / zaadresowane / ...”. Słowo „opcode” wyjaśnia, że ​​chodzi o zestaw instrukcji, a nie o zakres adresowalny.
słaba utrata wiary w SE

11
+1 za wzmiankę o tym, że wielo-słowowe kody operacyjne są całkiem możliwe, więc pytanie nie jest zbyt dobre.
Spehro Pefhany

2
Rodzimi użytkownicy języka angielskiego często mają uprzedzenia, które utrudniają im zrozumienie samego znaczenia używanych przez nich słów. Kiedy międzynarodowi anglojęzyczni czytają lub słyszą, mogą nie mieć drugiego (zamierzonego) znaczenia. To samo dotyczy sytuacji, gdy uczeń uczy się nowego wyrażenia - jeśli sformułowania są niejednoznaczne, łatwo je zrozumieć. Sądzę więc, że uczeń nauczył się, że każda instrukcja zawiera w sobie część opcode. Tak, powiedziałbym, że to prawda. Naprawdę brzmienie pytania 01. jest dwuznaczne.
HKOB

4
@SpehroPefhany Tak, pytanie jest niewątpliwie dwuznaczne bez dalszego kontekstu. Jeśli nauczono OP, że niezależnie od długości instrukcji kod operacji zostanie pobrany przy pierwszym dostępie do pamięci, wówczas odpowiedź brzmi (c), w przeciwnym razie nie da się odpowiedzieć. Chodzi o to, czy OP dał wystarczający kontekst w swoim pytaniu EE.SE, czy też jego nauczyciel (nauczyciele) podali coś oczywistego i sformułowali dwuznaczne pytanie?
Lorenzo Donati - Codidact.org

1
@SpehroPefhany Prawda :) Ale Anglicy - być może z ich lekkim rozdrażnieniem - są także częścią międzynarodowego świata angielskiego ( bbc.com/capital/story/… )
HKOB

4

Masz rację, że to pytanie Cię dezorientuje - jest bardzo źle napisane.

Podejrzewam jednak, że celem tego pytania jest określenie wielkości słowa instrukcji dla maszyny. Biorąc pod uwagę bardzo niekompletne dane, musi to odpowiadać szerokości szyny danych ; szerokość magistrali adresowej określa maksymalny rozmiar pamięci głównej.

W praktyce pole „opcode” instrukcji danej maszyny jest często znacznie mniejsze niż sama instrukcja, ale instrukcja może być szersza niż magistrala danych.

Przykładem może być stara Motorola 68008 - była to wersja 68000 o obniżonej cenie z 8-bitową magistralą danych, ale używała tych samych 16-bitowych słów instrukcji, w których zazwyczaj 7 bitów określa kod operacyjny (reszta identyfikować rejestry źródłowy i docelowy oraz tryb adresowania, z których wszystkie należy traktować jako operandy , a nie opcode ). Jeśli w opkodzie umieścisz bity trybu adresowania, jak to robią niektórzy, to w sumie powstanie 10-bitowe pole opkodu. Rzeczywiste instrukcje mogą być znacznie dłuższe w niektórych trybach adresowania.


„reszta identyfikuje rejestry źródłowy i docelowy oraz tryb adresowania, z których wszystkie należy traktować jako operandy, a nie opcode”… cóż, to trochę kwestia opinii. W przypadku architektury RISC jest to oczywiście prawda, ale w wielu przypadkach architektury CISC są zdefiniowane w taki sposób ad hoc, że prawdopodobnie sensowne jest policzenie każdej kombinacji jako osobnego kodu operacyjnego. Przykładem jest Z80 - podczas gdy wiele jego instrukcji ma jeden lub dwa wybory rejestru zakodowane w bitach kodu operacyjnego, tryby adresowania są całkowicie ad-hoc, a prefiksy zmieniają interpretację ...
Jules

... zarówno tryb adresowania, jak i rejestr w wielu przypadkach, co sprawia, że ​​interpretacja rejestrów z pól bitowych jest nieco mniej prosta. Wydaje się, że większość dokumentacji i asemblerów działa na zasadzie zrozumienia, że ​​każda kombinacja instrukcji i rejestrów jest osobnym kodem operacyjnym, a tylko wartości bezpośrednie i wartości pośredniego przesunięcia adresu są faktycznie operandami. Ten pogląd na świat jest podzielany przez jego poprzednika, intel 8080, gdzie standardowy format asemblera miał rejestry obsługiwane przez instrukcję zakodowaną jako część mnemonika, nie podaną jako argumenty.
Jules

To prawda, że ​​Z80 jest typowy dla 8-bitowych mikrokodowanych procesorów. 6502 miał bardziej logiczne mapowanie opcode, co pozwoliło zoptymalizować układ dekodowania. Ale w szczególności mówiłem o 68K, który ma bardzo wyraźne pola trybu adresowania i rejestru docelowego w swoich instrukcjach. Po ich odjęciu pole opcode może być szersze niż magistrala danych 68008.
Chromatix,

1

Edson DeCastro zaprojektował komputer prawie dokładnie taki, PDP-8, z 15 adresami i 12 liniami danych.

Tak więc odpowiedź na zadane pytanie to 574 kody operacyjne, ponieważ PDP-8 miał 284 kody operacyjne, a Ed jest w połowie szalony.


2
Nie jestem pewien, dlaczego głosowanie negatywne - jest to tak dobra odpowiedź jak każda, biorąc pod uwagę, że pytanie jest w zasadzie bez znaczenia. :)
Jules

Podejrzewam, że głosowanie negatywne wynika z tego, że 284 * 2 = 568, a nie 574.
Mark
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.