Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Прокачка ассемблера


QAZ ©   (02.11.17 12:09

всем сдрасти
пример функции
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]

это не прокачка ассемблера, это больше похоже на:

https://yandex.ru/images/search?text=%D0%BF%D0%BE%D0%BC%D0%BE%D0%B3%D0%B8%20%D0%B5%D0%B6%D0%B8%D0%BA%D1%83%20%D0%B4%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D1%8C%D1%81%D1%8F%20%D0%B4%D0%BE%20%D1%8F%D0%B1%D0%BB%D0%BE%D0%BA%D0%B0&stype=image&lr=213&noreask=1&source=wiz


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, как думаешь это нормально?
не говоря уже об интерфейсе с кракозябрами
т.е. разрабы не то что не вкурсе про уникод, они даже не вкурсе существования языков отличных от английского


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо