Turing 컴플리트 프로세서를 구축하는 데 필요한 최소 명령어 세트는 무엇입니까 명령을 처리하는 방법에 대한 일반적인 아이디어가 있지만

프로세서가 명령을 처리하는 방법에 대한 일반적인 아이디어가 있지만 대부분의 고급 언어로 작업하는 데 시간을 보냅니다. 아이언에 더 가까이 다가가는 사람은 귀중한 통찰력을 제공 할 수 있습니다.

프로그래밍 언어가 기본적으로 프로세서의 명령어 세트에 대한 매우 높은 수준의 추상화라고 가정하면 튜링 완료 기계를 만드는 데 필요한 가장 기본적인 명령어 세트는 무엇입니까?

참고 : 하드웨어 아키텍처의 다양성에 대해서는 아무것도 모르지만 단순성을 위해 ALU (필요한 경우) 및 명령어 스택이있는 일반적인 프로세서라고 가정하겠습니다. *



답변

Turing-computation이 가능한 기계를 만들기 위해서는 단 하나의 명령 만 필요합니다 . 명령어가 하나만 있고 튜링이 완료된이 클래스의 컴퓨터를 하나의 명령어 세트 컴퓨터 또는 다소 농담으로 Ultimate RISC라고 합니다.


답변

튜링 머신을 구현할 수있는 것을 구현하는 방법에는 여러 가지가 있습니다.

프로세서를 살펴보면 가장 적합한 프로세서는 아마도 레지스터 머신 모델 일 것 입니다 . 이 중 가장 단순한 (기호로) 다중 테이프 두 개의 기호 ( markblank)입니다. 당신이 비의의로 확실히 뭔가를 갈 경우 inc(r), dec(r)그리고 jz(r,z)(레지스터 경우 점프 r명령에 제로 z나) clr(r)(일반 r) inc, je(i,j,z)(점프 i와 j는 명령 Z에 동일한 등록 할 경우).

다음과 같은 레지스터 시스템에 대한 언급을 보았습니다.

  • inc (i, m)-레지스터 i를 증가시키고 m 행으로 이동
  • jzdec (i, m1, m2)-레지스터 i가 0이면 m 행으로 이동하고, 그렇지 않으면 i를 줄이고 m2 행으로 이동

테이프의 데이터에 대한 다른 제약 조건이 있지만 Minsky 레지스터 시스템 은 완전히 완료됩니다 (개별 레지스터가 아닌 상태를 저장하는 Gödel 번호 여야 함)

그게 다야. 더 이상 없습니다.


그렇다면 왜 이러한 초박형 프로세서가 대신 사용되지 않습니까? 컴파일러를 작성하는 것은 정말 고통스럽고 프로세서가 할 수있는 다른 많은 일을 포기합니다. 비트 단위 and를 사용하는 add것이 좋으며 레지스터를 늘리고 루핑하여 모든 것을하려고 하는 것이 아닙니다. 8 가지 명령어가있는 Brainfuck 이라는 선호하는 프로그래밍 언어의 기초입니다 .

  • > 데이터 포인터를 증가
  • < 데이터 포인터를 줄입니다
  • + 데이터 포인터에서 데이터를 증가
  • - 데이터 포인터에서 데이터 감소
  • . 데이터 포인터에서 데이터를 출력
  • , 입력을 읽고 데이터 포인터에 데이터를 저장
  • [포인터의 데이터가 0 인 경우 명령 포인터를 앞으로 이동하는 대신 일치하는 ]명령 다음에 명령으로 이동하십시오.
  • ]포인터의 데이터가 0이 아닌 경우 명령 포인터를 앞으로 이동하는 대신 일치하는 ]명령 후에 명령으로 다시 이동하십시오.

Brainfuck의 컴파일러 찾을 수는 있지만 간단한 일을하는 것은 재미가 없습니다. 언어의 목적인 좌절을 즐기지 않는 한.

관련 독서 :


답변

Post machine 이 가장 간단한 형태의 Turing-complete 장치 라고 생각합니다 . 비트 주소 지정 가능 메모리, 현재 데이터 위치를 가리키는 주소 레지스터 및 5 가지 명령이 필요합니다.

  • 현재 위치에서 비트를 설정하십시오.
  • 현재 위치에서 비트를 재설정하십시오.
  • 다음 주소로 이동합니다 (증가 데이터 주소 레지스터).
  • 이전 주소로 이동합니다 (감소 데이터 주소 레지스터).
  • 현재 데이터 위치에서 비트를 확인하십시오.

하드웨어 적으로 훨씬 간단한 것을 발명하는 것이 쉽지 않다고 생각하지만 훨씬 더 축소 된 것이 존재할 수 있습니다.


답변

구현

이 답변은 단일 명령어 세트 CPU, 컴파일러 및 어셈블러의 흥미로운 구현에 중점을 둘 것입니다.

movfuscator

https://github.com/xoreaxeaxeax/movfuscator

movx86 명령어 만 사용하여 C 코드를 컴파일 하여 단일 명령어로 충분하다는 매우 구체적인 방법을 보여줍니다.

튜링 완성도는 논문에서 입증 된 것 같습니다 : https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf

하위

https://esolangs.org/wiki/Subleq :

또한보십시오

/programming/3711443/minimal-instruction-set-to-solve-any-problem-with-a-computer-program/38523869#38523869


답변

Turing 컴플리트 프로세서를 구축하는 데 필요한 최소 명령어 세트는 무엇입니까?

Jörg W Mittag는 “하나”라고 말했지만 어떻습니까?

왜 “프로세서”에 “명령”이 있어야한다고 가정합니까?

튜링 머신은 튜링 완료 프로세서이며 “지시 사항”에서는 작동하지 않습니다. 그것은이 규칙을 하지만 규칙은 랜덤 액세스 메모리로부터 인출되는 지시하지 않습니다.

Alan Turing은 그의 시조 기계를 생각할 때 가장 계산 가능한 “계산”모델을 찾고 있었으며 수학 기술을 사용하여 “무엇을 계산할 수 있습니까?”라는 질문에 대답 할 수있었습니다.

실제 튜링 기계보다 간단한 튜링 기계를 설계하기가 어려울 것입니다.

메모리에서 명령어를 가져 와서 해독하고 실행하며 동일한 메모리 시스템에 저장된 데이터에서 작동하는 프로세서 유형 인 FWIW를 Von Neumann Architecture라고합니다.

https://ko.wikipedia.org/wiki/Von_Neumann_architecture