fox32rom: Add memory compare routines
This commit is contained in:
parent
6dde85a921
commit
dddfd8b706
60
memory.asm
60
memory.asm
|
@ -1,4 +1,4 @@
|
|||
; memory copy routines
|
||||
; memory copy/compare routines
|
||||
|
||||
; copy specified number of bytes from source pointer to destination pointer
|
||||
; if the source and destination overlap, the behavior is undefined
|
||||
|
@ -48,4 +48,60 @@ copy_memory_words_loop:
|
|||
pop r31
|
||||
pop r1
|
||||
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