Вопросы по UASM

Тема в разделе "UASM", создана пользователем GRAFik, 26 дек 2022.

  1. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Если не в тягость, не мог бы кто-нибудь описать отличие UASM от MASM64'а и FASM'а? В чем его приемущество? Я думаю, что люди же неспроста его написали и стали поддерживать? Явно их что-то не устроило в тех же MASM64 и FASM.
     
    Последнее редактирование: 26 дек 2022
  2. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    562
    GRAFik, MASM, MASM64 нет поддержки других ОС вроде линукс, шелкода. У FASM альтернативный синтаксис, вроде intel, но что-то своё, надо привыкать, вот мне нравится mov eax, param; mov eax, offset param. И ещё, совсем другие макросы, так и не разобрался.
    Особенно нравится .if, .while, .for, .switch, можно вот так условия проверять: .if xmm0<xmm1, высокоуровнево, контролировать код легче, портировать на С/С++ на много легче. Надо дальше пойти, и внедрить макрос LET где сразу выражение задаёшь, и компилятор генерирует код.
    ЗЫ
    Но в UASM есть проблемы, это баги, их побольше чем в FASM, если много используешь высокоуровнего, начинают вылазить. Я для XRayExt до сих пор более старую версию использую, новые выдают ошибку.
    --- Сообщение объединено, 27 дек 2022 ---
    Зацените силу UASM
    Быстрая сортировка на UASM
    Код (ASM):
    1.  
    2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    3. ;;  Quick sort      v1.01
    4. ;;  http://rosettacode.org/wiki/Sorting_algorithms/
    5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    6. .386
    7. .model flat, stdcall
    8. option casemap:none
    9. include msvcrt.inc
    10. include macros.asm
    11.  
    12. .code
    13. align_proc
    14. quicksort proc uses esi edi ebx pBegin:ptr sdword, pEnd:ptr sdword
    15.     ASSUME  edi:ptr sdword, esi:ptr sdword
    16.     mov     edi, pBegin     ;указатель на первый элемент массива
    17.     mov     esi, pEnd       ;указатель на последний элемент массива
    18.     .if (edi!=esi)
    19.         ;pivot = pBegin[(pEnd - pBegin + 1)/2];//ecx
    20.         lea     edx, [esi+1*4]
    21.         .for (edx-=edi, edx>>=3, ecx=[edi+edx*4]: : edi+=4, esi-=4)
    22.             .for (: sdword ptr [edi] < ecx: edi+=4)
    23.             .endfor
    24.             .for (: sdword ptr [esi] > ecx: esi-=4)
    25.             .endfor
    26.             .break .if (edi >= esi)
    27.             swap    [edi], [esi]
    28.         .endfor
    29.         quicksort(pBegin, &[edi-1*4])
    30.         quicksort(edi, pEnd)
    31.     .endif
    32.     ASSUME  edi:nothing, esi:nothing
    33.     ret
    34. quicksort endp
    35.  
    36. createSpisok(spisok, sdword, 4, 65, 2, -31, 0, 99, 2, 83, 782, 1)
    37.  
    38. main proc C argc:sdword, argv:ptr ptr, envp:ptr
    39.     printf("Quick sort.\n")
    40.     .for (esi = spisok.pFirst: esi <= spisok.pLast: esi+=4)
    41.         printf("%d ", dword ptr [esi])
    42.     .endfor
    43.     printf("\n")
    44.     quicksort(spisok.pFirst, spisok.pLast)
    45.     .for (esi = spisok.pFirst: esi <= spisok.pLast: esi+=4)
    46.         printf("%d ", dword ptr [esi])
    47.     .endfor
    48.     printf("\n")
    49.     xor     eax, eax
    50.     ret
    51. main endp
    52.  
    53. main_startup3_END
    54.  
    Макрос createSpisok в macros.asm, ищете в теме UASM, хотя лучше массив с случайными числами задать для демо.
    --- Сообщение объединено, 27 дек 2022 ---
    А вот ещё пузырёк на UASM
    Код (ASM):
    1.  
    2. align_proc
    3. bubble_sort proc uses esi edi ebx array:ptr sdword, len:dword
    4.     mov     edi, array
    5.     .for (ebx=len, cl=true: cl: ebx--)
    6.         xor     cl, cl      ;swapped = false;
    7.         .for (esi = 1: esi < ebx: esi++)
    8.             mov     eax, [edi][esi*4 - 1*4]
    9.             mov     edx, [edi][esi*4]
    10.             .if (sdword ptr edx < eax)
    11.                 mov     [edi][esi*4], eax
    12.                 mov     [edi][esi*4 - 1*4], edx
    13.                 mov     cl, true
    14.             .endif
    15.         .endfor
    16.     .endfor
    17.     ret
    18. bubble_sort endp
    19.  
    Принимает указатель на массив и размер массива.
     
    GRAFik нравится это.
  3. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    По поводу шелкода, вы наверно имели в виду подключение\внедрение его в ассемблерный код UASM'а? Если можно, то немного пояснить и примерчик бы какой-нибудь. Так-то шелкод и в VS к C\C++ можно подключить - правда это чуть заморочено, но все же. Может действительно в UASM с этим проще.
    Да я-то не против, вы только немного поясните как мне побыстрее установить UASM и попробовать скомпилировать ваши примеры и примеры которые в дистрибутиве.

    UASM-2.56x64 я скачал, WinInc-2.10 скачал. Только вот думаю, куда распаковать архив с WinInc_2.10, чтобы удобней было компилировать? Может быть еще какие-нибудь библиотеки нужны? Я же с UASM никогда дела не имел. И если я правильно понял, то линкер нужно от VS подключать? Извиняюсь, если что, за дилетантские вопросы, но это исключительно для скорости вникания. :)
     
  4. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    562
    Шелкод просто код, сам по себе не работает, разве что .com файл для доса. Потом запихиваешь куда надо, в файл для ремонта, например, или если вирус, то это отдельная тема, и не ко мне. Создаётся ключом -bin
    У меня файлы так распределены.
    bin
    include
    lib
    My_projects
    Тут даже по названием понятно, в бин все исполняемые файлы включая линкер, link, polink. Линкер МС требует ещё mspdb50.dll, в общем все файлы нужные запихиваешь в эту папку, чтобы не искать и меньше возни с батниками. Ну а по остальным понятно, я например в либы на сколько помню из VS запихивал.
    Ну как то так.
     
  5. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Intro, что-то я не понял смысла написания 32-х битных версий сортировщиков на UASM'е. Я так понимаю, что смысл программирования Mikl___'ом сортировки с анимацией - это приобщение народа к 64-х битному ассемблеру. А вы, получается, в противовес, как бы - "назад в СССР". :) Mikl___, при желании тоже бы мог свои сортировшики на 32 битном MASM-е написать. Вы прям как Манхантер дубль два. :) Тот тоже еще ни одного проекта 64-х битного в своем блоге не опубликовал на FASM-64. Я все к чему? Нет ли у вас желания "замутить" пару демо-проектиков на UASM-64, а народ бы у вас поучился? Можно было бы посмотреть какие в UASM-64 применяются макросы для 16-битнного выравнивания стека и т.д. и т.п. Как вам моя идея? :)
     
  6. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    562
    Мне не нравится х64 из-за дурацкого быстрого вызова, параметры передаются в регистрах, и это очень не удобно. Да и если не требуется большой объём памяти и 64-битные данные, не вижу смысла возится с х64. Плюс прикольно что можно старые ПК использовать.