Tengo una idea general de cómo el procesador maneja las instrucciones, pero paso mi tiempo trabajando principalmente en idiomas de alto nivel. Tal vez alguien que trabaje más cerca del hierro puede proporcionar alguna información valiosa.
Suponiendo que los lenguajes de programación son básicamente abstracciones de muy alto nivel del conjunto de instrucciones de un procesador, ¿cuál es el conjunto de instrucciones más básico necesario para crear una máquina completa?
Nota: No sé nada sobre la diversidad de arquitecturas de hardware pero, por simplicidad, supongamos que es un procesador típico con una ALU (si es necesario) y una pila de instrucciones. * *
hardware
low-level
turing-completeness
Evan Plaice
fuente
fuente
Respuestas:
Resulta que solo necesita una instrucción para construir una máquina capaz de calcular Turing. Esta clase de máquinas que tienen una sola instrucción y están completas en Turing se llama Computadoras de un conjunto de instrucciones o también, en cierto modo de broma, Ultimate RISC .
fuente
Hay muchas formas de implementar algo en lo que uno puede implementar una máquina de turing.
Mientras observa los procesadores, el que sea más aplicable probablemente sea el modelo de máquina de registro . El más simple de estos (en términos de símbolos) es el símbolo de mulit-tape two (
mark
yblank
). Si usted va para algo no tan esotérica, lainc(r)
,dec(r)
yjz(r,z)
(salto si el registror
es cero a la instrucciónz
) o laclr(r)
(clarar
),inc
,je(i,j,z)
(salto si se registra iyj son igual a z de instrucciones).He visto mención de una máquina de registro que es:
que también está completo: es una máquina de registro Minsky, aunque tiene otras restricciones en los datos de la cinta (tiene que ser un número de Gödel que almacena el estado en lugar de registros individuales)
Eso es. Nada mas.
Entonces, ¿por qué no se utilizan estos procesadores ultra risc? Es un verdadero dolor escribir un compilador para ellos y renunciar a muchas otras cosas que el procesador puede hacer. Es realmente agradable tener un bit a bit
and
, y enadd
lugar de tratar de hacer todo con registros incrementales y bucles. Esa es la base de un lenguaje de programación favorito titulado Brainfuck que tiene 8 instrucciones.>
incrementar el puntero de datos<
disminuir el puntero de datos+
incrementar los datos en el puntero de datos-
disminuir los datos en el puntero de datos.
generar los datos en el puntero de datos,
leer entrada, almacenar los datos en el puntero de datos[
Si los datos en el puntero son cero, en lugar de mover el puntero de instrucción hacia adelante, avance hacia el comando después del]
comando correspondiente]
Si los datos en el puntero no son cero, en lugar de mover el puntero de instrucciones hacia adelante, vuelva al comando después del]
comando correspondienteUno puede encontrar compiladores para Brainfuck, aunque realmente no es divertido hacer incluso cosas simples en él. A menos que disfrutes de la frustración, que es el propósito del lenguaje.
Lectura relacionada:
fuente
Sospecho que Post machine es la forma más simple de un dispositivo completo de Turing. Necesita un suministro de memoria direccionable en bits, un registro de dirección que apunte a la ubicación de datos actual y cinco instrucciones:
No creo que sea fácil inventar algo mucho más simple en cuanto a hardware, aunque probablemente exista algo aún más reducido.
fuente
Implementaciones
Esta respuesta se centrará en implementaciones interesantes de CPU, compiladores y ensambladores de conjuntos de instrucciones individuales.
movfuscator
https://github.com/xoreaxeaxeax/movfuscator
Compila el código C usando solo
mov
instrucciones x86, mostrando de manera muy concreta que una sola instrucción es suficiente.La integridad de Turing parece haberse demostrado en un artículo: https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf
subleq
https://esolangs.org/wiki/Subleq :
Ver también
/programming/3711443/minimal-instruction-set-to-solve-any-problem-with-a-computer-program/38523869#38523869
fuente
Jörg W Mittag dijo "uno", pero ¿qué tal cero?
¿Por qué supone que un "procesador" debe tener "instrucciones"?
Una máquina Turing es un procesador completo de Turing, y no funciona con "instrucciones" como tales. Tiene reglas , pero las reglas no son instrucciones que se obtienen de una memoria de acceso aleatorio.
Cuando Alan Turing pensó en su máquina homónima, estaba buscando el modelo más simple posible de "computación" para poder utilizar técnicas matemáticas para responder a la pregunta: "¿Qué es computable?"
Sería difícil diseñar una máquina equivalente a Turing que sea más simple que una máquina real de Turing.
FWIW, el tipo de procesador en el que está pensando --- uno que obtiene instrucciones de la memoria, las decodifica y las ejecuta, y que opera en los datos almacenados en el mismo sistema de memoria --- se conoce como Arquitectura de Von Neumann
https://en.wikipedia.org/wiki/Von_Neumann_architecture
fuente