calculator/mem.s

27 lines
510 B
ArmAsm

.global memcpy
.text
# memcpy, copy n bytes of memory from src to dest
# arguments:
# a0: dest address
# a1: source address
# a2: number of bytes to copy
# temporaries used:
# t0, t1
# return:
# a0: address of dest + n
# a1: address of src + n
#
memcpy:
li t0, 0
memcpy_loop:
# TODO: copy in chunks of 4 bytes if n > 4
beq t0, a2, memcpy_done
lbu t1, 0(a1)
sb t1, 0(a0)
addi a0, a0, 1
addi a1, a1, 1
addi t0, t0, 1
j memcpy_loop
memcpy_done:
ret