/* -------------------------------------------------- Show what is created by the prelude A( ): has 2 int parameters and 3 int local vars B( ): has 3 int parameters and 2 int local vars -------------------------------------------------- */ .global main, Stop, CodeEnd, DataStart, DataEnd .global A, B /* -------------------------------------------------- Begin of the program instructions -------------------------------------------------- */ .text main: mov r0, #222 // Pass 222 as parameter 2 on stack push {r0} mov r0, #111 // Pass 111 as parameter 1 on stack push {r0} bl A // Use step-in to call function A nop nop /* ============================================== Function A: param and locals in stack ============================================== */ A: /* **************************************** Prelude: build stack frame **************************************** */ push {lr} // Save return address in LR push {fp} // Save Frame Pointer in FP mov fp, sp // Initialize my own FP sub sp, sp, #12 // I create 3 local variable in stack /* BODY of function A */ nop // These instructions in A( ) can use stack nop // to access parameters and local variables mov r0, #555 // Pass 555 as parameter 3 on stack push {r0} mov r0, #444 // Pass 444 as parameter 2 on stack push {r0} mov r0, #333 // Pass 333 as parameter 1 on stack push {r0} bl B // Use step-in to call function B nop /* ============================================== Function B: param and locals in stack ============================================== */ B: /* **************************************** Prelude: build stack frame **************************************** */ push {lr} // Save return address in LR push {fp} // Save Frame Pointer in FP mov fp, sp // Initialize my own FP sub sp, sp, #8 // I create 2 local variable in stack /* BODY of function B */ nop // These instructions in f( ) can use stack nop // to access parameters and local variables nop // STOP HERE CodeEnd: Stop: nop /* -------------------------------------------------- Begin of the permanent program variables -------------------------------------------------- */ .data DataStart: DataEnd: .end