blob: 43d00ea6fb8ef9176a6b738ec99f192b778c72fa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
@label memset
; sets a specified number of words in memory to a specified value
; parameters: RA = offset (offset in memory to start at)
; RB = n (number of words to set)
; RC = val (value to set the words to)
; returns: void
stack_stash RD RE
ldi 0 RD ; RD := i (counter), initially 0
@label memset_loop
sub RB RD RE ; RE := n – i (unused value)
bri zero memset_done ; exit the loop
add RA RD RE ; RE := RA + i (address of the word to set)
str RC RE ; set the word at address RE to value in RC
inc RD ; i := i + 1
jpi memset_loop ; repeat the loop
@label memset_done
stack_restore RD RE
return
@label memcopy
; copies a specified number of words from one location in memory to another
; parameters: RA = src (source address)
; RB = dest (destination address)
; RC = n (number of words to copy)
; returns: void
stack_stash RD RE RF
ldi 0 RD ; RD := i (counter), initially 0
@label memcopy_loop
sub RC RD RE ; RE := n – i (unused value)
bri zero memcopy_done ; exit the loop
add RA RD RE ; RE := src + i (address of the word to copy)
ldr RE RE ; RE := the word at address RE
add RB RD RF ; RF := dest + i (address of the word to copy to)
str RE RF ; set the word at address RF to the word in RE
inc RD ; i := i + 1
jpi memcopy_loop ; repeat the loop
@label memcopy_done
stack_restore RD RE RF
return
|