| |||
| Home > 인라인 및 임베디드 어셈블러 > 인라인 어셈블리 코드와 임베디드 어셈블리 코드의 차이점 | |||
인라인 어셈블리와 임베디드 어셈블리는 컴파일하는 방식이 서로 다릅니다.
인라인 어셈블리 코드는 상위 수준의 프로세서 추상화를 사용하며 코드 생성 중에 C 및 C++ 코드와 통합됩니다. 그러므로 컴파일러에서 C 및 C++ 코드와 어셈블러 코드를 함께 최적화합니다.
인라인 어셈블리 코드와 달리 임베디드 어셈블리 코드는 C 및 C++ 코드와 따로 어셈블되어 컴파일된 오브젝트를 생성합니다. 이후에 이 오브젝트는 C 또는 C++ 소스의 컴파일을 통해 생성된 오브젝트와 결합합니다.
컴파일러로 인라인 어셈블리 코드를 인라인할 수 있지만 임베디드 어셈블리 코드는 암시적으로나 명시적으로나 인라인할 수 없습니다.
Table 4.1은 인라인 어셈블러와 임베디드 어셈블러의 주요 차이점을 간단히 설명합니다.
Table 4.1. 인라인 어셈블러와 임베디드 어셈블러의 차이점
| 기능 | 임베디드 어셈블러 | 인라인 어셈블러 |
|---|---|---|
| 명령어 세트 | ARM 및 Thumb | ARM만 |
| ARM 어셈블러 지시문 | 모두 지원 | 지원 안 됨 |
| ARMv6 명령어 | 모두 지원 | 미디어 명령어만 지원 |
| C/C++ 식 | 상수 식만 | 모든 C/C++ 식 |
| 어셈블리 코드의 최적화 | 최적화 안 함 | 모두 최적화 |
| 인라인 | 불가능 | 가능 |
| 레지스터 액세스 | 지정된 물리 레지스터 사용. PC, LR 및 SP도
사용 가능 | 가상 레지스터 사용(가상 레지스터 참조). |
| 명령어 반환 | 코드에 추가해야 함 | 자동 생성됨. BX , BXJ 및 BLX 명령어는
지원 안 됨 |
BKPT 명령어 | 직접 지원 | 지원되지 않음 |
임베디드 어셈블리 식과 C 또는 C++ 식의 차이점도 참조하십시오.