C 마이크로프로세서 프로그래밍/메모리 액세스

위키책, 위키책

C언어의 변수나 어셈블리에서의 저장공간은 메모리를 사용한다. CPU내의 레지스터는 임시 처리 버퍼로 사용한다. 보통의 대부분은 메모리에 저장하고, 특수한 상황이나 데이터 처리단계에서 CPU 내부의 레지스터를 사용한다.

변수로 설정된 값을 읽거나 쓰는 액세스는 변수의 데이터 처리 크기인 비트와 연관되어 메모리와 레지스터 간에 데이터 전송이 이루어 진다. 예를 들어 char 변수는 8비트 정수형이기 때문에 값을 액세스할 때 8비트 단위로 메모리와 레지스터간 한번 전송하는 단위가 된다. int 변수 등은 char와 다른 액세스 처리 단위를 갖는다. 기계어 코드가 실행되면서 메모리의 변수 저장값을 레지스터로 옮길 경우 CPU의 처리 단위에 따라 8,16,32,64비트 단위가 결정된다.

8비트 MCU는 한번에 8비트 밖에는 액세스가 불가능하기 때문에 int 형의 대부분의 16비트 변수는 2번의 기계어 전송명령에 따라 int 값 하나를 옮길 수 밖에 없다. 이에 비해 32비트 CPU라면 int 변수가 32비트 값을 갖기 때문에 한번에 32비트를 옮긴다. 32비트라도 char는 8비트의 단위로 옮길 필요가 있기 때문에 이때는 8비트 액세스를 한다. 따라서 32비트 CPU라도 데이터를 옮기는 단위가 변수에 따라 8,16,32비트 단위로 선택적 데이터 전송이 이루어 진다. 이말은 CPU내부의 처리할 때, 각 비트 단위를 선택적으로 선택할 수 있다는 말이 된다. 모든 CPU는 8비트 데이터 전송이 최소 단위가 된다. 물론 4비트 CPU라면 예외다.