7.5.3. FRAME PUSH

FRAME PUSH 지시어를 사용하여 주로 함수 진입점에서 호출 수신자가 레지스터를 저장할 때 어셈블러에 이를 알립니다. 이 지시어는 FUNCTIONENDFUNC 또는 PROCENDP 지시어가 있는 함수 내에서만 사용할 수 있습니다.

구문

FRAME PUSH의 대체 구문에는 다음과 같은 두 가지가 있습니다.

FRAME PUSH {reglist}
FRAME PUSH {reglist},n
FRAME PUSH n

인수 설명:

reglist

표준 프레임 주소 아래에 연속적으로 저장된 레지스터 목록입니다. 이 목록에는 최소한 하나 이상의 레지스터가 있어야 합니다.

n

스택 포인터가 이동하는 바이트 수입니다.

사용법

FRAME PUSHFRAME ADDRESS 지시어와 FRAME SAVE 지시어를 모두 사용하는 것과 같습니다. 이 지시어는 단일 명령어가 레지스터를 저장하고 스택 포인터를 변경할 때 사용할 수 있습니다.

FRAME PUSH는 해당 지시어가 참조하는 명령어 바로 다음에 사용해야 합니다.

n이 지정되지 않거나 0일 경우 어셈블러는 {reglist}를 기준으로 표준 프레임 주소의 새 오프셋을 계산합니다. 어셈블러는 다음을 가정합니다.

  • 푸시된 각 ARM 레지스터가 스택의 4바이트를 차지합니다.

  • 푸시된 각 VFP 단정밀도 레지스터가 스택에서 4바이트 외에도 각 목록을 위한 4바이트 워드를 추가로 차지합니다.

  • 팝된 각 VFP 배정밀도 레지스터가 스택에서 8바이트 외에도 각 목록을 위한 4바이트 워드를 추가로 차지합니다.

FRAME ADDRESSFRAME SAVE를 참조하십시오.

예제

p   PROC ; Canonical frame address is sp + 0
    EXPORT  p
    PUSH    {r4-r6,lr}
         ; sp has moved relative to the canonical frame address,
         ; and registers r4, r5, r6 and lr are now on the stack
    FRAME PUSH {r4-r6,lr}
         ; Equivalent to:
         ; FRAME ADDRESS    sp,16       ; 16 bytes in {r4-r6,lr}
         ; FRAME SAVE    {r4-r6,lr},-16
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential