CPU는 실제로 어떤 명령과 명령이 의미하는지 '알고'있습니까?


73

프로세서는 다른 명령의 의미를 어떻게 '알고'있습니까?

MOV, PUSH, CALL 등과 같은 어셈블리 수준 명령을 생각하고 있습니다.


이것은 매우 유익하지만 내가 찾고있는 것은 CPU가 명령을 받고 보낼 수있는 것입니다.

나는 그 의견을 이해하지 못한다. CPU는 주소별로 요청하여 메모리에서 명령을 "수신"합니다. CPU가 "보내는"유일한 명령 (최소한보기에서)은 데이터를 전달하기위한 명령과 I / O 버스의 명령으로 I / O 장치를 작동시키는 명령입니다.
Daniel R은

모든 CPU의 핵심에는 간단한 절차를 수행하기 위해 (문자 그대로) 하드 와이어 된 논리가 있습니다. 명령어의 의미와 명령어 실행 방법을 "이해하는"복잡한 유선 로직의 둥지. 아, 어딘가에 명령 주소 레지스터가 증가합니다.
Daniel R은

답변:


88

컴퓨터가 어셈블리 수준 명령어를 해석 할 때이 명령어는 CPU가 읽을 수 있도록 해당 바이너리로 바뀝니다. CPU는 명령어를 실행할 때 명령어의 opcode 부분을 해당하는 마이크로 코드를 포함하는 개별 "마이크로 프로그램"으로 해석합니다 . 전체 어셈블리 명령어는 필요한 경우 opcode와 함께 사용할 수있는 데이터 (예 : 레지스터 이름, 메모리 주소)로 구성됩니다.

마이크로 코드 명령어는 극히 낮은 수준 (더 많은 어셈블리)이므로 마이크로 프로세서의 논리 흐름을 제어하는 ​​실제 디지털 신호를 제어합니다. 예를 들어, 하나의 마이크로 코드 명령어는 조건 코드 레지스터 플래그를 새로운 값으로 업데이트 하거나 CPU 레지스터ALU 장치 중 하나와 연결할 수 있습니다. 더 복잡한 작업은 가능하지만, 이것은 당신의 일반적인 생각이다 무엇 에 사용되는 마이크로 코드를.

컴파일에서 실행까지의 일반적인 흐름은 다음과 같습니다. 조립 명령이 조립됩니다 (2 진 등가 0과 1로, 또는 지금부터는 논리 신호로 바)). 이들 논리 신호는 CPU에 의해 차례로 해석되고, CPU의 흐름이 특정 명령을 실행하도록 지시하는보다 낮은 레벨의 논리 신호로 바뀐다. 프로세서의 아키텍처와 디자인에 따라 하나 이상의 클럭 사이클이 필요할 수 있습니다 (대부분의 프로세서 참조 설명서 는 예를 들어 이와 같은 특정 명령을 실행하는 데 걸리는 클럭 사이클 수를 알려줍니다 ).

이 모든 것은 하드 프로그래밍 된 마이크로 코드 ( 제조 과정에서 설정된 어떤 종류의 ROM에 프로세서 내에 물리적으로 내장되어 있음)로 이루어지며 , 이는 실제 로우 레벨 로직 게이트를 통해 흐름을 지시합니다 . 이는 추상 어셈블리 명령어와 프로세서의 물리적 전기 로직 사이의 인터페이스를 제공합니다.


요약하면, 프로세서 명령어는 프로세서에 의해 조립되고로드됩니다. 그런 다음 프로세서는 이러한 명령어를 사용하여 해당 명령어에 해당하는 마이크로 프로그램 (마이크로 코드 형태)을 조회합니다. 이는 명령어가 "실제로"실행되는 것입니다. 특정 명령에 대한 마이크로 코드가 실행되면 (하나 이상의 클럭 사이클이 걸릴 수 있음) 프로세서는 마이크로 코드를 실행하여 다음 명령을 페치하고 사이클이 반복됩니다.


2
좋아, 나는 그것을 얻는다. 나는 생각한다 :) 명령 비트는 "스위치"를 토글하여 프로세서가 수신하는 데이터로 특정 작업을 수행하게합니까?
Simon Verbeke

4
@Simon Verbeke, 정확히 맞습니다. 스위치를 토글하여 프로세서의 전기 신호 흐름을 지시합니다 (더 많은 명령을 다시로드하도록 지시 할 수도 있습니다). 모든 것이 디지털 (논리 1/0 또는 참 / 거짓)이기 때문에 스위치 유추가 좋습니다. 아시다시피, 로직 레벨은 실제 전압입니다. 0 또는 1을 지정하는 것은 엔지니어의 몫입니다 (예를 들어, 로직 1은 2 볼트 이상으로 지정할 수 있습니다).
획기적인

1
컴파일러 또는 어셈블러에서 모든 것을 정리하는 "바이너리 동등 명령어"를 opcode라고합니다. MIPS 또는 ARM과 같은 RISC 아키텍처의 opcode 구조를 살펴보면 opcode의 다양한 비트가 특정 작업에 어떻게 매핑되는지 확인할 수 있습니다. 인텔은 수명과 시간이 지남에 따라 연장되는 경향으로 인해 더 이상 단순한 매핑 구조를 갖지 않습니다.
LawrenceC

3
아니요, x86 아키텍처의 수명과 시간이 지남에 따라 확장되었으므로 opcode의 개별 비트를 마이크로 연산에 매핑하는 것은 MIPS 또는 ARM과 같이 깔끔하고 깔끔하지 않습니다. 어느 정도까지 ( d.umn.edu/~gshute/spimsal/talref.html 참조 , 예를 들어 인텔 opcode는 이와 다릅니다 ). 인텔이 1978 년에 x86 CPU를 출시했을 때 "RISC"라는 개념이 많지 않다고 생각합니다.
LawrenceC

5
일부 CPU 만 마이크로 코드 된다는 점에 유의해야합니다 . 일부 (대부분 더 작은 장치)는 어셈블리 opcode에서 직접 작동합니다. 아키텍처에 따라 다릅니다.
가짜 이름

37

프로세서는 실제로 명령이 무엇인지 '알지'않습니다. 명령은 프로세서가 명령의 의미를 해석하는 것을 수행하게하는 이진 패턴입니다.

예를 들어, ADD-R1-into-R2 조작은 레지스터 1과 2의 값이 ALU (산술 및 논리 단위)에 도달하게하고 ALU가 다양한 다른 항목 대신에 가산기의 출력을 사용하게하고 실제 프로세서는 매우 복잡한 최적화를 사용하지만 이러한 모든 것들 ( 멀티플렉서 , 가산기 , 카운터 등) 을 달성하는 간단한 논리 회로가 있습니다.

브레이크를 밟을 때 차가 어떻게 속도를 늦추는지를 묻는 것과 같습니다. 자동차는 알지 못합니다. 브레이크 페달은 하드 패드가 휠에 밀리는 방식을 간접적으로 제어하기 위해 발생합니다.


5
자동차 브레이크 페달과 좋은 비유.
rjmunro

10

예를 들어 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는 특수한 의미를 연관시킨 다음 그에 따라 작동하는 숫자로 변환됩니다.


2
이 특정 비트 패턴에 니모닉 기호 "mov"를 할당하는 것은 완전히 임의적 이라는 점도 주목할 가치가 있습니다 . 원칙적으로 그 명령을 "oof"라고하는 어셈블러를 작성할 수 있으며, 기억하기 어려운 것 외에도 잘 작동합니다.
dmckee


4

가장 낮은 수준에서 CPU는 모두 추가 할 수 있습니다. 또한 빼기, 곱하기 및 나눌 수 있습니다 (이것은 다른 방식으로 추가 된 것임). CPU는이를 사용하여 메모리 주소에 추가 사항을 적용하여 메모리에서 데이터를 이동합니다.

이것이 가장 낮은 수준이라는 것을 명심하십시오. CPU는 실제로 마이크로 코드 형태로 특정 명령을 "이해합니다". 획기적인 답변을 참조하십시오.


7
AND, OR 및 NOT과 같은 논리 연산과 비트 시프 팅은 추가보다 더 기본적입니다. 추가는 실제로 이러한 작업의 관점에서 표현 될 수 있습니다. 실제로 이러한 작업을 수행하는 것 외에는 별개의 IC (Texas Instruments LS 시리즈)가 있으며이를 사용하여 일종의 CPU를 구축 할 수 있습니다. 예를 들어 CPU없이 게임을 만드는 방법을 보려면 Google "Pong 회로도"를 참조하십시오.
LawrenceC

나는 더 많은 소프트웨어 관점에서 의미했다. 그렇다. 하드웨어 / 논리적으로 현명한 양의 NAND와 NOR 게이트가있다. 좋은 지적.
n0pe

2

programmers.stackexchange.com에 관련 답변을 제공했습니다. 컴퓨터 작동 방법을 참조하십시오 . 여기서 나는 컴퓨터가 명령을 해석하고 전자를 이동시키는 방법에 대해 처음부터 모든 것을 간략히 살펴 보았습니다.

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