100825/tex/asm100425hashallchecksum.asm

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 rbx, [rsi]
    ;mov rax, rbx
    mov rax, [rsi]
    mov rbx, 10
    push rdx
    mov rdx, 0
    mul rbx
    pop rdx
    ;mov rbx, rax
    inc rsi
    ;mov rax, [rsi]
    mov rbx, [rsi]
    add rax, rbx
    inc rsi
;hash
    ;mov rax, rbx
    mov rbx, 100
    push rdx
    mov rdx, 0
    mul rbx
    pop rdx
    ;add rdx, rax
    ;mov rax, rdx
    add rax, rdx
    mov rdx, 0
    mov rbx, 97
    ;push rdx
    div rbx
    ;pop rdx
    dec rcx
    cmp rcx, 0x00
    jnz hashloop
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