| |||
| Home > ARM 어셈블리 언어 작성 > 어셈블리 언어 변경 사항 | |||
Table 2.10에서는 최신 ARM/Thumb 어셈블러 언어와 이전의 개별 ARM 및 Thumb 어셈블러 언어 간의 기본 차이점을 보여 줍니다. 어셈블러에서는 이전 ARM 구문이 허용됩니다.
Table 2.10. 이전 ARM 어셈블리 언어의 변경 사항
| 변경 내용 | 이전 ARM 구문 | 기본 구문 |
|---|---|---|
LDM 및 STM의 기본 주소
지정 모드는 IA입니다. |
| LDM, STM |
ARM 및 Thumb에서 전체 내림차순 스택 연산에 대해 PUSH 및 POP 니모닉을
사용할 수 있습니다. |
STMFD sp!, { |
PUSH { |
ARM 및 Thumb에서는 다른 연산을 제외하고 회전만 포함된 명령어에 대해 LSL, LSR, ASR, ROR 및 RRX 명령어 니모닉을
사용할 수 있습니다. | MOV | LSL |
PC 상대 주소 지정에는 형식을
사용합니다. 새 코드에서 형식을
사용하면 안 됩니다. | LDR | LDR |
| 더블워드 메모리 액세스에 대해 두 레지스터를 모두 지정합니다. 사용할 수 있는 레지스터 조합에 대한 규칙을 따라야 합니다. | LDRD | LDRD |
{,
사용될 경우 항상 모든 명령어의 마지막 요소입니다. |
ADD{ |
ADDS{ |
ARM 및 Thumb-2 코드 모두에서 ARM { 조건부 형식
및 Thumb-2 IT 명령어를 모두 사용할 수 있습니다. 어셈블러에서는 두 코드의 일관성을
확인하고 해당 코드를 현재 명령어 세트에 따라 어셈블합니다. | ADDEQ r1, r2, r3 LDRNE r1, [r2, r3] | ITEQ E ADDEQ r1, r2, r3 LDRNE r1, [r2, r3] |
또한 이전 어셈블러에서 허용되지 않은 일부 융통성이 허용됩니다(Table 2.11 참조).
Table 2.11. 필요 조건 완화
| 완화 | 기본 구문 | 허용 구문 |
|---|---|---|
| 대상 레지스터가 첫 번째 연산과 동일할 경우 명령어의 2레지스터 형식을 사용할 수 있습니다. |
|
|
ARM/Thumb 어셈블리 언어를 사용하여 Thumb 프로세서에 대한 소스 코드를 작성할 수 있습니다.
Thumb-2 이전 프로세서에 대한 Thumb 코드를 작성할 경우 프로세서에서 사용할 수 있는 명령어로 제한해야 합니다. 사용할 수 없는 명령어를 사용하려고 하면 어셈블러에서는 오류 메시지를 생성합니다.
Thumb-2 프로세서에 대한 Thumb 코드를 작성할 경우 가능한 여러 위치에 16비트 명령어를 사용하여 코드 크기를 최소화할 수 있습니다.
Table 2.12에서는 Thumb
어셈블리 언어와 ARM 어셈블리 언어 간의 기본 차이점을 보여 줍니다. 어셈블러에서는 CODE16 지시문보다
먼저 사용되거나 소스 파일이 --16 명령 행 옵션으로 어셈블된 경우에만 이전 Thumb
구문을 허용합니다.
Table 2.12. 이전 Thumb 구문과 현재 구문 간의 차이점
| 변경 내용 | 이전 Thumb 구문 | 새 구문 |
|---|---|---|
LDM 및 STM의 기본 주소
지정 모드는 IA입니다. | LDMIA, STMIA | LDM, STM |
플래그를 업데이트하는 명령어에는 S 접미사를
사용해야 합니다. 이 변경 사항은 32비트 Thumb-2 명령어와의 충돌을 방지하는 데 필수적입니다. | ADD r1, r2, r3 SUB r4, r5, #6 MOV r0, #1 LSR r1, r2, #1 | ADDS r1, r2, r3 SUBS r4, r5, #6 MOVS r0, #1 LSRS r1, r2, #1 |
| ALU 명령어의 기본 형식은 대상 레지스터가 첫 번째 피연산자와 동일한 경우에도 세 개의 레지스터를 지정합니다. | ADD r7, r8 SUB r1, #80 | ADD r7, r7, r8 SUBS r1, r1, #80 |
및 이
둘 다 Lo 레지스터이면 MOV 은 ADDS 으로 디스어셈블됩니다. | MOV | ADDS |
NEG 는 RSBS 으로 디스어셈블됩니다. | NEG | RSBS |
NOP 명령어는 가능한 경우 MOV r8,
r8을 바꿉니다. | - NOP | NOP MOV r8, r8 |