Если не в тягость, не мог бы кто-нибудь описать отличие UASM от MASM64'а и FASM'а? В чем его приемущество? Я думаю, что люди же неспроста его написали и стали поддерживать? Явно их что-то не устроило в тех же MASM64 и FASM.
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): ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Quick sort v1.01 ;; http://rosettacode.org/wiki/Sorting_algorithms/ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .386 .model flat, stdcall option casemap:none include msvcrt.inc include macros.asm .code align_proc quicksort proc uses esi edi ebx pBegin:ptr sdword, pEnd:ptr sdword ASSUME edi:ptr sdword, esi:ptr sdword mov edi, pBegin ;указатель на первый элемент массива mov esi, pEnd ;указатель на последний элемент массива .if (edi!=esi) ;pivot = pBegin[(pEnd - pBegin + 1)/2];//ecx lea edx, [esi+1*4] .for (edx-=edi, edx>>=3, ecx=[edi+edx*4]: : edi+=4, esi-=4) .for (: sdword ptr [edi] < ecx: edi+=4) .endfor .for (: sdword ptr [esi] > ecx: esi-=4) .endfor .break .if (edi >= esi) swap [edi], [esi] .endfor quicksort(pBegin, &[edi-1*4]) quicksort(edi, pEnd) .endif ASSUME edi:nothing, esi:nothing ret quicksort endp createSpisok(spisok, sdword, 4, 65, 2, -31, 0, 99, 2, 83, 782, 1) main proc C argc:sdword, argv:ptr ptr, envp:ptr printf("Quick sort.\n") .for (esi = spisok.pFirst: esi <= spisok.pLast: esi+=4) printf("%d ", dword ptr [esi]) .endfor printf("\n") quicksort(spisok.pFirst, spisok.pLast) .for (esi = spisok.pFirst: esi <= spisok.pLast: esi+=4) printf("%d ", dword ptr [esi]) .endfor printf("\n") xor eax, eax ret main endp main_startup3_END Макрос createSpisok в macros.asm, ищете в теме UASM, хотя лучше массив с случайными числами задать для демо. --- Сообщение объединено, 27 дек 2022 --- А вот ещё пузырёк на UASM Код (ASM): align_proc bubble_sort proc uses esi edi ebx array:ptr sdword, len:dword mov edi, array .for (ebx=len, cl=true: cl: ebx--) xor cl, cl ;swapped = false; .for (esi = 1: esi < ebx: esi++) mov eax, [edi][esi*4 - 1*4] mov edx, [edi][esi*4] .if (sdword ptr edx < eax) mov [edi][esi*4], eax mov [edi][esi*4 - 1*4], edx mov cl, true .endif .endfor .endfor ret bubble_sort endp Принимает указатель на массив и размер массива.
По поводу шелкода, вы наверно имели в виду подключение\внедрение его в ассемблерный код UASM'а? Если можно, то немного пояснить и примерчик бы какой-нибудь. Так-то шелкод и в VS к C\C++ можно подключить - правда это чуть заморочено, но все же. Может действительно в UASM с этим проще. Да я-то не против, вы только немного поясните как мне побыстрее установить UASM и попробовать скомпилировать ваши примеры и примеры которые в дистрибутиве. UASM-2.56x64 я скачал, WinInc-2.10 скачал. Только вот думаю, куда распаковать архив с WinInc_2.10, чтобы удобней было компилировать? Может быть еще какие-нибудь библиотеки нужны? Я же с UASM никогда дела не имел. И если я правильно понял, то линкер нужно от VS подключать? Извиняюсь, если что, за дилетантские вопросы, но это исключительно для скорости вникания.
Шелкод просто код, сам по себе не работает, разве что .com файл для доса. Потом запихиваешь куда надо, в файл для ремонта, например, или если вирус, то это отдельная тема, и не ко мне. Создаётся ключом -bin У меня файлы так распределены. bin include lib My_projects Тут даже по названием понятно, в бин все исполняемые файлы включая линкер, link, polink. Линкер МС требует ещё mspdb50.dll, в общем все файлы нужные запихиваешь в эту папку, чтобы не искать и меньше возни с батниками. Ну а по остальным понятно, я например в либы на сколько помню из VS запихивал. Ну как то так.
Intro, что-то я не понял смысла написания 32-х битных версий сортировщиков на UASM'е. Я так понимаю, что смысл программирования Mikl___'ом сортировки с анимацией - это приобщение народа к 64-х битному ассемблеру. А вы, получается, в противовес, как бы - "назад в СССР". Mikl___, при желании тоже бы мог свои сортировшики на 32 битном MASM-е написать. Вы прям как Манхантер дубль два. Тот тоже еще ни одного проекта 64-х битного в своем блоге не опубликовал на FASM-64. Я все к чему? Нет ли у вас желания "замутить" пару демо-проектиков на UASM-64, а народ бы у вас поучился? Можно было бы посмотреть какие в UASM-64 применяются макросы для 16-битнного выравнивания стека и т.д. и т.п. Как вам моя идея?
Мне не нравится х64 из-за дурацкого быстрого вызова, параметры передаются в регистрах, и это очень не удобно. Да и если не требуется большой объём памяти и 64-битные данные, не вижу смысла возится с х64. Плюс прикольно что можно старые ПК использовать.