Code Examples from Class: Difference between revisions
Jump to navigation
Jump to search
(Created page with "* Copy to RAM AREA Exaddress, CODE, READONLY EXPORT Reset_Handler Reset_Handler LDR R9, =list mov R7, #4 ; number in list ldr r6, =datastart loop ldr …") |
No edit summary |
||
Line 22: | Line 22: | ||
AREA Thedata, DATA, NOINIT, READWRITE |
AREA Thedata, DATA, NOINIT, READWRITE |
||
datastart SPACE 20 |
datastart SPACE 20 |
||
END |
|||
* Subroutine Example1 |
|||
; First Subroutine Example |
|||
; This program demonstrates using a subroutine, |
|||
; saving registers on the stack, etc. |
|||
; Rob Frohne, 1/3/2013 |
|||
stack_start EQU 0x40001000 |
|||
AREA Subroutine_Example, CODE |
|||
ENTRY |
|||
Start |
|||
ldr sp, =stack_start ; Tell where we will place the stack. |
|||
; (It goes down (lower addresses from here.) |
|||
mov r1, #1 ; Store some numebers in some registers |
|||
mov r2, #2 |
|||
mov r3, #3 |
|||
bl subroutine |
|||
stop b stop |
|||
; This subroutine saves the registers, |
|||
; messes up the registers locally, |
|||
; then restores the registers and returns. |
|||
subroutine |
|||
stmfd sp!, {r1-r2,lr} ; save used registers and the link register (r14) |
|||
mov r1,#0xffffffff ; mess up the registers |
|||
mov r2, r1 |
|||
ldmfd sp!, {r1,r2,pc} ; pop the stack and return |
|||
END |
END |
Revision as of 13:34, 5 November 2013
- Copy to RAM
AREA Exaddress, CODE, READONLY EXPORT Reset_Handler Reset_Handler LDR R9, =list mov R7, #4 ; number in list ldr r6, =datastart loop ldr r8,[r9],#4 str r8,[r6],#4 subs r7,r7,#1 bne loop stop b stop ALIGN list DCW 0x1111, 0x2222, 0x3333, 0x4444, 0x5555 ALIGN string DCB "This is a test.",0 string2 DCB 'T','h','i' ALIGN AREA Thedata, DATA, NOINIT, READWRITE datastart SPACE 20 END
- Subroutine Example1
; First Subroutine Example ; This program demonstrates using a subroutine, ; saving registers on the stack, etc. ; Rob Frohne, 1/3/2013 stack_start EQU 0x40001000 AREA Subroutine_Example, CODE ENTRY Start ldr sp, =stack_start ; Tell where we will place the stack. ; (It goes down (lower addresses from here.)
mov r1, #1 ; Store some numebers in some registers mov r2, #2 mov r3, #3
bl subroutine stop b stop ; This subroutine saves the registers, ; messes up the registers locally, ; then restores the registers and returns. subroutine stmfd sp!, {r1-r2,lr} ; save used registers and the link register (r14) mov r1,#0xffffffff ; mess up the registers mov r2, r1 ldmfd sp!, {r1,r2,pc} ; pop the stack and return END