| |||
| Home > ARM 및 Thumb 명령어 > 메모리 액세스 명령어 > LDREX 및 STREX | |||
단독 레지스터 로드 및 저장
LDREX{cond} Rt, [Rn {, #offset}]
STREX{cond} Rd, Rt, [Rn {, #offset}]
LDREXB{cond} Rt, [Rn]
STREXB{cond} Rd, Rt, [Rn]
LDREXH{cond} Rt, [Rn]
STREXH{cond} Rd, Rt, [Rn]
LDREXD{cond} Rt, Rt2, [Rn]
STREXD{cond} Rd, Rt, Rt2, [Rn]
인수 설명:
cond선택적 조건 코드입니다(조건부 실행 참조).
Rd반환된 상태에 대한 대상 레지스터입니다.
Rt로드 또는 저장할 레지스터입니다.
Rt2더블워드를 로드 또는 저장할 두 번째 대상 레지스터입니다.
Rn메모리 주소의 기준이 되는 레지스터입니다.
offset의
값에 적용되는 오프셋입니다. Rn은
Thumb-2 명령어에서만 사용할 수 있습니다. offset이
생략될 경우 오프셋은 0으로 간주됩니다.offset
LDREX는 메모리에서 데이터를 로드합니다.
실제 주소에 공유 TLB 특성이 있을 경우, LDREX는 실제 주소를 현재 프로세서의
단독 액세스로 태그 설정하고 다른 모든 실제 주소에서 이 프로세서의 단독 액세스 태그를 지웁니다.
또는 실행 프로세서에 미결정 태그가 설정된 실제 주소가 있다는 사실을 태그 설정합니다.
STREX는 메모리에 대한 조건부 저장을 수행합니다. 조건은 다음과 같습니다.
실제 주소에 공유 TLB 특성이 없고 실행 프로세서에 미결정 태그가 설정된 실제 주소가
있는 경우 저장 작업이 수행되고 태그가 지워지며 에서
값 0이 반환됩니다.Rd
실제 주소에 공유 TLB 특성이 없고 실행 프로세서에 미결정 태그가 설정된 실제 주소가
없는 경우 저장 작업이 수행되지 않고 에서
값 1이 반환됩니다.Rd
실제 주소에 공유 TLB 특성이 있고 실제 주소가 실행 프로세서의 단독 액세스로 태그
설정된 경우 저장 작업이 수행되고 태그가 지워지며 에서
값 0이 반환됩니다.Rd
실제 주소에 공유 TLB 특성이 있고 실제 주소가 실행 프로세서의 단독 액세스로 태그
설정되지 않은 경우 저장 작업이 수행되지 않고 에서
값 1이 반환됩니다.Rd
은 ARM
명령어에서 사용할 수 없습니다. offset의
값은 0 ~ 1020 범위에 있는 4의 배수일 수 있습니다.offset
, Rd, Rt 또는 Rt2에
r15를 사용하면 안 됩니다.Rn
STREX의 경우, 가 Rd, Rt 또는 Rt2과
동일한 레지스터이면 안 됩니다. RnLDREX의 경우, 와 Rt가
동일한 레지스터이면 안 됩니다.Rt2
ARM 명령어의 경우
가
짝수의 레지스터여야 하고 r14이면 안 됩니다.Rt
가 Rt2이어야
합니다.R(d+1)
LDREX 및 STREX를 사용하여 다중 프로세서와 공유
메모리 시스템에서 프로세서 간 통신을 구현합니다.
성능상의 이유로 해당 LDREX 명령어와 STREX 명령어
사이의 명령어 수를 최소로 유지해야 합니다.
STREX 명령어에 사용된 주소는 가장 최근에 실행된 LDREX 명령어에
사용된 주소와 같아야 합니다. 다른 주소에 대해 STREX 명령어를 실행하면 예상할 수 없는
결과가 발생합니다.
ARM LDREX 및 STREX는 ARMv6 이상에서 사용할
수 있습니다.
ARM LDREXB, LDREXH, LDREXD, STREXB, STREXD 및 STREXH는
ARMv6K 이상에서 사용할 수 있습니다.
LDREXD와 STREXD를 ARMv7-M 프로파일에서 사용할
수 없다는 점을 제외하고 이러한 32비트 Thumb 명령어는 ARMv6T2와 ARMv7에서 모두 사용할 수 있습니다.
이러한 명령어의 16비트 버전은 없습니다.