Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  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:
  95.