프로세서는 다른 명령의 의미를 어떻게 '알고'있습니까?
MOV, PUSH, CALL 등과 같은 어셈블리 수준 명령을 생각하고 있습니다.
프로세서는 다른 명령의 의미를 어떻게 '알고'있습니까?
MOV, PUSH, CALL 등과 같은 어셈블리 수준 명령을 생각하고 있습니다.
답변:
컴퓨터가 어셈블리 수준 명령어를 해석 할 때이 명령어는 CPU가 읽을 수 있도록 해당 바이너리로 바뀝니다. CPU는 명령어를 실행할 때 명령어의 opcode 부분을 해당하는 마이크로 코드를 포함하는 개별 "마이크로 프로그램"으로 해석합니다 . 전체 어셈블리 명령어는 필요한 경우 opcode와 함께 사용할 수있는 데이터 (예 : 레지스터 이름, 메모리 주소)로 구성됩니다.
마이크로 코드 명령어는 극히 낮은 수준 (더 많은 어셈블리)이므로 마이크로 프로세서의 논리 흐름을 제어하는 실제 디지털 신호를 제어합니다. 예를 들어, 하나의 마이크로 코드 명령어는 조건 코드 레지스터 플래그를 새로운 값으로 업데이트 하거나 CPU 레지스터 를 ALU 장치 중 하나와 연결할 수 있습니다. 더 복잡한 작업은 가능하지만, 이것은 당신의 일반적인 생각이다 무엇 에 사용되는 마이크로 코드를.
컴파일에서 실행까지의 일반적인 흐름은 다음과 같습니다. 조립 명령이 조립됩니다 (2 진 등가 0과 1로, 또는 지금부터는 논리 신호로 바)). 이들 논리 신호는 CPU에 의해 차례로 해석되고, CPU의 흐름이 특정 명령을 실행하도록 지시하는보다 낮은 레벨의 논리 신호로 바뀐다. 프로세서의 아키텍처와 디자인에 따라 하나 이상의 클럭 사이클이 필요할 수 있습니다 (대부분의 프로세서 참조 설명서 는 예를 들어 이와 같은 특정 명령을 실행하는 데 걸리는 클럭 사이클 수를 알려줍니다 ).
이 모든 것은 하드 프로그래밍 된 마이크로 코드 ( 제조 과정에서 설정된 어떤 종류의 ROM에 프로세서 내에 물리적으로 내장되어 있음)로 이루어지며 , 이는 실제 로우 레벨 로직 게이트를 통해 흐름을 지시합니다 . 이는 추상 어셈블리 명령어와 프로세서의 물리적 전기 로직 사이의 인터페이스를 제공합니다.
요약하면, 프로세서 명령어는 프로세서에 의해 조립되고로드됩니다. 그런 다음 프로세서는 이러한 명령어를 사용하여 해당 명령어에 해당하는 마이크로 프로그램 (마이크로 코드 형태)을 조회합니다. 이는 명령어가 "실제로"실행되는 것입니다. 특정 명령에 대한 마이크로 코드가 실행되면 (하나 이상의 클럭 사이클이 걸릴 수 있음) 프로세서는 마이크로 코드를 실행하여 다음 명령을 페치하고 사이클이 반복됩니다.
프로세서는 실제로 명령이 무엇인지 '알지'않습니다. 명령은 프로세서가 명령의 의미를 해석하는 것을 수행하게하는 이진 패턴입니다.
예를 들어, ADD-R1-into-R2 조작은 레지스터 1과 2의 값이 ALU (산술 및 논리 단위)에 도달하게하고 ALU가 다양한 다른 항목 대신에 가산기의 출력을 사용하게하고 실제 프로세서는 매우 복잡한 최적화를 사용하지만 이러한 모든 것들 ( 멀티플렉서 , 가산기 , 카운터 등) 을 달성하는 간단한 논리 회로가 있습니다.
브레이크를 밟을 때 차가 어떻게 속도를 늦추는지를 묻는 것과 같습니다. 자동차는 알지 못합니다. 브레이크 페달은 하드 패드가 휠에 밀리는 방식을 간접적으로 제어하기 위해 발생합니다.
예를 들어 x86 / IA-32 프로세서가 즉시 8 비트 값을 레지스터로 이동하도록 지시하는 명령을 사용하십시오. 이 명령어의 이진 코드는 10110 다음에 사용할 레지스터에 대한 3 비트 식별자입니다. AL 레지스터의 식별자는 000이므로 다음 머신 코드는 데이터 01100001과 함께 AL 레지스터를로드합니다.
10110000 01100001
이 이진 컴퓨터 코드는 다음과 같이 16 진수로 표현하여보다 사람이 읽을 수있게 만들 수 있습니다.
B0 61
여기서 B0은 '다음 값의 사본을 AL로 이동'을 의미하고 61은 값 01100001의 16 진 표시 (97은 10 진수)입니다. 인텔 어셈블리 언어는 이와 같은 명령어에 대한 니모닉 MOV (이동 약어)를 제공하므로 위의 기계 코드는 어셈블리 언어로 다음과 같이 작성 될 수 있으며 필요한 경우 세미콜론 뒤에 설명 설명이 포함되어 있습니다. 이것은 읽고 기억하기가 훨씬 쉽습니다.
http://en.wikipedia.org/wiki/Assembler_language
다시 말해, 조립 프로그램을 '조립'할 때
MOV AL, 61h
CPU는 특수한 의미를 연관시킨 다음 그에 따라 작동하는 숫자로 변환됩니다.
제안 된 독서 :
또한 CS152 : UC Berkeley의 컴퓨터 아키텍처 및 엔지니어링 과정에서 학생들이 CPU를 구현하는 과정 노트를 확인하십시오 .
"집에서 만든 CPU"를 검색하면 많은 장점을 발견 할 수 있습니다.
가장 낮은 수준에서 CPU는 모두 추가 할 수 있습니다. 또한 빼기, 곱하기 및 나눌 수 있습니다 (이것은 다른 방식으로 추가 된 것임). CPU는이를 사용하여 메모리 주소에 추가 사항을 적용하여 메모리에서 데이터를 이동합니다.
이것이 가장 낮은 수준이라는 것을 명심하십시오. CPU는 실제로 마이크로 코드 형태로 특정 명령을 "이해합니다". 획기적인 답변을 참조하십시오.
programmers.stackexchange.com에 관련 답변을 제공했습니다. 컴퓨터 작동 방법을 참조하십시오 . 여기서 나는 컴퓨터가 명령을 해석하고 전자를 이동시키는 방법에 대해 처음부터 모든 것을 간략히 살펴 보았습니다.