fox32rom: Add memory compare routines
This commit is contained in:
parent
6dde85a921
commit
dddfd8b706
58
memory.asm
58
memory.asm
|
@ -1,4 +1,4 @@
|
||||||
; memory copy routines
|
; memory copy/compare routines
|
||||||
|
|
||||||
; copy specified number of bytes from source pointer to destination pointer
|
; copy specified number of bytes from source pointer to destination pointer
|
||||||
; if the source and destination overlap, the behavior is undefined
|
; if the source and destination overlap, the behavior is undefined
|
||||||
|
@ -49,3 +49,59 @@ copy_memory_words_loop:
|
||||||
pop r1
|
pop r1
|
||||||
pop r0
|
pop r0
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
; compare specified number of bytes from source pointer with destination pointer
|
||||||
|
; inputs:
|
||||||
|
; r0: pointer to source
|
||||||
|
; r1: pointer to destinaton
|
||||||
|
; r2: number of bytes to compare
|
||||||
|
; outputs:
|
||||||
|
; Z flag
|
||||||
|
compare_memory_bytes:
|
||||||
|
push r0
|
||||||
|
push r1
|
||||||
|
push r31
|
||||||
|
|
||||||
|
mov r31, r2
|
||||||
|
compare_memory_bytes_loop:
|
||||||
|
cmp.8 [r1], [r0]
|
||||||
|
ifnz jmp compare_memory_bytes_not_equal
|
||||||
|
inc r0
|
||||||
|
inc r1
|
||||||
|
loop compare_memory_bytes_loop
|
||||||
|
; set Z flag if we reach thie point
|
||||||
|
mov r0, 0
|
||||||
|
cmp r0, 0
|
||||||
|
compare_memory_bytes_not_equal:
|
||||||
|
pop r31
|
||||||
|
pop r1
|
||||||
|
pop r0
|
||||||
|
ret
|
||||||
|
|
||||||
|
; compare specified number of words from source pointer with destination pointer
|
||||||
|
; inputs:
|
||||||
|
; r0: pointer to source
|
||||||
|
; r1: pointer to destinaton
|
||||||
|
; r2: number of words to compare
|
||||||
|
; outputs:
|
||||||
|
; Z flag
|
||||||
|
compare_memory_words:
|
||||||
|
push r0
|
||||||
|
push r1
|
||||||
|
push r31
|
||||||
|
|
||||||
|
mov r31, r2
|
||||||
|
compare_memory_words_loop:
|
||||||
|
cmp [r1], [r0]
|
||||||
|
ifnz jmp compare_memory_words_not_equal
|
||||||
|
add r0, 4
|
||||||
|
add r1, 4
|
||||||
|
loop compare_memory_words_loop
|
||||||
|
; set Z flag if we reach thie point
|
||||||
|
mov r0, 0
|
||||||
|
cmp r0, 0
|
||||||
|
compare_memory_words_not_equal:
|
||||||
|
pop r31
|
||||||
|
pop r1
|
||||||
|
pop r0
|
||||||
|
ret
|
||||||
|
|
Loading…
Reference in New Issue
Block a user