Número máximo de códigos de operación para un microprocesador

13

ingrese la descripción de la imagen aquí

¿Cuál es el número máximo de códigos de operación para la pregunta, la respuesta es la opción c, pero creo que es la opción d, porque cada dirección especifica cada ubicación de memoria, hay 16 líneas de dirección, lo que significa 2 ^ 16 direcciones, es decir, 2 ^ 16 ubicaciones de memoria.

Entonces, si cada ubicación contiene un código de operación, el total de 2 ^ 16 ubicaciones contiene 2 ^ 16 códigos de operación y es el número máximo de códigos de operación, pero la respuesta se da como c, que es 2 ^ 12. ¿Cómo es esto posible?

Chiduruppula Sharath Kumar
fuente
77
La pregunta es cuántos códigos de operación DIFERENTES en el ISA, no cuántas instrucciones pueden formar el programa más grande posible.
Brian Drummond
55
@BrianDrummond: con esa interpretación, sin embargo, la pregunta solo tiene sentido si hace suposiciones sobre la forma en que funciona la ISA que no son universales. Por ejemplo, el Z80 tiene un bus de datos de 8 bits, pero en algún lugar de la región de 800 códigos de operación válidos diferentes, porque usa bytes de prefijo para extender y variar las operaciones disponibles.
Julio
15
La pregunta como está redactada en el libro no tiene sentido. No existe una correspondencia directa inherente entre el tamaño del bus y el tamaño del código de operación. La JVM se basa en un modelo de datos de 32 bits, pero tiene códigos de operación de 8 bits.
chrylis -on strike-
10
Esta pregunta es incoherente a menos que tengamos mucha información más allá de lo que se da en la pregunta. Tendríamos que hacer muchas suposiciones sobre las características del proceso para obtener una respuesta: ¡suposiciones que no son ciertas para la gran mayoría de los procesadores del mundo real!
David Schwartz
14
La pregunta es una mierda. Si es necesario, un código de operación de instrucción puede abarcar varias palabras de memoria. No hay límite inherente.
Hot Licks

Respuestas:

31

Todas las opciones están mal . El número máximo de códigos de operación (únicos) que puede ejecutar un procesador no está limitado por el ancho del bus.


Normalmente, una CPU de más de 12 bits está diseñada para tener un comando por palabra de datos para que pueda leer la mayoría de las instrucciones de una vez. Por lo tanto, una CPU normal debe diseñarse con un límite de 2 ^ 12 códigos de operación.

Las arquitecturas de CPU existentes que tienen más de 2 ^ 12 = 4096 códigos de operación son muy raras simplemente porque uno casi nunca necesita tantas, demasiadas para aprender, demasiadas para ser realmente útiles, demasiado espacio de silicio costoso desperdiciado.

Actualización : como se señaló en los comentarios, ¡todas las variaciones posibles del conjunto de instrucciones x86 en realidad pueden sumar más de 6000 dependiendo de cómo cuente! Sin embargo, esto es más una excepción.

Sin embargo, para una CPU de 4 bits, 2 ^ 4 = 16 las instrucciones a menudo no son suficientes, por lo que muchos de estos procesadores tienen más.

Puede haber múltiples formas y razones por las cuales una CPU puede incorporar más códigos de operación de los que caben en el bus de datos, incluyendo:

Instrucciones que abarcan palabras

Un procesador no necesita leer un comando en un solo ciclo de datos; puede usar múltiples ciclos consecuentes. De hecho, la mayoría de las CPU no lo hacen, aunque se usa más comúnmente para argumentos de instrucción en lugar de expandir el espacio de código de operación.

Ejemplo: Intel 4004 tiene solo 4 líneas que se multiplexan como líneas de datos / dirección, palabra de datos de 4 bits, pero más de 40 códigos de operación en instrucciones de 8 bits.

Prefijos y sufijos

Un procesador (CISC) puede tener tantos prefijos y sufijos de instrucción como sea necesario.

Esos tienen el prefijo de una instrucción real para cambiar lo que hace, ya sea un poco o completamente.

Depende de su definición de "código de operación único". Si se supone que una parte de una instrucción que no son datos es parte del código de operación, su número total incluiría todas las variaciones posibles. Sin embargo, algunos creen que esos afijos son partes distintas de la instrucción.

Ejemplo: las CPU Intel x86 en realidad no tienen códigos de operación de 4M. Sin embargo, si cuenta todos los prefijos como parte de un código de operación, las CPU modernas permiten instrucciones de hasta 15 bytes, es decir, MUCHOS códigos de operación posibles. Aunque muchos simplemente harán lo mismo, esto depende de la definición de que sean "únicos".

Modos

Un procesador puede tener múltiples modos de operación en los que puede tener un conjunto completamente diferente de códigos de operación.

Ejemplos: Intel x86_64 tiene modos de 32 bits (real / v86 / protegido) y de 64 bits que tienen distintos códigos de operación. Las CPU ARM pueden tener modos ARM de 32 bits y pulgar de 16 bits.

Multiplexación de bits de bus

Las preguntas indican "líneas de datos" y "líneas de dirección", sin embargo, tanto el bus de datos interno como el bus de dirección interno pueden ser más amplios que la cantidad de líneas de bus reales.

Los datos del bus multiplexado se envían secuencialmente, es decir, la primera mitad, luego la segunda mitad. La CPU lo almacena en registros internos de tamaño completo y funciona con ellos.

Esto a menudo se hace para reducir los costos y / o el tamaño de la huella física del chip.

Los ejemplos incluyen Intel 4004, cualquier cosa en el bus de datos LPC y NEC VR4300, la CPU de Nintendo64 que solo tenía un bus de datos de 32 líneas.

No bus paralelo

Como continuación del punto anterior, una CPU ni siquiera necesita exponer un bus paralelo en absoluto.

Una CPU solo puede exponer fácilmente un bus secuencial como I2C, SPI, etc.

Probablemente no sea muy rentable producir una CPU tan dedicada, pero muchos microcontroladores de bajo conteo de pines (que incluyen tanto la CPU como la memoria) se hacen de esa manera para guardar esos preciados pines para algo más útil. Por ejemplo, atmel ATTINY4 / 5/6/10 chips solo tiene 6 pines en total, dos para alimentación, uno para reinicio, tres de uso general. Las instrucciones se envían a través de una interfaz de 3 líneas patentada secuencialmente.

Dependiendo de su definición de microcontrolador, puede considerarse un microprocesador o puede programarse para que actúe como uno (es decir, simule una CPU dedicada con un bus o buses secuenciales).

Esta pregunta establece claramente que algún tipo de bus de datos ESTÁ expuesto, pero no es un bus paralelo. En teoría, los datos de 12 líneas de autobuses podría constar de una sola serie de datos de línea y 11 auxilary / tierra / de estado de líneas , a pesar de que probablemente no sería una idea muy cuerdo.

Bus de instrucción dedicado

En realidad, un procesador ni siquiera necesita aceptar instrucciones en las mismas líneas de bus que los datos.

Este podría ser fácilmente el caso cuando las ALU eran chips discretos en lugar de ser parte de un microprocesador, pero ahora no es económicamente viable la mayor parte del tiempo.

Pero nada le impide implementar una CPU con líneas dedicadas solo para obtener instrucciones. Tal CPU puede ser útil cuando se debe realizar una sola operación en una matriz de datos (SIMD).

Como el ancho del bus de instrucciones es completamente arbitrario, también lo es el recuento máximo de código de operación posible.

Jack White
fuente
44
Como punto de interés, x86-64 tiene entre 1000 y 6000 códigos de operación, dependiendo de a quién le pregunte ( 1 , 2 , 3 ).
LMS
Nunca intenté contarlos, pero con todas las variaciones tiene sentido.
Jack White
13

El número máximo de códigos de operación se puede considerar de varias maneras:

  • El número máximo posible de códigos de operación únicos.

Esto se puede obtener del ancho de la instrucción y no del ancho del bus de datos. Por lo general, un código de operación encajará en un único acceso a la memoria, y luego la respuesta es 2 ^ 12. Pero un procesador podría implementar un proceso de decodificación de código de operación multiciclo para extender el número de códigos de operación posibles más allá de 2 ^ 12.

  • El número máximo de instrucciones (que contienen códigos de operación) que el procesador puede abordar directamente.

El número máximo de instrucciones (que contienen códigos de operación) que el procesador puede abordar directamente está limitado por el ancho del bus de direcciones (2 ^ 16). Sin embargo, indirectamente, el procesador podría direccionar más memoria, por ejemplo, un código de operación podría facilitar un intercambio de página o una operación similar para obtener instrucciones de otra fuente.

HKOB
fuente
2
La pregunta no es tan ambigua. Si se suponía que debía interpretarse como su segundo punto, se habría formulado como "el número máximo de instrucciones que se pueden almacenar / direccionar / ...". La palabra "opcode" deja bastante claro que se trata del conjunto de instrucciones, no del rango direccionable.
tenue fe perdida en SE
11
+1 por mencionar que los códigos operativos de varias palabras son bastante posibles, por lo que la pregunta no es muy buena.
Spehro Pefhany
2
Los hablantes nativos de inglés a menudo tienen un sesgo que les dificulta comprender el significado de las palabras que usan. Cuando los hablantes internacionales de inglés lo leen o escuchan, es posible que no obtengan el segundo significado (previsto). Lo mismo se aplica cuando un estudiante aprende una nueva expresión: si las formulaciones son ambiguas, es fácil de entender mal. Entonces, supongo que el estudiante ha aprendido que cada instrucción contiene una parte de código de operación dentro de ella. Sí, diría que es verdad. Realmente, la redacción de la pregunta 01. es ambigua.
HKOB
44
@SpehroPefhany Sí, la pregunta es indudablemente ambigua sin más contexto. Si se le enseñó al OP que, independientemente de la longitud de la instrucción, el código de operación se obtendrá en el primer acceso a la memoria, entonces la respuesta es (c), de lo contrario, no se puede responder. El punto es: ¿el OP dio suficiente contexto en su pregunta EESE, o sus maestros dieron algo por sentado y formularon una pregunta ambigua?
Lorenzo Donati apoya a Mónica
1
@SpehroPefhany True :) Pero los ingleses, quizás para su leve molestia, también son parte del mundo internacional del inglés ( bbc.com/capital/story/… )
HKOB
4

Tienes razón en confundirte con esta pregunta: está muy mal escrita.

Sin embargo, sospecho que la intención de esta pregunta es determinar el tamaño de la palabra de instrucción para la máquina. Dados los datos muy incompletos proporcionados, esto debe corresponder al ancho del bus de datos ; El ancho del bus de direcciones determina el tamaño máximo de la memoria principal.

En la práctica, el campo "código de operación" de las instrucciones de una máquina dada es a menudo significativamente más pequeño que la instrucción en sí misma, aunque la instrucción puede ser más amplia que el bus de datos.

El antiguo Motorola 68008 es un buen ejemplo: era una versión de bajo costo del 68000 con un bus de datos de 8 bits, pero usaba las mismas palabras de instrucción de 16 bits, en las que típicamente 7 bits determinan el código de operación (el resto identificar los registros de origen y destino, y el modo de direccionamiento, todos los cuales deben considerarse operandos , no códigos de operación ). Si incluye los bits del modo de direccionamiento en el código de operación, como hacen algunos, eso hace un campo de código de operación de 10 bits en total. Las instrucciones reales podrían ser sustancialmente más largas en algunos modos de direccionamiento.

Chromatix
fuente
"el resto identifica los registros de origen y destino, y el modo de direccionamiento, todos los cuales deben considerarse operandos, no códigos de operación" ... bueno, eso es un poco una cuestión de opinión. Para una arquitectura RISC, eso es claramente cierto, pero en muchos casos las arquitecturas CISC se definen de manera tan ad hoc que probablemente tenga sentido contar cada combinación como un código de operación separado. El Z80 es un buen ejemplo: si bien muchas de sus instrucciones tienen una o dos selecciones de registro codificadas en los bits del código de operación, los modos de direccionamiento son completamente ad-hoc y los prefijos alteran la interpretación de ...
Jules
... tanto el modo de direccionamiento como el registro en muchos casos, lo que hace que la interpretación de los registros de los campos de bits sea un poco menos que sencilla. La mayoría de la documentación y los ensambladores parecen trabajar en el entendimiento, por lo tanto, que cada combinación de instrucciones y registros es un código de operación separado, y solo los valores inmediatos y los valores de desplazamiento de dirección indirecta son en realidad operandos. Esta visión del mundo es compartida por su predecesor, el Intel 8080, donde el formato estándar de lenguaje ensamblador tenía registros operados por una instrucción codificada como parte de la mnemónica, no dada como argumentos.
Julio
Es cierto: el Z80 es típico de las CPU microcodificadas de 8 bits de esa manera. El 6502 tenía un mapeo de código de operación más lógico que permitía optimizar los circuitos de decodificación. Pero estaba hablando específicamente de 68K, que tiene campos de modo de direccionamiento y registro de destino muy distintos en sus instrucciones. Después de restarlos, el campo de código de operación aún puede ser más ancho que el bus de datos del 68008.
Chromatix
1

Edson DeCastro diseñó una computadora casi exactamente así, la PDP-8, con 15 direcciones y 12 líneas de datos.

Entonces, la respuesta a la pregunta publicada es 574 códigos de operación, porque el PDP-8 tenía 284 códigos de operación, y Ed está medio loco.

Slartibartfast
fuente
2
No estoy seguro de por qué el voto negativo: esta es una respuesta tan buena como cualquier otra, dado que la pregunta no tiene sentido. :)
Julio
Sospecho que el voto negativo se debe a que 284 * 2 = 568, no 574.
Marque