Numero massimo di codici operativi per un microprocessore


13

inserisci qui la descrizione dell'immagine

Qual è il numero massimo di codici operativi per la domanda, la risposta è l'opzione c, ma penso che sia l'opzione d, perché, ogni indirizzo specifica ogni posizione di memoria, ci sono 16 linee di indirizzo, il che significa 2 ^ 16 indirizzi, cioè 2 ^ 16 posizioni di memoria.

Quindi, se ogni posizione contiene un opcode, il totale di 2 ^ 16 posizioni contiene 2 ^ 16 codici op ed è il numero massimo di codici op, ma la risposta è data come c, che è 2 ^ 12. Com'è possibile?


7
La domanda è: quanti DIVERSI codici operativi nell'ISA, non quante istruzioni possono costituire il programma più ampio possibile.
Brian Drummond,

5
@BrianDrummond - con questa interpretazione, tuttavia, la domanda è significativa solo se si fanno ipotesi sul modo in cui l'ISA funziona che non sono universali. Ad esempio, lo Z80 ha un bus dati a 8 bit, ma da qualche parte nella regione di 800 diversi codici operativi validi - perché utilizza byte prefisso per estendere e variare le operazioni disponibili.
Jules

15
La domanda formulata nel libro non ha senso. Non esiste una corrispondenza diretta intrinseca tra dimensione del bus e dimensione del codice operativo. JVM si basa su un modello di dati a 32 bit ma ha codici operativi a 8 bit.
Chrylis

10
Questa domanda è incoerente a meno che non abbiamo molte informazioni oltre a quelle fornite nella domanda. Dovremmo fare molte ipotesi sulle caratteristiche del processo per ottenere una risposta - ipotesi che non sono vere per la stragrande maggioranza dei processori del mondo reale!
David Schwartz,

14
La domanda è una cazzata. Se necessario, un codice operativo di istruzione può comprendere più parole di memoria. Non esiste un limite intrinseco.
Hot Licks,

Risposte:


31

Tutte le opzioni sono sbagliate . Il numero massimo di codici operativi (univoci) che un processore può eseguire non è limitato dalla larghezza del bus.


Normalmente una CPU da 12+ bit è progettata per avere un comando per parola di dati in modo che possa leggere la maggior parte delle istruzioni in una volta sola. Quindi una CPU normale deve essere progettata per un limite di 2 ^ 12 codici operativi.

Le architetture di CPU esistenti che hanno più di 2 ^ 12 = 4096 codici operativi sono molto rare semplicemente perché non ne abbiamo quasi mai bisogno, troppe da imparare, troppe per essere davvero utili, troppo sprecate di spazio costoso per il silicio.

Aggiornare : Come è stato sottolineato nei commenti, tutte le possibili variazioni del set di istruzioni x86 possono effettivamente aggiungere fino a più di 6000 a seconda di come conti! Questa è più un'eccezione però.

Tuttavia, per una CPU a 4 bit 2 ^ 4 = 16 le istruzioni spesso non sono sufficienti, quindi molti di questi processori ne hanno di più.

Esistono diversi modi e motivi per cui una CPU può incorporare più codici operativi rispetto a quelli inseriti nel bus dati, tra cui:

Istruzioni per lo spanning delle parole

Un processore non ha bisogno di leggere un comando in un singolo ciclo di dati: può utilizzare più cicli consequenziali. In effetti la maggior parte delle CPU non lo fa, sebbene sia più comunemente usata per argomenti di istruzioni piuttosto che per espandere lo spazio del codice operativo.

Esempio: Intel 4004 ha solo 4 righe che sono multiplexate come righe di dati / indirizzo, word di dati a 4 bit, ma più di 40 codici operativi in ​​istruzioni a 8 bit.

Prefissi e suffissi

Un processore (CISC) può avere tutti i prefissi e i suffissi delle istruzioni di cui ha bisogno.

Quelli hanno il prefisso su un'istruzione reale per cambiare ciò che fa - un po 'o completamente.

Dipende dalla tua definizione di "codice operativo univoco". Se si presume che una parte di un'istruzione che non sia un dato sia parte di un codice operativo, il loro numero totale includerebbe tutte le possibili variazioni. Tuttavia, alcuni credono che quegli affissi siano parti distinte dell'istruzione.

Esempio: le CPU Intel x86 in realtà non hanno codici operativi 4M. Tuttavia, se si contano tutti i prefissi come parte di un codice operativo, le moderne CPU consentono istruzioni fino a 15 bYte - che è MOLTO possibile di codici operativi. Anche se molti faranno la stessa cosa, quindi questo dipende dalla definizione di essere "unici".

Modalità

Un processore può avere più modalità di funzionamento in cui può avere una serie completamente diversa di codici operativi.

Esempi: intel x86_64 ha modalità a 32 bit (reale / v86 / protetta) e 64 bit con codici operativi distinti. Le CPU ARM possono avere modalità ARM a 32 bit e pollice a 16 bit.

Multiplo dei bit del bus

Le domande indicano "linee dati" e "linee indirizzo", tuttavia sia il bus dati interno che il bus indirizzo interno possono essere più ampi della quantità di linee bus effettive.

I dati del bus multiplex vengono inviati in sequenza, ovvero prima metà, quindi seconda metà. La CPU lo memorizza in registri interni di dimensioni standard e opera su quelli.

Questo viene spesso fatto per ridurre i costi e / o le dimensioni dell'impronta fisica del chip.

Gli esempi includono Intel 4004, qualsiasi cosa sul bus dati LPC e NEC VR4300, la CPU di Nintendo64 che aveva solo bus dati a 32 linee.

Nessun bus parallelo

Come continuazione del punto precedente, una CPU non ha nemmeno bisogno di esporre affatto un bus parallelo.

Una CPU può facilmente esporre solo un bus sequenziale come I2C, SPI, ecc.

Probabilmente non è molto conveniente produrre una CPU così dedicata, ma molti microcontrollori a basso numero di pin (che includono sia CPU che memoria) sono fatti in questo modo per salvare quei preziosi pin per qualcosa di più utile. Ad esempio, i chip atmel ATTINY4 / 5/6/10 hanno solo 6 pin in totale, due per l'alimentazione, uno per il reset, tre per uso generale. Le istruzioni vengono inviate sequenzialmente tramite l'interfaccia proprietaria a 3 righe.

A seconda della definizione di microcontrollore, può essere considerato un microprocessore o può essere programmato per agire come uno (ovvero simulare una CPU dedicata con un bus o bus sequenziali).

Questa domanda afferma chiaramente che è esposto un tipo di bus dati , ma non che sia un bus parallelo. In teoria i dati a 12 linee di bus potrebbe consistere di un singolo dati seriali linea e 11 / terra auxilary / stato linee , anche se probabilmente non sarebbe un'idea molto sana.

Bus di istruzioni dedicato

In realtà un processore non ha nemmeno bisogno di accettare istruzioni sulle stesse linee di bus dei dati.

Questo potrebbe essere facilmente il caso in cui gli ALU erano chip discreti piuttosto che una parte di un microprocessore, ma non è economicamente praticabile ora per la maggior parte del tempo.

Ma nulla ti impedisce di implementare una CPU con linee dedicate solo per istruzioni. Tale CPU può essere utile quando è necessario eseguire una singola operazione su un array di dati (SIMD).

Poiché la larghezza del bus di istruzione è completamente arbitraria, è quindi possibile il conteggio massimo del codice operativo.


4
Come punto di interesse, x86-64 ha tra 1000 e 6000 codici operativi, a seconda di chi si chiede ( 1 , 2 , 3 ).
LMS

Non ho mai provato a contarli, ma con tutte le varianti ha senso.
Jack White,

13

Il numero massimo di codici operativi può essere effettivamente pensato in un paio di modi:

  • Il numero massimo possibile di codici operativi univoci.

Questo può essere raccolto dalla larghezza dell'istruzione e non dalla larghezza del bus dati. Di solito un codice operativo si adatta a un singolo accesso alla memoria, quindi la risposta è 2 ^ 12. Ma un processore potrebbe implementare un processo di decodifica del codice operativo multi-ciclo per estendere il numero di possibili codici operativi oltre 2 ^ 12.

  • Il numero massimo di istruzioni (contenenti codici operativi) che il processore può indirizzare direttamente.

Il numero massimo di istruzioni (contenenti codici operativi) che il processore può indirizzare direttamente è limitato dalla larghezza del bus dell'indirizzo (2 ^ 16). Indirettamente, tuttavia, il processore potrebbe essere in grado di indirizzare più memoria, ad esempio un codice operativo potrebbe facilitare lo scambio di pagine o un'operazione simile per recuperare le istruzioni da un'altra fonte.


2
La domanda non è così ambigua. Se dovesse essere interpretato come il tuo secondo punto, sarebbe stato formulato come "il numero massimo di istruzioni che possono essere memorizzate / indirizzate / ...". La parola "opcode" rende abbastanza chiaro che si tratta dell'insieme di istruzioni, non dell'intervallo indirizzabile.
debole fede perduta nella SE del

11
+1 per menzionare che i codici operativi multi-parola sono abbastanza possibili, quindi la domanda non è molto buona.
Spehro Pefhany,

2
I madrelingua inglesi hanno spesso un pregiudizio che rende difficile per loro capire semplicemente il significato spoglio delle parole che usano. Quando gli oratori inglesi internazionali lo leggono o lo ascoltano, potrebbero non ottenere il secondo significato (previsto). Lo stesso vale quando uno studente impara una nuova espressione: se le formulazioni sono ambigue è facile fraintendere. Quindi immagino che lo studente abbia appreso che ogni istruzione contiene al suo interno una parte di codice operativo. Sì, direi che è vero. In realtà, la formulazione della domanda 01. è ambigua.
HKOB

4
@SpehroPefhany Sì, la domanda è senza dubbio ambigua senza ulteriore contesto. Se al PO è stato insegnato che, qualunque sia la lunghezza dell'istruzione, il codice operativo verrà recuperato nel primo accesso alla memoria, quindi la risposta è (c), altrimenti è senza risposta. Il punto è: l'OP ha dato abbastanza contesto alla sua domanda EE.SE o il suo insegnante ha dato qualcosa per scontato e ha formulato una domanda ambigua?
Lorenzo Donati supporta Monica

1
@SpehroPefhany True :) Ma gli inglesi - forse con loro lieve fastidio - fanno anche parte del mondo inglese internazionale ( bbc.com/capital/story/… )
HKOB

4

Hai ragione a essere confuso da questa domanda - è scritto molto male.

Tuttavia, sospetto che lo scopo di questa domanda sia determinare la dimensione della parola istruzione per la macchina. Dati i dati molto incompleti forniti, questo deve corrispondere alla larghezza del bus dati ; la larghezza dell'indirizzo bus determina la dimensione massima della memoria principale.

In pratica, il campo "codice operativo" delle istruzioni di una determinata macchina è spesso significativamente più piccolo dell'istruzione stessa, tuttavia l'istruzione può essere più ampia del bus dati.

Il vecchio Motorola 68008 è un esempio emblematico: era una versione ridotta del 68000 con un bus dati a 8 bit, ma utilizzava le stesse parole di istruzione a 16 bit, in cui in genere 7 bit determinano il codice operativo (il resto identificare i registri di origine e destinazione e la modalità di indirizzamento, che dovrebbero essere considerati tutti operandi , non opcode ). Se si includono i bit della modalità di indirizzamento nel codice operativo, come alcuni fanno, questo rende un campo del codice operativo a 10 bit in totale. Le istruzioni effettive potrebbero essere sostanzialmente più lunghe in alcune modalità di indirizzamento.


"il resto identifica i registri di origine e destinazione e la modalità di indirizzamento, che dovrebbero essere considerati tutti operandi, non opcode" ... beh, è ​​un po 'una questione di opinione. Per un'architettura RISC, questo è chiaramente vero, ma in molti casi le architetture CISC sono definite in un modo così ad hoc che probabilmente ha senso contare ogni combinazione come un codice operativo separato. Lo Z80 è un caso emblematico - mentre molte delle sue istruzioni hanno una o due selezioni di registro codificate nei bit dell'opcode, le modalità di indirizzamento sono interamente ad-hoc e i prefissi alterano l'interpretazione di ...
Jules

... sia la modalità di indirizzamento che il registro in molti casi, il che rende l'interpretazione dei registri dai campi bit un po 'meno semplice. La maggior parte della documentazione e degli assemblatori sembrano lavorare sulla comprensione, quindi, che ogni combinazione di istruzioni e registri è un codice operativo separato e che solo i valori immediati e i valori di offset dell'indirizzo indiretto sono effettivamente operandi. Questa visione del mondo è condivisa dal suo predecessore, l'intel 8080, in cui il formato standard del linguaggio assembly aveva registri gestiti da un'istruzione codificata come parte del mnemonico, non fornita come argomento.
Jules,

Vero: lo Z80 è tipico delle CPU microcodificate a 8 bit in questo modo. Il 6502 aveva una mappatura opcode più logica che permetteva di ottimizzare i circuiti di decodifica. Ma stavo parlando in particolare di 68K, che nelle sue istruzioni ha campi di modalità di indirizzamento e registro di destinazione molto distinti. Dopo aver sottratto quelli, il campo del codice operativo può essere ancora più ampio del bus dati del 68008.
Chromatix,

1

Edson DeCastro ha progettato un computer quasi esattamente simile, il PDP-8, con 15 indirizzi e 12 linee dati.

Quindi la risposta alla domanda postata è 574 codici op, perché il PDP-8 aveva 284 codici op ed Ed è solo mezzo pazzo.


2
Non sono sicuro del motivo per cui il downvote - questa è una risposta buona come una, dato che la domanda è essenzialmente insignificante. :)
Jules

Sospetto che il downvote sia perché 284 * 2 = 568, non 574.
Segna
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.