답변:
THUMB 명령어는 ARM 명령어보다 본질적으로 느리지 않지만 기능이 더 제한적입니다. 코드에 THUMB 명령어의 기능 만 필요한 경우 ARM보다 적은 공간을 차지하지만 동일한 수의 명령어 및 다른 것들은 동일한 속도로 실행됩니다. 코드에 더 많은 기능이 필요한 경우 ARM 명령어보다 많은 THUMB 명령어가 필요하고 실행하는 데 시간이 더 걸리고 다른 것들은 동일합니다 (아래 참조).
THUMB는 다음 두 가지 이유로 작은 명령 크기로 인해 마이크로 컨트롤러에서 널리 사용됩니다.
두 번째 이유로, 코드에 ARM 명령어 세트의 기능이 필요하지 않으면 THUMB 코드가 실제로 더 빠르게 실행됩니다. 이는 두 번이 아닌 플래시에서 한 번의 I / O 주기로 명령을 가져올 수 있기 때문입니다. 플래시 인터페이스의 속도에 따라, 두 번째 읽기는 CPU가 단순히 정지되고 아무 것도 할 수없는 명령 당 하나 이상의 대기주기가 발생할 수 있습니다.
코드 밀도가 유일한 관심사 인 실행하기 전에 코드를 RAM에 복사 할 수 있으면 (일반적으로 최근 ARM 마이크로 컨트롤러의 경우 32 비트로 보임) 코드에 복사 할 수있는 경우 문제가되지 않습니다. 이를 위해 많은 도구가 주어진 함수에 대해 어떤 표현이 더 효율적인지 찾으려고 노력할 것입니다. 컴파일러가 더 적은 수의 명령어로 THUMB 코드를 생성 할 수 있으면 ARM이 더 적은 명령어를 생성하면 ARM이 생성됩니다. 내가 올바르게 기억한다면 Keil의 기본 모드입니다.
특정 칩 (AT91SAM7S32)의 경우 플래시 컨트롤러에는 액세스를 예측하여보다 효율적으로 작업을 수행하여 ARM 명령어 실행을 향상시킬 수있는 프리 페치 버퍼가 있다고 언급되어 있습니다. 그러나 프리 페치는 "Thumb 모드에서 실행"에 가장 적합한 "16 비트 액세스를 최적화하는" "이중 32 비트"버퍼라고 말하며 이는 속도 향상을 의도하지 않았 음을 나타냅니다. ARM 명령어이지만 코어가 THUMB 모드에서 더 빠르게 실행될 수 있도록합니다.
다이어그램에서 칩의 플래시에는 실제로 32 비트 데이터 버스가있는 것처럼 보입니다. 프리 페처는 전체 32 비트를 읽고 16 비트를 CPU에 제공하고 (THUMB 모드에서) 전체 32 비트를 캐싱하여 작동하는 것으로 보입니다. 다음주기 동안 CPU가 캐시에서 두 번째 16 비트를 읽을 때 플래시 컨트롤러는 다음 32 비트를 읽고 캐싱합니다. 이런 식으로 플래시 속도가 CPU 코어 속도보다 약간 느리더라도 THUMB 코드는 초기 대기 이상없이 실행될 수 있습니다. 섹션 19.2.2 "읽기 작업"에 자세한 내용이 있습니다.
플래시는 32 비트 버스이기 때문에 (내가 알 수있는 것처럼) CPU와 플래시 클럭이 동일하면 THUMB은 ARM보다 코드 밀도 만 제공합니다. 프리 페치가 속도를 제공하는 것보다 CPU 코어가 플래시보다 빠르게 실행되도록하려면 (그리고이 칩의 모든 타이밍을 검토하지는 않았다. 실제 플래시 액세스 감소로 인해 THUMB의 이점. 그러나이 속도 이점은 명령 별 이점입니다. THUMB 명령어 대 ARM 명령어의 수가 충분히 크면 명령어 당 속도보다 빠르기 때문에 ARM이 루틴 당 속도가 더 빠릅니다.