;; David Vajda
;; 05/10/25
;; Hash Tabelle Funktionen - assembler i586 hash
global _start
section .data
X: db 0, 2, 8, 7, 1, 6, 4, 1, 7, 6, 6, 5, 3, 3, 9, 1, 0, 7, 3, 2
Xdcb: db 0, 2, 8, 7, 1, 6, 4, 1, 7, 6, 6, 5, 3, 3, 9, 1, 0, 7, 3, 2, 10, 13
ch2: db 0, 0, 10, 13
section .text
_start:
call Digit2DCBStr
mov rcx, Xdcb
mov rdx, 22
mov eax, 0x04
mov ebx, 0x01
int 0x80
call hash
call ch2f
mov rcx, ch2
mov rdx, 4
mov eax, 0x04
mov ebx, 0x01
int 0x80
mov eax, 0x01
mov ebx, 0x00
int 0x80
convert2DCB:
add rax, '0'
ret
Digit2DCBStr:
mov rsi, X
mov rdi, Xdcb
mov rcx, 20
Digit2DCBStrLoop:
mov al, [rsi]
add al, '0'
mov [rdi], al
inc rdi
inc rsi
dec rcx
cmp rcx, 0x00
jnz Digit2DCBStrLoop
ret
hash:
mov rdx, 0
mov rsi, X
mov rcx, 10
hashloop:
mov al, [rsi]
and al, 0x000000ff
mov rbx, 10
push rdx
mov rdx, 0
mul rbx
pop rdx
inc rsi
mov bl, [rsi]
and bl, 0x000000ff
add rax, rbx
inc rsi
mov rbx, 100
push rdx
mov rdx, 0
mul rbx
pop rdx
add rax, rdx
mov rdx, 0
mov rbx, 97
div rbx
dec rcx
cmp rcx, 0x00
jnz hashloop
ret
adler32:
;; s1: rax
;; s2: rbx
mov rax, 0x01
mov rbx, 0x00
mov rsi, X
mov rcx, 10
adler32loop:
mov dl, [rsi]
inc rsi
mov dh, [rsi]
inc rsi
mov bh, 10
mul dl, bh
add dl, dh
add rax, dl
;...
dec rcx
jnz adler32loop
ret
ch2f:
mov rax, rdx
mov rdx, 0x00
mov rbx, 10
div rbx
add dl, '0'
add al, '0'
mov [ch2+0x01], dl
mov [ch2+0x00], al
ret