add hash
This commit is contained in:
@@ -1445,6 +1445,42 @@ elemb:
|
|||||||
mov rax, 1 ; return 1; dl an element of list
|
mov rax, 1 ; return 1; dl an element of list
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
; djb2
|
||||||
|
;
|
||||||
|
; description:
|
||||||
|
; gets the djb2 hash of a given string
|
||||||
|
;
|
||||||
|
; parameters:
|
||||||
|
; rdi = size of string
|
||||||
|
; rsi -> start of string
|
||||||
|
;
|
||||||
|
; returned:
|
||||||
|
; rax = hash
|
||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
djb2:
|
||||||
|
xor ecx, ecx ; rcx = index
|
||||||
|
mov rax, 5381 ; rax = hash
|
||||||
|
|
||||||
|
.loop:
|
||||||
|
cmp rcx, rdi
|
||||||
|
jge .break
|
||||||
|
|
||||||
|
mov rdx, rax
|
||||||
|
shl rax, 5
|
||||||
|
add rax, rdx
|
||||||
|
|
||||||
|
xor edx, edx
|
||||||
|
mov dl, [rsi + rcx] ; dl = current byte
|
||||||
|
add rax, rdx
|
||||||
|
|
||||||
|
inc rcx
|
||||||
|
jmp .loop
|
||||||
|
|
||||||
|
.break:
|
||||||
|
ret
|
||||||
|
|
||||||
; ------------------------------------------------------------------------------
|
; ------------------------------------------------------------------------------
|
||||||
; trim_trailing_whitespace
|
; trim_trailing_whitespace
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ run_tests:
|
|||||||
mov rsi, .msg
|
mov rsi, .msg
|
||||||
call print.test
|
call print.test
|
||||||
|
|
||||||
|
call clear_test_arena
|
||||||
|
call test_djb2
|
||||||
|
|
||||||
call clear_test_arena
|
call clear_test_arena
|
||||||
call test_elemb
|
call test_elemb
|
||||||
|
|
||||||
@@ -109,6 +112,68 @@ test_elemb:
|
|||||||
.case1 db 0x54, 0x00, 0x21, 0x20, 0x34
|
.case1 db 0x54, 0x00, 0x21, 0x20, 0x34
|
||||||
.msg db "test_elemb...", 0x00
|
.msg db "test_elemb...", 0x00
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
; test_djb2
|
||||||
|
;
|
||||||
|
; description:
|
||||||
|
; tests djb2 described functionality
|
||||||
|
; ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
test_djb2:
|
||||||
|
mov rsi, .msg
|
||||||
|
call print.test
|
||||||
|
|
||||||
|
mov rsi, .case0
|
||||||
|
mov rdi, 0
|
||||||
|
call djb2
|
||||||
|
cmp rax, 5381
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
mov rsi, .case1
|
||||||
|
mov rdi, 1
|
||||||
|
call djb2
|
||||||
|
cmp rax, 177670
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
mov rsi, .case2
|
||||||
|
mov rdi, 2
|
||||||
|
call djb2
|
||||||
|
cmp rax, 5863208
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
; why am I testing this, of course it's without side effects xD
|
||||||
|
|
||||||
|
mov rsi, .case0
|
||||||
|
mov rdi, 0
|
||||||
|
call djb2
|
||||||
|
cmp rax, 5381
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
mov rsi, .case1
|
||||||
|
mov rdi, 1
|
||||||
|
call djb2
|
||||||
|
cmp rax, 177670
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
mov rsi, .case2
|
||||||
|
mov rdi, 2
|
||||||
|
call djb2
|
||||||
|
cmp rax, 5863208
|
||||||
|
jne .fail
|
||||||
|
|
||||||
|
.pass:
|
||||||
|
mov rsi, msg_pass
|
||||||
|
call print
|
||||||
|
ret
|
||||||
|
.fail:
|
||||||
|
mov rsi, msg_fail
|
||||||
|
call print
|
||||||
|
ret
|
||||||
|
.case0 db ""
|
||||||
|
.case1 db "a"
|
||||||
|
.case2 db "ab"
|
||||||
|
.msg db "test_djb2...", 0x00
|
||||||
|
|
||||||
; ------------------------------------------------------------------------------
|
; ------------------------------------------------------------------------------
|
||||||
; test_get_tte_type
|
; test_get_tte_type
|
||||||
;
|
;
|
||||||
|
|||||||
Reference in New Issue
Block a user