2.3.3. 서브루틴 호출

서브루틴을 호출하려면 분기 및 링크 명령어를 사용해야 합니다. 구문은 다음과 같습니다.

    BL  destination

여기서 destination은 일반적으로 서브루틴의 첫 번째 명령어 레이블입니다.

destination은 프로그램 상대 식일 수도 있습니다. 자세한 내용은 B, BL, BX, BLX 및 BXJ를 참조하십시오.

BL 명령어의 경우

서브루틴 코드가 실행되고 나면 BX lr 명령어를 사용하여 복귀할 수 있습니다. 일반적으로 레지스터 r0 ~ r3은 매개변수를 서브루틴에 전달하는 데 사용되고 r0은 결과를 호출자에게 다시 전달하는 데 사용됩니다.

Note

개별적으로 어셈블되었거나 컴파일된 모듈 간의 호출은 프로시저 호출 표준에서 정의된 제한과 규칙을 준수해야 합니다. 자세한 내용은 install_directory\Documentation\Specifications\...에 있는 Procedure Call Standard for the ARM Architecture 사양 (aapcs.pdf) 을 참조하십시오.

Example 2.2에서는 두 매개변수 값을 더하고 결과를 r0에 반환하는 서브루틴을 보여 줍니다. 이 예제는 주 예제 디렉토리인 install_directory\RVDS\Examplessubrout.s로 제공되어 있습니다. 이 예제를 어셈블, 링크 및 실행하는 방법에 대한 자세한 내용은 코드 예제를 참조하십시오.

Example 2.2. 

        AREA    subrout, CODE, READONLY     ; Name this block of code
        ENTRY                     ; Mark first instruction to execute
start   MOV     r0, #10           ; Set up parameters
        MOV     r1, #3
        BL      doadd             ; Call subroutine
stop    MOV     r0, #0x18         ; angel_SWIreason_ReportException
        LDR     r1, =0x20026      ; ADP_Stopped_ApplicationExit
        SVC     #0x123456         ; ARM semihosting (formerly SWI) 
doadd   ADD     r0, r0, r1        ; Subroutine code
        BX      lr                ; Return from subroutine
        END                       ; Mark end of file

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