100825/tex/asm100525hashallchecksum.asm

;; 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