【초보자용】도해로 배우는 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로 돌아가서 비슷한 과정을 반복합니다.
참고문헌
이 기사는 다음 정보를 참고로 작성했습니다.
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로 돌아가서 비슷한 과정을 반복합니다.
참고문헌
이 기사는 다음 정보를 참고로 작성했습니다.
[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로 돌아가서 비슷한 과정을 반복합니다.
참고문헌
이 기사는 다음 정보를 참고로 작성했습니다.
이 기사는 다음 정보를 참고로 작성했습니다.
관련 기사
프로그래머를 위한 논리 회로 7선
Reference
이 문제에 관하여(【초보자용】도해로 배우는 CPU의 구조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/asa551/items/88b287d84649f51a5f42
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【초보자용】도해로 배우는 CPU의 구조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/asa551/items/88b287d84649f51a5f42텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)