¿Hay ejemplos de arquitecturas informáticas que solo ofrezcan cargar, almacenar o mover instrucciones como una operación principal (sin operaciones específicas de suma, resta, lógica, etc.)?

Similar a la máquina que describió Ira, creo que IBM tenía una computadora llamada CADET (el acrónimo de no se puede agregar ni siquiera lo intenta). Por lo que sé sobre la máquina, realizó todas las operaciones mediante “búsqueda de tabla”. es decir, en algún lugar de la memoria había una tabla de suma. Para agregar dos operandos, buscó la ubicación de la memoria (en la tabla de sumas) correspondiente a los dos números que deseaba agregar, por lo que debe haber permitido dos registros de índice en sus direcciones de memoria.

Ale cuestionó cómo se podrían implementar ramas condicionales en una máquina de este tipo. Primero, las instrucciones de salto probablemente se codifican almacenándolas en una ubicación de memoria que está asignada a la PC (contador de programa, a menudo ubicación 0). Además de eso, la PC generalmente se incrementa como parte de la ejecución de la instrucción. Sin embargo, puede haber una ubicación de memoria que actúe como un registro de comparación (por ejemplo, la ubicación 2), dependiendo del valor de ese registro después de que se haya almacenado un valor en, la PC puede incrementarse en una cantidad adicional (por ejemplo, 2 en lugar de 1 ) Eso implementa una instrucción de “salto condicional”. Se puede seguir un salto condicional, mediante un salto para implementar un “salto condicional”, aunque es posible que tenga que invertir o invertir el condicional deseado <= o tal vez ya que la instrucción de salto omite el salto en lugar de realizarlo.

Tenga en cuenta que la idea básica es que el objetivo de la instrucción de la tienda puede actuar como el código de operación. Cualquier código de operación que desee implementar puede implementarse simplemente teniendo una ubicación de memoria que, cuando se almacena en los efectos, la operación deseada. El CADET llevó esto más lejos al permitir que parte de la operación se codificara a medida que se cargaban las tablas.

La arquitectura CDC adoptó un enfoque diferente (casi opuesto) al no permitir ningún direccionamiento indirecto o indexado. Todas las operaciones se registraron para registrar movimientos (más una operación). Es solo que algunos movimientos a registros específicos (b5 y b6, iirc) causaron que los valores se cargaran de la memoria a otros registros x5 y x6, mientras que moverse a b7 hizo que el valor en x7 se almacenara en la memoria. Esto hizo que almacenar el valor actualmente en b7 fuera un desafío, ya que tendrías que moverlo a x7, destruyendo lo que estaba allí. El truco consistía en usar una serie de saltos condicionales para copiar efectivamente b7 en la PC y luego podría sobrescribir b7 y luego usar el valor de la PC para recrear su valor. Tirar la pila de registros fue, por lo tanto, un problema de tarea en la clase de lenguaje ensamblador en CU que tenía un par de 6700.

IIRC, la minicomputadora GRI (finales de los años 60) solo tenía una instrucción “MOVE A TO B”; no se requiere código de operación, solo dos direcciones de operando.

La magia estaba en los lugares de memoria. La mayor parte de la memoria funcionó como esperabas; pones un valor allí, puedes leer ese valor más adelante. Sin embargo, una memoria de bloque (creo que de baja dirección) tenía la propiedad de que cada ubicación hacía alguna operación a los datos movidos a esa ubicación; llame a estas “acciones” (estoy inventando el vocabulario; leí el manual GRI en los años 70 y los detalles son bastante confusos). [El término específico es “Procesador de datos de función directa” y hay una patente sobre esto].

Por ejemplo, es posible que tenga una ubicación 17 que acumule todos los valores MOVIDOS, y una ubicación 18 que establezca la ubicación 17 en un valor movido a ella. (Puede poner a cero el acumulador moviendo una ubicación de memoria que contenga cero a la ubicación 18). Del mismo modo para restar, multiplicar, dividir.

No recuerdo cómo manejó las ramas condicionales. (Mueva un posible valor de PC a un registro especial, presione una función de comparación de registros y haga que la PC cambie mágicamente si la comparación es verdadera?).

Las minicomputadoras GRI, como habrán notado, no asaltaron a la industria para convertirse en un estándar.

Wikipedia describe computadoras de una sola instrucción. El artículo de Wikipedia clasificaría el GRI como una arquitectura activada por transporte.

Si bien es posible construir tal dispositivo, no creo que sea de ninguna utilidad, al menos no por sí solo.

Por lo general, las CPU tienen algún tipo de coprocesador o mecanismo de acceso a dispositivos externos. Esta hipotética CPU no aritmética tendría que depender de dispositivos externos para cualquier cálculo. Sería bastante tonto. Dicho esto, históricamente se ha hecho debido a limitaciones técnicas, especialmente para la aritmética de coma flotante (el Intel 80486 tenía una FPU en un coprocesador en un CI separado, y tanto la CPU como la FPU eran bastante caras).

Sin embargo, si piensa en funciones matemáticas, en realidad son asignaciones entre entradas y salidas. Si esta computadora hipotética tuviera una tabla enorme, con una entrada para cada entrada posible, podría recuperar los resultados de cualquier operación sin calcularla, ya que la operación se calcularía previamente.

El problema con esto es que el control de flujo también debería almacenarse. Realmente no puedo concebir un sistema que pueda manejar bien las ramas, si no hay una lógica de ramificación en la CPU.

Otro problema con este enfoque es que es prohibitivamente costoso en términos de almacenamiento, ya que requiere entradas [matemática] 2 ^ N [/ matemática] para los bits de entrada [matemática] N [/ matemática]. A veces todavía se realiza en software, como una optimización de compensación tiempo / espacio. Un ejemplo popular que está un poco desactualizado ahora son las tablas de arcoíris para descifrar contraseñas hash.

Las computadoras de Control Data como la 6600 no tenían instrucciones de carga o almacenamiento. Tenía triples registros con el mismo número: un registro de operando X, un registro de dirección A y un registro de incremento B. Los registros 1–5 eran objetivos de carga y los registros 6–7 eran objetivos de almacenamiento. Si calculó una dirección en (por ejemplo) A4, como efecto secundario, el procesador cargaría los datos de esa dirección en X4. Si calculó una dirección en A7, el procesador almacenaría los datos en X7 en esa dirección.

Todas las instrucciones aritméticas de direcciones usaban registros A y B y todas las instrucciones de datos usaban registros X y B. Esto se parece más tarde a RISC ISA suficiente para la broma de que RISC = “Realmente inventado por Seymour Cray”.

Desde los circuitos FPGA puedes construir una arquitectura de computadora como esta. (o de IC-s simples) Creo que incluso si omite todas las operaciones, necesitará instrucciones lógicas básicas como NOT, OR y AND. Cuando era niño construí un circuito como este.

Y aquí hay una tabla de ayuda para operaciones mínimas:

En el conjunto de instrucciones mínimas, su “movimiento” puede ser: “A”, puede ser: “B” 🙂

No caracterizaría una máquina como una computadora. Para mí, una computadora tiene que tener algún tipo de rama condicional, la capacidad de hacer cosas diferentes dependiendo de los valores diferentes. Y eso requiere algún tipo de aritmética. Para poder construir una máquina así, no la llamaría una computadora.

Sí, una computadora de conjunto de instrucciones – Wikipedia