Blog. Just Blog

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

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: 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. Примеры использования смотрите в прилагаемом исходнике, там ничего сложного.

В приложении пример программы с исходным текстом, которая использует приведенную в статье функцию для формирования строки по правилам русского языка.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

num2word.Demo.zip (1,982 bytes)


Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 224 | Комментариев: 0

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2020
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0037 сек.) / Память: 4.75 Mb
Наверх