2.5.1. MOV 및 MVN을 통한 직접 로드

ARM 및 Thumb-2에서는 32비트 MOVMVN 명령어를 사용하여 광범위한 상수 값을 레지스터에 직접 로드할 수 있습니다.

16비트 Thumb MOV 명령어는 0 ~ 255 범위의 상수를 로드할 수 있습니다. 16비트 MVN 명령어를 사용하여 상수를 로드할 수는 없습니다.

ARM 상태 즉치 상수에서는 단일 ARM 명령어로 로드할 수 있는 값 범위를 보여 주고 Thumb-2 즉치 상수에서는 단일 Thumb-2 명령어로 로드할 수 있는 값 범위를 보여 줍니다.

MOV 또는 MVN 중 어느 것을 사용할지를 지정하지 않아도 어셈블러에서 자동으로 적절한 명령어를 사용합니다. 이 기능은 값이 어셈블리 타임 변수인 경우에 유용합니다.

사용할 수 없는 상수가 포함된 명령어를 작성하면 어셈블러에서 오류를 보고합니다. 이 작업을 수행하는 즉시 n은 범위를 벗어나게 됩니다.

ARM 상태 즉치 상수

ARM 상태의 경우

  • MOV0x0-0xFF (0 ~ 255) 범위의 8비트 상수 값을 로드할 수 있습니다.

    또한 이러한 값을 짝수로 회전할 수 있습니다.

    또한 이러한 값은 별도의 명령어로 로드하지 않고 대부분의 데이터 처리 연산에서 즉치 피연산자로 사용할 수 있습니다.

  • MVN으로 이러한 값의 비트 단위 보수를 로드할 수 있습니다. 숫자 값은 - (n+1) 입니다. 여기서 nMOV에서 사용할 수 있는 값입니다.

  • ARMv6T2 이상에서는 MOV0x0-0xFFFF (0 ~ 65535) 범위의 16비트 숫자를 로드할 수 있습니다.

Table 2.5에서는 이 명령어가 제공하는 8비트 값 범위를 보여 줍니다 (데이터 처리 연산의 경우).

Table 2.6에서는 이 명령어가 제공하는 16비트 값 범위를 보여 줍니다 (MOV 명령어의 경우에만).

Table 2.5. ARM 상태 즉치 상수 (8비트)

바이너리10진수단계16진수MVN 값a메모
000000000000000000000000abcdefgh0-25510-0xFF–1 ~ +256-
0000000000000000000000abcdefgh000-102040-0x3FC–4 ~ +1024-
00000000000000000000abcdefgh00000-4080160-0xFF0–16 ~ +4096-
000000000000000000abcdefgh0000000-16320640-0x3FC0–64 ~ +16384-
 ............-
abcdefgh0000000000000000000000000-255 x 2242240-0xFF0000001-256 x –224-
cdefgh000000000000000000000000ab (비트 패턴) -- (비트 패턴) 메모의 b 참조
efgh000000000000000000000000abcd (비트 패턴) -- (비트 패턴) 메모의 b 참조
gh000000000000000000000000abcdef (비트 패턴) -- (비트 패턴) 메모의 b 참조

Table 2.6. MOV 명령어의 ARM 상태 즉치 상수

바이너리10진수단계16진수MVN 값메모
0000000000000000abcdefghijklmnop0-6553510-0xFFFF-메모의 c 참조

메모

이러한 참고는 Table 2.5Table 2.6에 대한 추가 정보를 제공합니다.

a

MVN 값은 MVN 명령어에서만 피연산자로 직접 사용할 수 있습니다.

b

이러한 값은 ARM 상태에서만 사용할 수 있습니다. 이 표에 나와 있는 다른 모든 값은 Thumb-2에서도 사용할 수 있습니다.

c

이러한 값은 ARMv6T2 이상에서만 사용할 수 있고 다른 명령어에서 피연산자로 직접 사용할 수 없습니다.

Thumb-2 즉치 상수

Thumb 상태에 있는 ARMv6T2 이상의 경우

  • 32비트 MOV 명령어가 다음을 로드할 수 있습니다.

    • 0x0 ~ 0xFF (0 ~ 255) 범위의 8비트 상수 값

    • 임의의 숫자를 기준으로 왼쪽으로 시프트된 8비트 상수 값

    • 레지스터의 4바이트 모두에 복제된 8비트 패턴

    • 바이트 1과 바이트 3이 0으로 설정된 상태에서 바이트 0과 바이트 2에 복제된 8비트 패턴

    • 바이트 0과 바이트 2가 0으로 설정된 상태에서 바이트 1과 바이트 3에 복제된 8비트 패턴

    또한 이러한 값은 별도의 명령어로 로드하지 않고 대부분의 데이터 처리 연산에서 즉치 피연산자로 사용할 수 있습니다.

  • 32비트 MVN 명령어는 이러한 값의 비트 단위 보수를 로드할 수 있습니다. 숫자 값은 - (n+1) 입니다. 여기서 nMOV에서 사용할 수 있는 값입니다.

  • 32비트 MOV 명령어는 0x0 ~ 0xFFFF (0 ~ 65535) 범위의 16비트 숫자를 로드할 수 있습니다. 이러한 값은 데이터 처리 연산에서 즉치 피연산자로 사용할 수 없습니다.

Table 2.7에서는 이 명령어가 제공하는 값 범위를 보여 줍니다 (데이터 처리 연산의 경우).

Table 2.8에서는 이 명령어가 제공하는 16비트 값 범위를 보여 줍니다 (MOV 명령어의 경우에만).

Table 2.7. Thumb-2 즉치 상수

바이너리10진수단계16진수MVN 값a메모
000000000000000000000000abcdefgh0-25510-0xFF–1 ~ +256-
00000000000000000000000abcdefgh00-51020-0x1FE–2 ~ +512-
0000000000000000000000abcdefgh000-102040-0x3FC–4 ~ +1024-
 ............-
0abcdefgh000000000000000000000000-255 x 2232230-0x7F8000001-256 x –223-
abcdefgh0000000000000000000000000-255 x 2242240-0xFF0000001-256 x –224-
abcdefghabcdefghabcdefghabcdefgh (비트 패턴) -0xXYXYXYXY0xXYXYXYXY-
00000000abcdefgh00000000abcdefgh (비트 패턴) -0x00XY00XY0xFFXYFFXY-
abcdefgh00000000abcdefgh00000000 (비트 패턴) -0xXY00XY000xXYFFXYFF-
00000000000000000000abcdefghijkl0-4095 10-0xFFF-메모의 b 참조

Table 2.8. MOV 명령어의 Thumb-2 즉치 상수

바이너리10진수단계16진수MVN 값메모
0000000000000000abcdefghijklmnop0-6553510-0xFFFF-메모의 c 참조

메모

이러한 참고는 Table 2.7Table 2.8에 대한 추가 정보를 제공합니다.

a

MVN 값은 MVN 명령어에서만 피연산자로 직접 사용할 수 있습니다.

b

이러한 값은 ADD, SUBMOV 명령어에서 피연산자로 직접 사용할 수 있지만 MVN 또는 다른 데이터 처리 명령어에서는 사용할 수 없습니다.

c

이러한 값은 MOV 명령어에서만 사용할 수 있습니다.

Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential