2016-09-18 9 views
2

물리 스위치를 사용하여 수동으로 8 비트 PC에서 video을 보았습니다.컴퓨터는 데이터와 지침을 어떻게 구분합니까?

투입된 프로그램이었다 지침에서 데이터를 분할 플래그를이 없기 때문에 내가 알고 싶은 무엇

MAIN: 
    0000 0001 0100  # 0 = LDA [4] 
    0001 0010 0101  # 1 = ADD [5] 
    0010 0101 0000  # 2 = OUT 
    0011 1111 0000  # 3 = HLT 

DATA: 
    0100 00001110  # 4 = #14 
    0101 00011100  # 5 = #28 

, 그것은 않는 경우 컴퓨터, 데이터 및 지침을 구분하는 방법입니다.

0001 0001 0010

중 하나와 같이 해석 할 수있다

1 = LDA [2] 

또는 : 프로그램이 실행되는 동안, 주소를 명령어로 간주되기 때문에

1 = #10 

그것을입니다. 하지만 HLT 때문에 프로그램은 마치 메모리 주소가 명령어 인 것처럼 실행을 중단하고 더 높은 주소를 남깁니다. LDA/ADD/SUB 등은 메모리의 모든 위치를 이진 값으로 처리합니다. I이었다으로이 질문을 쓰는 내가 새 일을 실현하는 동안 **

0 = ADD #32 

하지

0 = ADD [ ADD [ ADD [ ADD ...]]] 

:이 경우

은 다음과 같습니다

0000 0010 0000

는 다음과 같이 해석 진행 중

더 좋은 예 :

정지가 아닌 경우, 프로그램 작업 벌금,하지만 데이터에 추락 계속 것과 같이 해석 : 그렇다면, 컴퓨터 충돌 (1)는 것이다

0010 0000 1110  # 4 = NOP [14] 
0101 0001 1100  # 5 = LDA [12] 

: NOP가 제공되기 때문에 피연산자 및 2 : 메모리 주소 12 및 14는 정의되지 않았기 때문에.

+0

여기에 좋은 답변이있는 비슷한 주제가 있습니다. [stackoverflow_link] (http://stackoverflow.com/questions/2022489/how-instructions-are-differentiated-from-data). – acornagl

+0

당신은 [멜의 이야기] (http://www.catb.org/jargon/html/story-of-mel.html)를 즐길 수도 있습니다 : "... 그가 작성한 모든 명령은 수치 상수 인 으로 간주 될 수도 있습니다 ... " –

답변

5

데이터는 메타 데이터가 없으면 아무런 의미가 없습니다. - 주어진 비트 열을 이해하려면 비트가 어떻게 될지에 대한 지식이 있어야합니다. 해석되다.

지침에 관한 한 CPU의 명령어 세트는 각 명령어의 크기와 그에 수반되는 데이터를 정의합니다. 각 명령은 op 코드으로 시작하며 다음 데이터는 일반적으로 고정 크기 (크기는 opcode에 따라 다름)입니다. 각 명령어는 CPU에 하드 와이어 된 일부 초기 주소에서 시작하여 순서대로 실행됩니다 (점프 명령어가 발생할 때까지).

그래서 초기 주소가 MAIN 레이블의 주소로 발생하는 경우, CPU가 보는 첫 번째 연산 코드는 0000 0001 될 것이며, 그래서 그것은 다음에하도록되어 이미 알고 LDA 명령이라고 알 4 비트 숫자. 그 4 비트를 따르는 것은 무엇이든 다음 명령입니다.

나쁜 점프 명령어가 나중에 실행되어 CPU를 예제의 세 번째 비트 그룹으로 보내면 어떻게됩니까?(예를 들어, 나는 CPU가 4 비트 "바이트"로 동작한다고 추측합니다.) 실제로 CPU는 0100 0001의 opcode와 다음 비트의 일부를 해당 opcode의 데이터로 잘못 인식합니다. 가능성이 매우 잘못 될 것입니다.