【초보자용】도해로 배우는 CPU의 구조

배경


본 기사는, 움직여 알 수 있는 CPU를 만드는 방법 10강 를 참고로 하면서, 프로그램 언어가 CPU 내부에서 어떻게 처리되고 있는지를 확인했을 때의 비망록입니다.

분석 대상(C 언어 및 어셈블리)


CompilerExplorer 을 사용하여 C 언어 처리를 어셈블리로 변환했습니다. 컴파일러는 MSP430 gcc6.2.1을 선택합니다.

움직여 알 수 있는 CPU를 만드는 방법 10강 에서 사용하고 있는 컴파일러와 상기의 컴파일러는 다르기 때문에, 일부 처리가 전후하고 있는 부분이 있습니다.

CPU 구성도 정보


본 기사에서 다루는 CPU의 구성은 다음과 같습니다.

각 단계에서의 ALU의 처리 내용은 아래 그림의 황색 테두리 내에 기재되어 있으므로 참고해 주십시오.

처리 흐름


[Flow0] 기계어 생성
[Flow1] Load
[Flow2] 추가
[Flow3] Store memory
[Flow4] Judge
[Flow5] Jump

동작 이미지



[Flow0] 기계어 생성


프로그램 언어는 런타임시 컴파일러에 의해 기계어(0010101...과 같은 0과 1의 열)로 번역됩니다. 번역 후 기계어는 ROM에 저장됩니다.
    

[Flow1] Load


CPU의 범용 레지스터에 계산에 필요한 데이터를 할당합니다.
메인 메모리에서 읽은 기계어가 저장되는 명령어 레지스터의 내용을 연산 장치에서 계산할 수 있는 형식으로 변환하고 변환 후의 데이터를 범용 레지스터에 할당합니다.
레지스터 0
sum을 보관 유지하는 레지스터.


등록 1
루프마다 i에 가산되는 값. for(i=0;i<10;i++)에서는 i=i+1의 "+1"에 해당합니다.


레지스터 2
가산하는 값을 저장하는 레지스터. for(i=0;i<10;i++)에서는 i=i+1의 "i"에 해당합니다.


레지스터 3
루프 횟수. for(i=0;i<10;i++)의 10에 해당합니다.


[Flow2] 추가


i=i+1에 해당합니다.


sum=sum+i에 해당합니다.


[Flow3] Store memory


Sum을 RAM에 보관합니다.


[Flow4] Judge


i와 10(루프 횟수)를 비교하는 부분에 해당합니다.


[Flow5] Jump


i=10일 때, ROM으로부터 CPU 종료 명령을 호출한다.

i≠10일 때 ROM에서 ADD명령을 불러낸다.

[Flow2] Add로 돌아가서 비슷한 과정을 반복합니다.

참고문헌


이 기사는 다음 정보를 참고로 작성했습니다.
  • 「움직이는 CPU를 만드는 방법 10강」 기술평론사
  • CPU 에뮬레이터 샘플 코드 (C 언어)
  • 컴퓨터·아키텍쳐[보충 자료](CPU의 고속화 수법)
  • 기계어 서론 제1회 계산기의 구조와 기계어
  • 5.9.2 산술 연산 명령 (RENESAS)
  • 어셈블리를 만져 보자.

  • 관련 기사


    프로그래머를 위한 논리 회로 7선

    좋은 웹페이지 즐겨찾기