Стандартная библиотека для ассемблера

Тема в разделе "WASM.PROJECTS", создана пользователем dmit10, 23 ноя 2004.

  1. Mescalito

    Mescalito New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2005
    Сообщения:
    78
    Адрес:
    Харьков
    Думаю никто не будет отрицать тот факт, что новичков отталкивает от асма прежде всего проблема написания того же Хело миру. Нет никакой проблемы на ЯВУ написать за пару минут прогу, которая говорит "введите два числа", а потом выводит их сумму. На асме - даже это проблема, если с нуля. Я, например, решил написать программу-каталог своих сидюков, упёрся в разработку БД, далее упёрся в написание менеджера памяти и т. п. Короче, кончилось тем, что я забил и занялся другим. Думаю не у меня одного так вышло.
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257




    Видимо, не очень-то и нужно было :)







    Отталкивает неистребимое желание халявы: ткнул кнопку в тулбаре - получил готовую программу.
     
  3. Mescalito

    Mescalito New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2005
    Сообщения:
    78
    Адрес:
    Харьков
    Ничего подобного. Знаю людей, которым действительно интересно, но боятся лезть.
     
  4. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Я уже полгода пишу файловый менеджер. Пишу полгода не потому, что тяжело/много/неудобно как говорят явушники, а потому что сессия/дела/учеба.

    Да, по началу тяжко во все это въехать. Но только тем, кто начал с какого-нить паскаля. Их мозг уже извращен явушными принципами и асм им непонятен, т.к. у него в корне другие принципы.



    А что до "боятся лезть", так это в психологии дело. Если они хотят сделать законченый продукт, а процесс их интересует мало, то да, их язык - ВБА. Лично меня в кодинге на асме привлекает непосредственно сам процесс, а допишу я свой ФМ или нет - это меня не тревожит ни капли. В любом случае я только выигрываю - получаю опыт и еще и удовольствие.
     
  5. bobb2003

    bobb2003 New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1
    Помнится здесь было что-то насчет компонентной модели для asm. Выкладываю некоторые свои наработки (не судите строго). Попытался сделать что-то в стиле MFC.

    [​IMG] 199219527__fasm_pr.zip
     
  6. amdtm

    amdtm Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    196
    Проходил мимо... только тезисы. Привожу для запуска

    механизма ассоциаций, не для обсуждения или критики.

    Магия. Прикладное программирование на ассемблере...





    1)Ассемблер укрепляет память, тренирует внимание,

    улучшает механизмы видения-фильтрации, развивает функциональное мышление- способность видеть взаимосвязи частей кода.

    Прогр-е на ассемблере требует от программирующего способности поднять себя над "зданием кода" и "загнать себя в код одной процедуры".

    Программист на ассемблере работает с дхармами прогаммирования.



    2)Любая стандартизация ведет к усреднидизации...

    падает производительность кода, но повышается ПРОИЗВОДИТЕЛЬНОСТЬ труда программиста.

    Формируется типовая схема ИСПОЛЬЗОВАНИЯ И НАПИСАНИЕ новых процедур, библиотек, компонент - формируется СИСТЕМА ПРОГРАММИРОВАНИЯ.

    Эффективный код трудно читать и дорабатывать человеку.





    3)Ассемблеров много - нужны коды процедур на каждом диалекте. Только нах.?

    Абсурд. Писатель пишет книгу одновременно на нескольких языках - глава за главой.



    4)Система программировиния. В ней легко работать, но трудно потом выйти. Старая гвардия времен ДОСа в большинстве отсеялась при переходе на WINDOWS.



    5)Индустрия программирования. Конкуренция. Чем сложнее и непонятнее, тем больше платят. Формирование уважения к труду программиста. Большие программы. Большие коробки - видимость труда программиста для непрограммистов.



    6)Все числа состоят из 10 цифр. Таблица умножения, затем таблица квадратов заучивается на всю жизнь.

    Нужно попытаться написать однородную по структуре "Таблицу умножения". Контекст - эволюция микроэлектроники.



    ...



    В основе философии развития Прогр-я - ДЕРЕВО.

    Поэтому в конце - огромный баобаб с мертвой сердцевиной.



    ...

    Все люди делятся на практиков(прагматиков) и теоретиков.

    Теоретикам непонятно то, что говорят практики и наоборот.

    Единицам хватает терпения на постижение сути. Отсюда море толдундов.

    ...

    Я не самый умный.
     
  7. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    асм как секс - процесс интересней результата.
     
  8. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Если нужно реализовать MD5 на ассемблере, кто полезет в мануал и примется переводить его на ассемблер? Думаю, все пойдут качать или искать скачанный. Если нужен quicksort, зачем его писать самому с учетом того, что уже писал его многократно на десятке HLL, а с первого раза на ассемблере все равно не получится достаточно хорошо - нужна длительная оптимизация? Кроме того, ассемблер - не HLL, перевести с одного диалекта на другой проще, чем с Паскаля на PHP или с Java на Basic - вполне можно написать переводчик. И в идее создания большой библиотеки хорошо оптимизированных стандартных алгоритмов, которые избавят от необходимости их поиска или изобретения глючного и медленного велосипеда, не вижу ничего плохого.
     
  9. Tim Sobolev

    Tim Sobolev New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2005
    Сообщения:
    53
    n0p



    я тоже начинал с паскаля, тем не менее успешно и плавно перешел на С и Асм , так сто не факт :derisive:

    На асме действительно иногда ОЧЕНЬ ИНТЕРЕСНО реализовать определенные алгоритмы

    Вот например возведение в степень (довольно корявое, доводить времени ща не было --- сессия :derisive: ):
    Код (Text):
    1.  
    2. Power   proc            ;[IN] SI - base; BX - power [OUT] BX:AX - number
    3.     cmp si,0
    4.     je  @@null
    5. ;
    6.     mov cx,15
    7. @@0:
    8.     shl bx,1
    9.     jc  @@1
    10.     loop    @@0
    11. @@1:
    12.     mov ax,si  ;x=a
    13. @@2:
    14.     mul ax     ;x=x*x
    15.     shl bx,1   ;ki == 1 ?
    16.     jnc @@3    ;no -> jump
    17.     mul si     ;x=a*x
    18. @@3:
    19.     loop    @@2
    20. ;
    21. @@exit:
    22.     mov bx,dx
    23.       retn
    24. @@null:
    25.     xor ax,ax
    26.     xor bx,bx
    27.       retn
    28. Power   endp
    29.  
     
  10. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Sharp

    Не согласен. В универе меня два года обучали писать вектора, кусорты, деревья и прочие алгоритмы. Да, они все уже написаны и не по одному миллиону раз. А я тратил на их изучение время, преподаватели заставляли рассказывать эти алгоритмы на экзамене по глючному псевдокоду. Зачем?



    А я скажу зачем. Затем, что для успешного развития программиста ему нужны не только знания, но и отточеная логика. Причем, логика должна соответствовать выбранному языку. Что даст лучший результат в плане понимания принципов алгоритмизации, как не реализация стандартных алгоритмов?



    Tim Sobolev

    На самом деле, я тоже начинал с паскаля, а продолжал сями. :) Просто помню, насколько было сложно вьехать в специфику асма после ЯВУ.



    Вот мой вариант возведения в степень:
    Код (Text):
    1. pow :       ; val, deg
    2.     push    ebx
    3.     mov     eax,dword [esp+08h]
    4.     mov     ebx,eax
    5.     mov     ecx,dword [esp+0Ch]
    6.     dec     ecx
    7.     jz      $+8
    8.     xor     edx,edx
    9.     mul     ebx
    10.     loop    $-2    pop     ebx
    11.     ret     8
     
  11. Tim Sobolev

    Tim Sobolev New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2005
    Сообщения:
    53
    n0p

    угу, ты количество итераций считал? в среднем случае? :derisive:

    вот еще один вариант (тоже не оптимальный, так как требовалось строгое соответсвие алгоритму)
    Код (Text):
    1.  
    2. Calc    proc dBase:DWORD, dPower:DWORD
    3.         mov eax,dBase       ;x=a
    4.         .if dPower==0
    5.                 mov eax,1
    6.     .elseif eax != 0
    7.         mov ecx,31
    8.         mov ebx,dPower
    9.     @@0:
    10.         shl ebx,1
    11.         jc  @@1
    12.         loop    @@0
    13.     @@1:       
    14.         .if ecx!=0          ;r == 0?
    15.         @@2:
    16.             mul eax ;x=x*x
    17.             cmp edx,0   ;overflow?
    18.             jne @@err          
    19.             shl ebx,1   ;ki == 1?
    20.             jnc @@3     ;no -> jump
    21.             mul dBase   ;x=a*x
    22.             cmp edx,0   ;overflow?
    23.             jne @@err          
    24.         @@3:   
    25.             loop    @@1
    26.         .endif
    27.     .endif
    28.     ret
    29. @@err:
    30.     mov eax,-1
    31.     ret
    32. Calc    endp
    33.  
     
  12. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Что даст лучший результат в плане понимания принципов алгоритмизации, как не реализация стандартных алгоритмов?

    Реализовывать для понимания - одно, а использовать в программах - другое.
     
  13. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    А Вы задумывались над тем, что будет при использовании быстрой сортировки на массив из 200 мб ячеек? Стек то может переполнится (вызовы рекурсивные). Поэтому при реализации чего-то дельного придётся извращаться и использовать асинхронные вызовы, искать более оптимальные по памяти, а не по скорости алгоритмы. Перекладывать математику в программирование с помощью программных библиотек сложно.Нужны умные книжки. Где также будет написано, как это изменить, чтобы работало в критических условиях (нехватка памяти, процессорного времени и т.д.) Чистая математика годится только для RealTime OS.
     
  14. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    NullSessi0n

    Я не просто задумывался, я это делал. Да, рекурсивная версия кусорта имеет неплохие шансы улететь за границы стека, поэтому кусорт быстренько переписывается в свою итеративную версию и проблемы исчезают сами собой.



    Sharp

    В каждой программе алгоритм требуется узко специализированный. Вряд ли можно сколько-нибудь часто встречаться с задачами, где необходим именно универсальный алгоритм. Поэтому на скорую руку, конечно, вставляется обычно первый попавшийся код, но когда придет время, этот код должен быть заменен на более подходящий в данном случае. А как предлагается его оптимизировать без понимания принципов работы заложенного в этом коде алгоритма?
     
  15. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    2 nop

    У меня итеративную версию написать не получалось, мозги тугие. Не можешь дать исходник? Буду очень благодарен.
     
  16. SDragon

    SDragon New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2005
    Сообщения:
    133
    Адрес:
    Siberia


    В случаях с очень большими массивами обычно используют не быструю сортировку, а другие методы. Например, сортировку слиянием: допустим, размер файла в 5 раз превышает объем доступной памяти - тогда разбиваем файл на пять кусков, сортируем каждый из них по отдельности, а затем сливаем результат в один файл. Так часто делали в те бородатые времена, когда компьютеры были большими :), а память исчислялась килобайтами.
     
  17. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    > А Вы задумывались над тем, что будет при использовании быстрой сортировки на массив из 200 мб ячеек? Стек то может переполнится (вызовы рекурсивные).



    Вход в рекурсию делит диапазон пополам, так что максимальная глубина рекурсии это log2(размер) + 1

    Так что за срыв стэка можешь не беспокоиться :)
     
  18. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    SDragon

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

    Знаю, только некоторые программисты об этом могут и не знать.
     
  19. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    жаль, что тема умерла. masm32.lib использую, дополняю своей. ящика так и не заметил.
     
  20. Miller Rabin

    Miller Rabin New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2006
    Сообщения:
    185
    У меня есть библиотека для фасм, за то время, которое я программирую на фасме она стала включать в себя все пункты, которые были приведены в посте этой темы. Она ориентирована на ООП а счет макросов и позволяет действительно быстро сваять код. Например код пишущий строку в файл в отдельном потоке будет выглядеть так

    Код (Text):
    1. .data
    2.  TStringTable  'filename.txt'        ;Объявляем таблицу строк
    3.  TProcess Process                    ;объявляем переменную объекта TProcess Process для доступа к его методам
    4.   TString str                            ;Объявляем переменную объекта строка
    5.   str.Store 'Привет'                   ;сохраняем переменную str с фиксированным числом символов
    6.   TThread Thread                     ;Создаем объект потока
    7.   Thread.store OnThreadExec     ;Сохраняем объект в памяти приложения с параметром процедуры потока
    8.   TFile fl                                 ;объявляем объект файла
    9.   fl.Store                                ;Сохраняем объект
    10. .code
    11.   Thread.Create                       ;запускаем поток на выполнение
    12.   Thread.Wait                          ;ждем пока он не завершится
    13.   Process.Exit 0                       ;завершаем процесс
    14. .end  
    15.  
    16. proc OnThreadExec Parameter
    17. TThread .Thread                     ;Объекты можно не только сохранять в памяти но и объявлять относительно регистров
    18. .Thread.As ecx                       ;как локальные переменные
    19. mov ecx, [Parameter]
    20. fl.Create FileName                   ;создаем файл
    21. fl.Write str, str.Size                 ;пишем в файл строку
    22. fl.Close                                  ;закрываем файл
    23. ret
    24. endp
    Красивый код получается правда.
    И однажды я подумал: "Ведь было бы неплохо написать по этой библиотеке документацию и выложить ее в сеть для всех". Только вот кому это надо??? Тем кто так же как и я любит ассемблер? У них свои стандарты. Новичкам, изучающим ассемблер? Им вообще противопоказано. Видимо это нужно только мне чтобы быстро и эффективно писать свой код.
    А вообще хочешь стандартов и возможности более эффективно использовать чужой код нефиг писать на ассемблере нужно писать на С на то он и стандарт.

    P.S: Я и сам групповые проекты веду только на С. Единственное что меня сдерживало это гуан, который получался на выходе Borland C++ или visual C++. Но и эта проблема отпала после того как я перешел на Vector C86 Compiler.

    А тема умерла как и должна была умереть ибо бесперспективна.