Конференция "Начинающим" » Прокачка ассемблера
 
  • QAZ © (02.11.17 12:09) [0]
    всем сдрасти
    пример функции
    function CompStr(const S1, S2: string): Integer;
    asm
           TEST    EAX,EAX
           JE      @@2
           TEST    EDX,EDX
           JE      @@3
           PUSH    EAX
           MOVZX   EAX,BYTE PTR [EAX]
           MOVZX   ECX,BYTE PTR [EDX]
           SUB     EAX,ECX
           JE      @@m
           POP     ECX
           RET
    @@m:    POP     EAX
           INC     EAX
           INC     EDX
    @@0:    TEST    CL,CL
           JE      @@5
           MOV     CL,BYTE PTR [EAX]
           MOV     CH,BYTE PTR [EDX]
           CMP     CL,CH
           JNE     @@ne
           TEST    CL,CL
           JE      @@5
           MOV     CL,BYTE PTR [EAX+1]
           MOV     CH,BYTE PTR [EDX+1]
           CMP     CL,CH
           JNE     @@ne
           TEST    CL,CL
           JE      @@5
           MOV     CL,BYTE PTR [EAX+2]
           MOV     CH,BYTE PTR [EDX+2]
           CMP     CL,CH
           JNE     @@ne
           TEST    CL,CL
           JE      @@5
           MOV     CL,BYTE PTR [EAX+3]
           MOV     CH,BYTE PTR [EDX+3]
           ADD     EAX,4
           ADD     EDX,4
           CMP     CL,CH
           JE      @@0
    @@ne:   MOVZX   EAX,CL
           MOVZX   EDX,CH
           SUB     EAX,EDX
           RET
    @@2:    TEST    EDX,EDX
           JE      @@7
           MOV     CH,BYTE PTR [EDX]
           TEST    CH,CH
           JE      @@7
           NOT     EAX
           RET
    @@3:    MOV     CL,BYTE PTR [EAX]
           TEST    CL,CL
           JE      @@5
           MOV     EAX,1
           RET
    @@5:    XOR     EAX,EAX
    @@7:
    end;


    очевидно х32 + AnsiString
    вопрос, можно ли без переработки самого алгоритма сделать ее для
    1)Unicode просто заменой типов шага или чего то там
    2)x64 просто заменой каких то команд\регистров х32 на х64

    з.ы. в асме не понимаю ничего
  • Kerk © (02.11.17 12:36) [1]
    Сравнение юникодных строк - это много больше, чем побайтовое сравнение.
  • картман © (02.11.17 14:41) [2]
  • QAZ © (02.11.17 14:44) [3]

    > Kerk ©   (02.11.17 12:36) [1]

    дану нафиг и чем же больше?
    мне интересна прокачка кода, а не то правильно это или нет, в паскале это была б просто замена типов и проверки длин
  • Kerk © (02.11.17 15:40) [4]

    > QAZ ©   (02.11.17 14:44) [3]
    > дану нафиг и чем же больше?

    Ну например буква å может храниться в строке как один символ, либо как комбинация 2 символов: кружочек + a. Для пользователя это выглядит одинаково, но побайтово это разные строки. Поэтому строки перед сравнением нормализуют.

    > мне интересна прокачка кода, а не то правильно это или нет,
    >  в паскале это была б просто замена типов и проверки длин

    Тогда даже ничего переделывать не надо. Сравнивай побайтово как раньше.
  • QAZ © (02.11.17 15:52) [5]

    > Тогда даже ничего переделывать не надо. Сравнивай побайтово
    > как раньше.

    ненене, так не пойдет
    во первых эта функция просто пример, речь идет обо всем написанном за десятилетия коде
    во вторых зачем мне лишние компиляторские автоконверсии уникод\анси
    в третьих че там с х64?
  • Kerk © (02.11.17 16:35) [6]
    Какие еще автоконверсии в ассемблере?
  • QAZ © (02.11.17 16:46) [7]

    > Kerk ©   (02.11.17 16:35) [6]

    вот прям вот здесь function CompStr(const S1, S2: string): Integer
  • Pavia © (02.11.17 19:36) [8]
    Возьмите современный компилятор. Там всё есть.
  • Pavia © (02.11.17 19:54) [9]
    1) В ассемблере нет информации о типах данных и восстановить их невозможно.
    2) Разработка хорошие тесты по времени занимают 1٫5-2 раза от разработки кода. Так что их по любому писать и они будут разными для разных версий x86 x86-64. А ещё вы хотите поддерживать Ansi и Unicode.
    Всё это разные работы и должны оплачиваться отдельно.
    3) Экономически выгоднее купить готовое чем разрабатывать самому.
  • QAZ © (03.11.17 08:10) [10]

    > 1) В ассемблере нет информации о типах данных и восстановить их невозможно.

    а это что тогда ?
    MOV     CL,BYTE PTR [EAX+3]
  • alsha (03.11.17 09:25) [11]
    конечно, это boolean )
  • Pavia © (03.11.17 10:23) [12]

    > а это что тогда ?

    Это приведение размера данных. Который к тому же в fasm запросто может отсутствовать.
  • QAZ © (03.11.17 10:53) [13]

    > Это приведение размера данных.

    вот я и спрашиваю, можно ли просто меняя эти приведения с BYTE на WORD или там с CHAR на WCHAR с еще чем-то перевести на уникод для начала

    > Который к тому же в fasm запросто может отсутствовать

    щаз бы на форуме про делфи, в теме о встроенном асме вспоминать про fasm...
  • Inovet © (03.11.17 11:18) [14]
    > [13] QAZ ©   (03.11.17 10:53)
    > вот я и спрашиваю, можно ли просто меняя эти приведения
    > с BYTE на WORD

    Нельзя. Надо разбирать логику работы, в каких регистрах и когда что там хранится. Это не говоря про Юникод, про который уже сказали, но ты всё-таки про 2-байтовую кодировку имел ввиду.
  • QAZ © (03.11.17 12:30) [15]
    ну нельзя так нельзя
  • Rouse_ © (04.11.17 00:55) [16]
    А строку в анси и на вход никак низя? Сам же сказал шо база наработана, знач раньше все устраивало
  • QAZ © (04.11.17 12:29) [17]

    > Rouse_ ©   (04.11.17 00:55) [16]

    например если конкретно эту функцию использовать в квиксорте, то за счет этих конверсий скорость упадет в 1000+ раз
    да и конверсия туда обратно будет с потерями символов

    з.ы. у меня нет проблем, я спрашиваю гипотетически-теоретически
    кроме того х32 за счет повсеместного юза асамблерных вставок работает быстрей х64 и будет работать быстрей ближайшие годы несмотря на виртуализации и прочее
  • QAZ © (04.11.17 12:42) [18]

    > Rouse_ ©   (04.11.17 00:55) [16]

    в догонку
    прям вот сейчас в 2017г есть куча софта, включая игры ААА класса которые не работают нормально(не работает сохранение настроек и тд) из-за того что профиль юзера содержит не латинские символы в названии
    т.е. вместо C:\Users\Вася\AppData\Roaming они видят C:\Users\????\AppData\Roaming, как думаешь это нормально?
    не говоря уже об интерфейсе с кракозябрами
    т.е. разрабы не то что не вкурсе про уникод, они даже не вкурсе существования языков отличных от английского
 
Конференция "Начинающим" » Прокачка ассемблера
Есть новые Нет новых   [118642   +47][b:0][p:0.003]