문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 ARM(CPU) (문단 편집) === [[명령어 집합]] === 약간 변형된 [[RISC]] 명령어 구조로 1985년에 처음 개발되었다. 즉 의외로 초기 RISC 개발사와 역사를 같이 할 정도로 오래된 구조이다. 대체적인 특징은 일반적 RISC와 유사하나 다음과 같은 부분은 ARM 고유의 특징이다. * 레지스터 뱅크 구조: 고속 인터럽트 처리 모드에서 독자적으로 쓸 수 있는 레지스터 뱅크가 있다. 이 특징은 인터럽트를 빠르게 처리하는데 유효하다. * 조건부 실행 플래그: 조건분기 명령어와 결합하여 짧은 조건분기 처리에 유효한 특징이다. * SP(스택포인터), LR(링크레지스터), PC(프로그램 카운터)가 일반 레지스터에 포함되어 있다. 이 때문에 예외 처리가 타 CPU에 비해 독특해지게 된다. * 뱅크당 16개의 레지스터: 통상 RISC 구조의 경우 32개 혹은 그 이상의 일반 레지스터가 있는 경우가 많으나 ARM은 다소 적은 16개의 레지스터만 있다. 게다가 위에서 언급한 SP/LR/PC가 특수 목적 레지스터이므로 실제로 사용 가능한 레지스터 숫자는 13개이다. * 배럴 시프트 기능: 명령어 내에서 배럴 시프트 기능을 지정할 수 있다. 타 CPU의 명령어 세트에서는 명령어 두 개로 처리될 내용을 하나의 명령어로 처리할 수 있다. * 다중 로드/스토어 명령: 단일 명령으로 여러 레지스터의 로드/스토어를 동시에 제어할 수 있다. 단일 명령어를 1사이클에 처리해야 한다는 RISC 명령어의 원칙에 위배되는 대표적인 명령어이지만 코드 크기 절감과 코드 디코딩 부하 경감(그리고 그로 인한 전력 절감)에 도움이 된다. * Thumb 16비트 명령어 세트: ARM이 고성능 컨트롤러 시장을 석권하는데 가장 크게 일조한 특징이자 ARM의 오늘날을 있게 한 특징이다. 일반적인 32비트 크기의 ARM 명령어와는 아예 별도의 16비트 크기의 명령어 세트를 따로 가지고 있다. 명령어 크기가 16비트라고 해도 일반 목적 레지스터 크기는 여전히 32비트이므로 ARM 자체가 32비트인 건 변하지 않는다. Thumb 명령어는 마이크로컨트롤러 제품군에서는 극히 유용하기 때문에 심지어 최신형 Cortex-M 제품군은 Thumb2 명령어만을 지원하게 되었다. 사실 메모리 서브시스템의 속도가 낮거나 실행속도가 별 문제되지 않는 코드의 경우 코드 바이너리 크기를 줄이는 게 유리하기 때문에 고성능 위주의 Cortex-A가 적용된 시스템에서조차도 연산 성능에 민감하지 않은 코드들은 Thumb로 컴파일되었을 정도. * Thumb-2 16/32비트 명령어 세트: 위 Thumb의 확장형으로, Thumb의 16비트 크기 명령어에 더해 32비트 크기 명령어가 추가된 형태. 기존의 16비트 Thumb 명령어와 섞어서 쓸 수 있다. 다만 위의 특징들은 새로 도입되는 [[ARMv8-A]]의 [[64비트]] 명령어 세트에서는 상당 부분 사라지게 되었다. 이는 저러한 특징들이 도입되는 1985년도에는 나름대로 합리적인 이유가 있었으나 기술의 발전으로 인해 굳이 명령어 수준에서의 복잡성을 늘려놓을 필요가 없게 되었기 때문. 대체적인 특징들이 컨트롤러급 저속 CPU에서 ISR을 빠르게 처리하는 데 유리한 구조라거나 코드 크기 절감에 유리한 구조 등은 수십 MHz 대역에 1~2단 파이프라인이 일반적인 시절에는 타당한 측면이 있었으나 현재 기준에서는 그다지 적합하지 않은 측면이 많다. 통상 MMU가 내장된 제품군(대표적인 예가 Cortex-A 계열)들은 리눅스나 유닉스 계열, 그리고 윈도우 CE 계열의 지원을 받는다. 반면 MMU가 아닌 보다 단순한 MPU가 내장된 제품군(대표적으로 Cortex-R)은 주로 Real-time OS(RTOS)의 지원을 받는 경우가 많다. MPU도 없는 보다 작은 규모의 마이크로컨트롤러 대상 제품군(대표적으로 Cortex-M)들은 OS의 지원이 필요 없거나, 스케줄러 수준의 단순한 OS의 지원을 받는 경우가 많으며, 이러한 제품들은 캐시도 없고 동작 속도도 수십 MHz에 불과한 경우가 대다수. 2014년경부터 [[ARMv8-A]]A-AArch64 명령어 세트가 적용된 Cortex-A5x 계열 프로세서가 시장에 출시되고 이어서 본격적으로 64비트의 시대를 열게 되었다. 이미 Cortex-A15 CPU에 적용된 RAM의 크기가 32비트 메모리 공간의 한계인 4GB에 근접하는 3GB까지 늘어난 상황이기 때문에 Cortex-A15 이후의 Cortex-A에 64비트 구조를 적용하는 것은 시기적절한 선택. 다만 64비트 CPU를 다루는 명령어라고 해도 명령어의 워드 크기는 여전히 32비트이므로 명령어 세트 구조 자체는 크게 복잡해지지는 않는다. 반면 CISC인 x86의 경우에는 64비트 구조가 도입되면서 64비트용 명령어에는 일률적으로 8bit의 prefix가 붙게 되었다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기