Пакет MASM64. Готовые наработки

Тема в разделе "WASM.X64", создана пользователем Mikl___, 22 мар 2026.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.277
    Tech, бан на месяц
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.230
    Не знаю относится ли к глубоким знаниям апи то, что поля left и top здесь всегда будут нулю равны:
    Код (Text):
    1.   GetClientRect(View.Handle, ClientRect);
    2.   Result := (ClientRect.Right - ClientRect.Left - LEFT_MARGIN - SCROLLBAR_WIDTH) div CHAR_WIDTH;
    Никогда не устану удивляться крутизне этого компилера, он буквально вычитает сначала LEFT_MARGIN, затем SCROLLBAR_WIDTH:
    Код (Text):
    1. 00408452 E8 21C6FFFF call <JMP.&GetClientRect>
    2. 00408457 8B4424 08   mov eax,dword ptr ss:[esp+8]
    3. 0040845B 2B0424      sub eax,dword ptr ss:[esp]
    4. 0040845E 83E8 32     sub eax,32
    5. 00408461 83E8 14     sub eax,14
    RGB это вызов процедуры. Константа? Хреностанта! Работает лучший и самый скорострельный компилер современности, ему лучше знать:
    Код (Text):
    1.         SetBkColor(dc, RGB(255, 255, 255));
    Код (Text):
    1.  
    2. 00408DEC B1 FF       mov cl,FF
    3. 00408DEE B2 FF       mov dl,FF
    4. 00408DF0 B0 FF       mov al,FF
    5. 00408DF2 E8 1DBDFFFF call <main.sub_404B14>
    6. 00408DF7 50          push eax
    7. 00408DF8 55          push ebp
    8. 00408DF9 E8 1ABCFFFF call <JMP.&SetBkColor>
    Классика, два соседних паттерна. Даже лишний префикс в предыдущей инструкции не повод не пихнуть еще одну, обрубив старшие поля еще раз для надежности:
    Код (Text):
    1. 004078CD 8BD0          mov edx,eax
    2. 004078CF 66:81E2 FF03  and dx,3FF
    3. 004078D4 0FB7D2        movzx edx,dx
    4. 004078D7 8915 40B74000 mov dword ptr ds:[40B740],edx
    Тут просто немая сцена:
    Код (Text):
    1. 0040933B 33C0        xor eax,eax
    2. 0040933D A3 A0B74000 mov dword ptr ds:[40B7A0],eax
    3. 00409342 33C0        xor eax,eax
    4. 00409344 A3 A4B74000 mov dword ptr ds:[40B7A4],eax
    5. 00409349 33C0        xor eax,eax
    6. 0040934B A3 B4B74000 mov dword ptr ds:[40B7B4],eax
    7. 00409350 33C0        xor eax,eax
    8. 00409352 A3 B8B74000 mov dword ptr ds:[40B7B8],eax
    --- Сообщение объединено, 17 июн 2026 ---
    Точно помню, что студия еще в начале десятых видела константы например, закостыливая их всячески. Стык между паттернами конъюнкции и преобразования типов тоже отработала бы как надо. Так что нет, с нормальным компилером такого не надо делать.
     
    Ahimov нравится это.
  3. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    990
    Я предполагаю что это демка а не готовый проект в прод.
    Код (Pascal):
    1. array[0..MAX_LINES - 1, 0..MAX_COLS - 1]
    Такие вещи динамически создаются в той же scintill'e.
    Ты прав. В этой паскалевой демке даже выделения текста нет. И .asm файлы она не компилирует в отличии от vscode.
    Нормальные люди такие вещи на асме пишут(на том же фасме), чтобы не было такого вопиющего фуфла в инструкциях.

    P. S. лично мне понятно, что имел в виду автор улетевший в бан.
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.230
    Точно помню, что студия еще в начале десятых нормально костылила константы, что в выражениях, что пропуская вызовы функций. И стык между паттернами конъюнкции и преобразования типа тоже отработала бы правильно. Так что нет, с нормальным компилятором такого не надо делать.
     
  5. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    802
    f13nd,

    Оптимизатора там нет совсем ?
     
  6. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    990
    Может какую нибудь демку сам напишешь? Чтобы быстрее свою мысль донести?
    Не нужен будет бред из булевой логики и портянки .асм листингов.
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.230
    Судя по всему есть, но вот такой слабенький. Прямо мешанины из паттернов как у gcc там нету.
    Какую демку ты хочешь? Показать как вычитать одним приемом сумму из двух констант? Или как вызвать SetBkColor(dc, 0x00FFFFFF)?
     
  8. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    990
    Не тупи. Понятно же какую демку.

    Покажи как правильно то же самое сделать, не стенаниями и нытьем про недостатки компилятора а в виде кода.
    Не нравится паскаль, можно на си без разницы. Только чтобы именно твой код был. А не копипаста. Можешь даже llm заюзать.

    Отправная точка я думаю здесь:
     
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.230
    Не знаю где ты увидел стенания и нытье, но я как добрый джинн одно твое желание могу исполнить в обмен на душу:
    Код (Text):
    1. call <JMP.&GetClientRect>
    2. mov eax,dword ptr ss:[esp+8]
    3. sub eax,0x32+0x14
    Код (Text):
    1.  
    2. push 0xFFFFFF
    3. push ebp
    4. call <JMP.&SetBkColor>
    Код (Text):
    1. mov edx,eax
    2. and edx,3FF
    3. mov dword ptr ds:[40B740],edx
    Код (Text):
    1. xor eax,eax
    2. mov dword ptr ds:[40B7A0],eax
    3. mov dword ptr ds:[40B7A4],eax
    4. mov dword ptr ds:[40B7B4],eax
    5. mov dword ptr ds:[40B7B8],eax
     
  10. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    990
    Хорошо.

    Сделай то же самое, но правильно.
    И так как он свой код уже опубликовал(там понятна идея), реализуй в редакторе выделение текста, копирование-вставка. Так будет честно что ты понимаешь о чем пишешь.

    Все то же самое, минимальная демка.
     
    Последнее редактирование: 17 июн 2026
  11. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    535
    Маленькая просьба-пожелание: код должен быть на СИ\СИ++ x64 или на ASM x64, либо на том и на другом. :)
     
    Последнее редактирование: 17 июн 2026
  12. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    990
    Этот баран даже имея готовый пример не осилит )

    Пример был в контексте:
    Ну типа чел может только чужие компоненты пuздить.
    Код (C):
    1. #include <windows.h>
    2.  
    3. #define MAX_LINES 100
    4. #define MAX_COLS  100
    5.  
    6. typedef struct {
    7.     char Ch;
    8.     unsigned char Attr;
    9. } TCell;
    10.  
    11. typedef struct {
    12.     TCell Cells[MAX_LINES][MAX_COLS];
    13.     int LineCount;
    14.     int CurLine;
    15.     int CurCol;
    16. } TEditorModel;
    17.  
    18. typedef struct {
    19.     HWND Handle;
    20.     HWND VScroll;
    21.     HWND HScroll;
    22.     int ScrollLine;
    23.     int ScrollCol;
    24.     int MaxScrollLine;
    25.     int MaxScrollCol;
    26.     int Width;
    27.     int Height;
    28. } TEditorView;
    В коде для каждого символа добавлялись атрибуты, это нужно в будущем для подсветки синтаксиса.

    Пусть покажет как правильно надо делать.
     
    Последнее редактирование: 18 июн 2026
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.436
    Я не знаю, что именно ты вычитываешь тут, как и чем это было собрано, в общем сраче это не понятно.

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

    Если этот код сгенерирован с включенной оптимизацией, то да, это плохо, если это версия предназначенная для откладки, это нормально.
     
  14. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    990
    Кстати, это некто вирмейкер зомби, каждую инструкцию считает (когда надо и когда не надо):

     
    Последнее редактирование: 18 июн 2026
  15. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.230
    Иными словами твое возражение состоит в том, что если это с оптимизацией код так выглядит, то это плохо, а если без - то нормально. А как оно на самом деле хз, но баба яга против. Вот например публичная версия тоталцмд, а не на колене за пару минут написанная нейросетью демка, с той же шляпой на борту. Давай попробуем предположить с какими параметрами оно скомпилено.
    --- Сообщение объединено, 18 июн 2026 ---
    Просто занятное наблюдение.
    Последний пост 8 июня. Бан.
    Первый пост 8 июня. Бан.
    Первый пост аж с 22 мая и какое совпадение прямо сегодня.
    --- Сообщение объединено, 18 июн 2026 ---
    Да, именно эта ссаная манера удалять посты через минуту, штирлица и подвела кстати.
     
    Ahimov нравится это.
  16. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    990
    Забавное наблюдение, как задача построения визуального редактора(text editing and display) решалась в microsoft аж с 1995 года.
     

    Вложения:

    Последнее редактирование: 19 июн 2026