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
|
.set noreorder
.section .text
# Arguments
# a0 - destination address
# a1 - source address
# a2 - bytes to move
.global memmove
.type memmove, @function
memmove:
move $v0, $a0
sltu $v1, $a0, $a1
blez $v1, .Linit_backward
.Lloop_forward:
blez $a2, .Lexit
addi $a2, -1
lbu $v1, 0($a1)
addiu $a1, 1
sb $v1, 0($a0)
addiu $a0, 1
b .Lloop_forward
nop
.Linit_backward:
addu $a0, $a2
addu $a1, $a2
addiu $a0, -1
addiu $a1, -1
b .Lloop_backward
nop
.Lloop_backward:
blez $a2, .Lexit
addi $a2, -1
lbu $v1, 0($a1)
addiu $a1, -1
sb $v1, 0($a0)
addiu $a0, -1
b .Lloop_backward
nop
.Lexit:
jr $ra
nop
|