/programs/other/luhna/luhna.asm |
---|
0,0 → 1,94 |
; LuhnA - Luhn algorithm |
; by Albom |
use32 |
org 0 |
db 'MENUET01' |
dd 1 |
dd _start |
dd _end |
dd _memory |
dd _stack |
dd _param |
dd 0 |
include '../../macros.inc' |
align 4 |
_start: |
mov al, [_param] |
test al, al |
jz exit |
call luhna |
xor edx, edx |
mov ecx, 10 |
div ecx |
test edx, edx |
jz valid |
mov ebx, msg_not |
jmp print |
valid: |
mov ebx, msg_valid |
print: |
mov [notifyapp+2*4], ebx |
mcall 70, notifyapp |
exit: |
mcall -1 |
align 4 |
luhna: |
xor edx, edx |
xor ecx, ecx |
xor eax, eax |
mov esi, _param |
@@: |
lodsb |
test al, al |
jz .exit |
sub al, '0' |
mov dl, [odd+eax] |
add ecx, edx |
lodsb |
test al, al |
jz .exit |
sub al, '0' |
add ecx, eax |
jmp @b |
.exit: |
mov eax, ecx |
ret |
align 4 |
msg_not db 'NOT ' |
msg_valid db 'VALID', 0 |
align 4 |
odd: db 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 |
align 4 |
notifyapp: |
dd 7 |
dd 0 |
dd 0 ; ¤à¥á á®®¡é¥¨ï |
dd 0 |
dd 0 |
db '@notify', 0 |
_end: |
align 4 |
rb 256 |
_stack: |
align 4 |
_param rb 256 |
_memory: |