2.3.3. Calling subroutines

To call subroutines, use a branch and link instruction. The syntax is:

        BL  destination

where destination is usually the label on the first instruction of the subroutine.

destination can also be a program-relative or register-relative expression. Refer to B and BL for more information.

The BL instruction:

After the subroutine code is executed you can use a MOV pc,lr instruction to return. By convention, registers r0 to r3 are used to pass parameters to subroutines, and to pass results back to the callers.

Note

Calls between separately assembled or compiled modules must comply with the restrictions and conventions defined by the procedure call standard. Refer to the ARM-Thumb Procedure Call Standard specification for more information.

Example 2.2 shows a subroutine that adds the values of its two parameters and returns a result in r0. Refer to Code examples for instructions on how to assemble, link, and execute the example.

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             	; Next instruction to execute after return
		;...
doadd   ADD     r0, r0, r1        ; Subroutine code
        MOV     pc, lr            ; Return from subroutine
        END                       ; Mark end of file
Copyright © 2001, 2002 ARM Limited. All rights reserved.ARM DUI 0170B
Non-Confidential