Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2838 Albom 1
; LuhnA - Luhn algorithm
2
; by Albom
3
 
4
use32
5
 org 0
6
 db 'MENUET01'
7
 dd 1
8
 dd _start
9
 dd _end
10
 dd _memory
11
 dd _stack
12
 dd _param
13
 dd 0
14
 
15
include '../../macros.inc'
16
 
17
 
18
align 4
19
_start:
20
 
21
 mov al, [_param]
22
 test al, al
23
 jz exit
24
 
25
 call luhna
26
 xor edx, edx
27
 mov ecx, 10
28
 div ecx
29
 
30
 test edx, edx
31
 jz valid
32
 mov ebx, msg_not
33
 jmp print
34
valid:
35
 mov ebx, msg_valid
36
 
37
print:
38
 mov [notifyapp+2*4], ebx
39
 mcall 70, notifyapp
40
 
41
 
42
exit:
43
 mcall -1
44
 
45
 
46
 
47
 
48
align 4
49
luhna:
50
 xor edx, edx
51
 xor ecx, ecx
52
 xor eax, eax
53
 mov esi, _param
54
@@:
55
 lodsb
56
 test al, al
57
 jz .exit
58
 sub al, '0'
59
 mov dl, [odd+eax]
60
 add ecx, edx
61
 lodsb
62
 test al, al
63
 jz .exit
64
 sub al, '0'
65
 add ecx, eax
66
 jmp @b
67
.exit:
68
 mov eax, ecx
69
 ret
70
 
71
align 4
72
msg_not   db 'NOT '
73
msg_valid db 'VALID', 0
74
 
75
align 4
76
odd: db  0, 2, 4, 6, 8, 1, 3, 5, 7, 9
77
 
78
align 4
79
notifyapp:
80
	dd 7
81
	dd 0
82
	dd 0 ; адрес сообщения
83
	dd 0
84
	dd 0
85
	db '@notify', 0
86
 
87
 
88
_end:
89
align 4
90
 rb 256
91
_stack:
92
align 4
93
_param rb 256
94
_memory: