Presentation is loading. Please wait.

Presentation is loading. Please wait.

Embedded Systems Programming Stack usage in HLLs.

Similar presentations


Presentation on theme: "Embedded Systems Programming Stack usage in HLLs."— Presentation transcript:

1 Embedded Systems Programming Stack usage in HLLs

2 Why? #1 Why do high level language programmers need to know the low level details of storage and function calls? –To write more efficient code –To write assembler routines that are called from a HLL –To call assembler routine from a HLL –Improves knowledge of both tools and CPU

3 Why? #2 Why use assembler in place of HLL? –Speed up code –Smaller code –Special instructions –Boot strap routines –Optimise HLL code

4 The run-time stack In order to see how HLLs are implemented we need to know about the run-time stack and the registers that control it. The stack is used for –Storing important values that may get changed during execution –Local variables –Passing some function parameters

5 Function set-up In C function set up consists of –Creating an executable label –Saving the stack pointer into ip –Storing registers used onto the stack Using stmfd store multiple registers instructions –Putting the frame pointer at the stack base gcc2_compiled.:.text.align2.globalmain.type main,function main: @ args = 0, pretend = 0, frame = 8 @ frame_needed = 1 movip, sp stmfdsp!, {fp, ip, lr, pc} subfp, ip, #4

6 Function set-up Stack IP Intra-Procedure FP Frame Pointer FP IP LR PC SP Stack Pointer Registers High memory Low memory

7 Local variables The stack is used for local variable storage The compiler creates a stack frame to store the variables The variables are accessed by an offset from the frame pointer fp This means –variable names can be repeated –functions can be recursively called

8 Create the Stack frame movip, sp stmfdsp!, {fp, ip, lr, pc} subfp, ip, #4 subsp, sp, #8 movr3, #10 strr3, [fp, #-16] movr3, #20 strr3, [fp, #-20] main() { int i, j; i = 10; j = 20; } Initialise Variable i } Initialise Variable j Creating a stack frame

9 A stack frame IP Intra-Procedure FP Frame Pointer FP IP LR PC SP Stack Pointer Registers High memory Low memory FP - 16 FP - 20 i j 10 20

10 Leaving a function call The code to leave a function call is simple –ldmea Load multiple registers command is used from the stack –The old frame & stack pointers & program counter –are restored This does a return with a cleaned stack. L2: ldmeafp, {fp, sp, pc}.Lfe1:.size main,.Lfe1-main

11 @ Generated by gcc 2.95.3 20010315 (release) for ARM/elf.file"ex1.c" @ GNU C version 2.95.3 20010315 (release) (arm-linux) compiled by GNU C version 2.95.2 20000220 (Debian GNU/Linux). @ options passed: -fverbose-asm @ options enabled: -fpeephole -ffunction-cse -fkeep-static-consts @ -freg-struct-return -fsjlj-exceptions -fcommon -fverbose-asm -fgnu-linker @ -fargument-alias -fident -mapcs-32 -mshort-load-bytes -mno-short-load-words gcc2_compiled.:.text.align2.globalmain.type main,function main: @ args = 0, pretend = 0, frame = 8 @ frame_needed = 1, current_function_anonymous_args = 0 movip, sp stmfdsp!, {fp, ip, lr, pc} subfp, ip, #4 subsp, sp, #8 movr3, #10 strr3, [fp, #-16] movr3, #20 strr3, [fp, #-20] movr0, #1 movr1, #2 movr2, #3 movr3, #4 bldo_it.L2: ldmeafp, {fp, sp, pc}.Lfe1:.size main,.Lfe1-main


Download ppt "Embedded Systems Programming Stack usage in HLLs."

Similar presentations


Ads by Google