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


19

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

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

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


Computer Science SE는 비슷한 질문을하기에 더 좋은 곳일 것입니다.
Oskar Skog

ISA가 명령 수를 줄이면 NUMBER 개 명령의 의미도 충분합니다. ISA는 "최적의"RISC보다 명령이 적을 때 이상해집니다. 명령이 하나만있는 ISA는 이상합니다. // 또한 숫자가 증가하고 ISA가 CISC가되면 더 이상해집니다. // "이상하다"는 물론 다소 주관적이다.
Oskar Skog

답변:


35

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


4
제로 명령 솔루션이 발견되지 않는 한, 최선의 답을 타격 +1 (실제로, 하나의 명령어 컴퓨터는 때때로 명령어 자체에서 찾을 수있는 정보가 없기 때문에, 제로 명령 컴퓨터라고합니다)
콜트 암몬 - 분석 재개 모니카

4
그렇습니다. 그러나 하나의 명령만으로 기계 튜링을 완성 할 수는 없습니다. 마술은 명령이 처리 할 수있는 모든 다른 특수 레지스터에 있습니다. 귀하의 답변에 따르면 OP는 "컴퓨터"를 "Von Neumann 아키텍처"와 동일시하며 실제로 "컴퓨터"범주는 그보다 훨씬 광범위합니다.
Solomon Slow

2
@jameslarge 마법이 반드시 특수 레지스터에있는 것은 아닙니다. BitBitJump, SBNZ, SUBLEQ 및 SUBNEG는 레지스터가 전혀 필요하지 않으며 각각 단일 명령어 만 있고 벙어리 메모리가 필요합니다.
8bittree

2
@ 8 비트 트리, 훈! 이상하지만 튜링 완료 아키텍처를 설계하는 것이 경쟁적인 스포츠라는 것을 잊어 버린 것 같습니다. Jörg의 답변을 읽었을 때, 74LS 시리즈 칩에서 "하나의 명령 컴퓨터"를 구축하고 DecSystem 10을 에뮬레이트하도록 프로그래밍 한 저학년 시절 (1980 년경)에 친구를 회상했습니다. Wikipedia 페이지에서 현재 그의 디자인을 "Transport Triggered Architecture"라고 부릅니다. 그가 따라 왔는지 모르겠어요
Solomon Slow

2
@ jameslarge : Intel MMU도 Turing-complete입니다 (특히 트랩 메커니즘). 그것은 실제로 매우 이상하지만, 설계되는 것과 반대입니다. 순수한 사고입니다.
Jörg W Mittag

15

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

프로세서를 살펴보면 가장 적합한 프로세서는 아마도 레지스터 머신 모델 일 것 입니다 . 이 중 가장 단순한 (기호로) 다중 테이프 두 개의 기호 ( 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의 컴파일러 찾을 수는 있지만 간단한 일을하는 것은 재미가 없습니다. 언어의 목적인 좌절을 즐기지 않는 한.

관련 독서 :


5

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

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

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


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


3

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

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

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

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

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.