4.2.9. PUSH 및 POP

전체 내림차순 스택에 레지스터 푸시 및 전체 내림차순 스택에서 레지스터 팝

구문

PUSH{cond} reglist
POP{cond} reglist

인수 설명:

cond

선택적 조건 코드입니다 (조건부 실행 참조).

reglist

중괄호로 묶인 비어 있지 않은 레지스터의 목록으로, 레지스터 범위를 포함할 수 있습니다. 이 목록에 하나 이상의 레지스터나 레지스터 범위가 포함될 경우 콤마로 구분해야 합니다.

사용법

PUSHPOP은 기준 레지스터가 sp (r13) 이고 조정된 주소가 기준 레지스터에 다시 기록된 STMDBLDM (또는 LDMIA) 의 동의어입니다. 이러한 경우 권장되는 니모닉은 PUSHPOP입니다.

레지스터는 스택에 번호 순서대로 저장됩니다. 즉, 가장 낮은 번호의 레지스터가 최하위 주소에 저장됩니다.

pc가 있는 reglist를 사용하는 POP

이 명령어는 스택에서 pc로 팝된 주소로 분기를 생성합니다. 일반적으로 이 분기는 시작 위치에 있는 스택에 lr이 푸시된 하위 루틴에서 되돌아옵니다.

ARMv5T 이상의 경우

  • 비트[1:0]은 0b10이면 안 됩니다.

  • 비트[0]이 1이면 실행이 Thumb 상태에서 계속됩니다.

  • 비트[0]이 0이면 실행이 ARM 상태에서 계속됩니다.

ARMv4에서는 로드된 주소의 비트[1:0]이 0b00이어야 합니다. 상태를 변경하는 데 POP을 사용할 수 없습니다.

Thumb 명령어

Thumb 명령어 세트에서는 이러한 명령어의 하위 세트를 사용할 수 있습니다.

16비트 명령어에는 다음 제한이 적용됩니다.

  • PUSH의 경우 reglist에는 Lo 레지스터 및 lr만 포함될 수 있습니다.

  • For POP의 경우 reglist에는 Lo 레지스터 및 pc만 포함될 수 있습니다.

32비트 명령어에는 다음 제한이 적용됩니다.

  • reglist는 sp를 포함해서는 안 됩니다.

  • PUSH의 경우 reglist는 pc를 포함해서는 안 됩니다.

  • POP의 경우 reglist는 lr 또는 pc 중 하나만 포함할 수 있습니다.

예제

    PUSH    {r0,r4-r7}
    PUSH    {r2,lr}
    POP     {r0,r10,pc} ; no 16-bit version available
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential