| |||
| Home > ARM 및 Thumb 명령어 > 일반 데이터 처리 명령어 > 유연한 두 번째 피연산자 | |||
대부분의 ARM 및 Thumb-2 일반 데이터 처리 명령어에는 유연한 두 번째 피연산자가 있습니다. 이
피연산자는 각 명령어의 구문에 대한 설명에 로
표시됩니다. ARM 명령어와 Thumb-2 명령어의 Operand2에
대해 허용되는 옵션에는 몇 가지 차이점이 있습니다.Operand2
에는
다음 두 가지 형식을 사용할 수 있습니다.Operand2
#constant
Rm{,shift}
인수 설명:
constant숫자 상수로 평가되는 식입니다. ARM과 Thumb-2에서 사용할 수 있는 상수의 범위는 동일하지 않습니다. 자세한 내용은 Operand2의 상수를 참조하십시오.
Rm두 번째 피연산자에 대한 데이터가 들어 있는 ARM 레지스터입니다. 레지스터 내의 비트 패턴은 다양한 방법으로 시프트하거나 회전할 수 있습니다.
shift에
적용할 선택적 시프트로. 다음 중 하나일 수 있습니다.Rm
ASR #n비트만큼
오른쪽으로 산술 시프트. 1 ≤ n ≤ 32.n
LSL #n비트만큼
왼쪽으로 논리 시프트. 0 ≤ n ≤ 31.n
LSR #n비트만큼
오른쪽으로 논리 시프트. 1 ≤ n ≤ 32.n
ROR #n비트만큼
오른쪽으로 회전. 1 ≤ n ≤ 31.n
RRX확장 포함 1비트만큼 오른쪽으로 회전합니다.
type RsARM에서만 사용할 수 있습니다. 다음은 각 요소에 대한 설명입니다.
typeASR, LSL, LSR, ROR 중
하나입니다.
Rs시프트 양을 제공하는 ARM 레지스터입니다. 최하위 바이트만 사용됩니다.
시프트 연산의 결과는 명령어의 로
사용되지만 Operand2 자체는 변경되지
않습니다.Rm
ARM 명령어에서는 32비트 워드 내에서 임의의 짝수 비트 수만큼 8비트 값을 오른쪽으로 회전하여 얻을
수 있는 모든 값을 에
지정할 수 있습니다.constant
32비트 Thumb-2 명령어에서 는
다음 중 하나일 수 있습니다.constant
32비트 워드 내에서 임의의 비트 수만큼 8비트 값을 왼쪽으로 시프트하여 얻을 수 있는 모든 상수
0x00XY00XY 형식의 모든 상수
0xXY00XY00 형식의 모든 상수
0xXYXYXYXY 형식의 모든 상수
이외에도 일부 명령어에서는 에
더 넓은 범위의 값을 지정할 수 있습니다. 이러한 상수에 대한 자세한 내용은 각 명령어에 대한 설명을 참조하십시오.constant
2, 4 또는 6비트만큼 8비트 값을 회전하여 얻은 상수는 ARM 데이터 처리 명령어에서만 사용할 수 있고 Thumb-2에서는 사용할 수 없습니다. 이외의 다른 모든 ARM 상수는 Thumb-2에서도 사용할 수 있습니다.
비트만큼 오른쪽으로
산술 시프트는 내용이 2의 보수 부호 있는 정수로 간주될 경우 n에
들어 있는 값을 2Rmn으로
나눕니다. 원래 비트[31]은 레지스터의 비트
왼쪽에 복사됩니다.n
비트만큼 오른쪽으로
논리 시프트는 내용이 부호 없는 정수로 간주될 경우 n에 들어
있는 값을 2Rmn으로
나눕니다. 레지스터의 왼쪽 비트는
0으로 설정됩니다.n
비트만큼 왼쪽으로
논리 시프트는 내용이 부호 없는 정수로 간주될 경우 n에
들어 있는 값을 2Rmn으로
곱합니다. 이 경우 경고 없이 오버플로가 발생할 수 있습니다. 레지스터의 오른쪽 비트는
0으로 설정됩니다.n
비트만큼 오른쪽으로
회전은 레지스터의 오른쪽 n비트를 결과의 왼쪽 n비트로 이동합니다.
이때 다른 모든 비트도 n비트만큼
오른쪽으로 이동합니다(Figure 4.1 참조).n
확장 포함 오른쪽으로 회전은 의
내용을 1비트만큼 오른쪽으로 회전합니다. carry 플래그는 Rm의
비트[31]로 복사됩니다(Figure 4.2 참조).Rm
S 접미사가 지정된 경우 의
이전 비트[0] 값이 carry 플래그로 시프트됩니다(carry 플래그 참조).Rm
명령어가 다음 중 하나일 경우 carry 플래그는 에서
시프트된 마지막 비트로 업데이트됩니다.Rm
S 접미사를
사용하는 경우, MOV, MVN, AND, ORR, ORN, EOR 또는 BIC
S 접미사가 필요 없는 경우, TEQ 또는 TST
일부 명령어 쌍(ADD와 SUB, ADC와 SBC, AND와 BIC, MOV와 MVN, CMP와 CMN)은 의 부정이나
논리 반전을 제외하고 서로 동일합니다.constant
값을
사용할 수 없지만 해당 논리 반전이나 부정을 사용할 수 있는 경우 어셈블러는 둘 중 한 명령어를 대체하고 constant를
반전시키거나 부정합니다.constant
디스어셈블리 목록을 소스 코드와 비교할 때는 이러한 사항에 주의해야 합니다.
--diag_warning 1645 어셈블러 명령 행 옵션을 사용하여 명령어
대체가 발생하는 시기를 확인할 수 있습니다.