Code Examples from Class: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 6: | Line 6: | ||
mov R7, #4 ; number in list | mov R7, #4 ; number in list | ||
ldr r6, =datastart | ldr r6, =datastart | ||
loop | loop | ||
ldr r8,[r9],#4 | ldr r8,[r9],#4 | ||
| Line 12: | Line 12: | ||
subs r7,r7,#1 | subs r7,r7,#1 | ||
bne loop | bne loop | ||
stop b stop | stop b stop | ||
ALIGN | ALIGN | ||
| Line 22: | Line 22: | ||
AREA Thedata, DATA, NOINIT, READWRITE | AREA Thedata, DATA, NOINIT, READWRITE | ||
datastart SPACE 20 | datastart SPACE 20 | ||
END | END | ||
* Subroutine Example1 | |||
; First Subroutine Example | ; First Subroutine Example | ||
; This program demonstrates using a subroutine, | ; This program demonstrates using a subroutine, | ||
Revision as of 14:35, 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