Blog. Just Blog

Assembler: сейчас на сайте 2 гостей и 3 новостей

27.10.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Немного отдохнем от ковыряния во внутренностях системы. Переписал на Ассемблере свою PHP-шную функцию для правильного склонения языковых конструкций вида "число + слово". Всю суть вопроса и теорию можете почитать в статье по ссылке. Сама функция получилась вот такой:
  1. ;-------------------------------------------------------
  2. ; Функция для получения индекса массива с вариантами
  3. ; склонений слова в зависимости от числового значения.
  4. ; Массив слов формируется по принципу "1-2-5", то есть 
  5. ; ("гость", "гостя", "гостей")
  6. ;-------------------------------------------------------
  7. ; На входе: 
  8. ;    dNum - число
  9. ; На выходе: 
  10. ;    EAX = [0..2] - индекс элемента массива
  11. ;-------------------------------------------------------
  12. proc num2word dNum:DWORD
  13.         push    ecx edx
  14.         mov     eax,[dNum]
  15.         cdq
  16.         mov     ecx,100
  17.         idiv    ecx
  18.         cmp     edx,19
  19.         jb      @f
  20.         mov     eax,edx
  21.         cdq
  22.         mov     ecx,10
  23.         idiv    ecx
  24. @@:
  25.         xor     eax,eax
  26.         or      edx,edx
  27.         jz      .case2
  28.         cmp     edx,1
  29.         jz      .case0
  30.         cmp     edx,4
  31.         jbe     .case1
  32. .case2:
  33.         inc     eax
  34. .case1:
  35.         inc     eax
  36. .case0:
  37.         pop     edx ecx
  38.         ret
  39. endp
Единственный параметр на входе - число, для которого надо получить индекс элемента массива. На выходе EAX - искомый индекс от 0 до 2. Примеры использования смотрите в прилагаемом исходнике, там ничего сложного.

Читать статью целиком »
Просмотров: 224 | Комментариев: 0

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2020
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 1 (0.0132 сек.) / Память: 5 Mb
Наверх