FreeBasic
Главная
Вход
Регистрация
Воскресенье, 24.09.2017, 18:33Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Freebasic » Вопросы по языку FreeBasic » Asm-функция разбиения текста на строки
Asm-функция разбиения текста на строки
WQДата: Среда, 24.06.2015, 16:48 | Сообщение # 1
Подполковник
Группа: Пользователи
Сообщений: 124
Репутация: 2
Статус: Offline
Набрел на такие коды:
http://www.purebasic.info/phpBB3ex/viewtopic.php?p=33163#p33163
http://www.purebasic.info/phpBB3ex/viewtopic.php?p=33219#p33219
Пишут о очень большой скорости, в разы быстрее C-функций
Можно ли это перевести на asm, встраиваемый во freebasiс?


Сообщение отредактировал WQ - Среда, 24.06.2015, 16:49
 
haavДата: Среда, 24.06.2015, 18:41 | Сообщение # 2
Генерал-лейтенант
Группа: Администраторы
Сообщений: 768
Репутация: 33
Статус: Offline
Цитата WQ ()
Можно ли это перевести на asm, встраиваемый во freebasiс?


Один из них перевел, только вместо кода с файлами попросту зашил текст с переносами в одной строке.

Код
Dim As Integer offset,lenght
Dim Shared As String sStringsrc
sStringsrc = !"DP_Audio_wnt6-x86_1104_Vista-7-x86.txt \13\10hgfghfgfgg\13\10dddddd"

function CopyFieldSrting(srs As Byte ptr, dest As Byte ptr) As Integer
  ' Копирование строки из памяти в память до разделителей #CRLF$, #CR$ или #NULL
  ' Возвращает длинну скопированой строки вместе с разделителем (кроме нуля)
  Dim iReturn As Integer
  Asm
   MOV   ESI, [srs]
   MOV   EDI, [dest]
   MOV   EBX, 0x0D0A
   Xor   ECX, ECX
   _next:
   MOV   AL, BYTE [ ESI + ECX ]
   TEST  AL, AL
   JZ    _return
   CMP   AL, BH
   JNE   _resume
   INC   ECX
   CMP   BL, BYTE [ ESI + ECX ]
   JNE   _return
   INC   ECX
   JMP   _return
   _resume:
   MOV   BYTE [ EDI + ECX ], AL
   INC   ECX
   JNZ   _next
   _return:
   MOV   [iReturn], ECX
  End Asm
  Return iReturn
End Function

Do
  Dim As ZString*200 sStringdest
  lenght = CopyFieldSrting(SAdd(sStringsrc) + offset, @sStringdest-1)
  offset = offset + lenght
  ? sStringdest,lenght
Loop Until lenght=0
sleep


Второй думаю сам переведешь по принципу первого.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Четверг, 25.06.2015, 17:12 | Сообщение # 3
Подполковник
Группа: Пользователи
Сообщений: 124
Репутация: 2
Статус: Offline
haav
Спасибо! 

Вот была тема http://freebasic.ucoz.com/forum/4-251-1
Я тогда еще ее решил и нашел быстрый способ, но довольно сложно получалось
А эта asm-функция позволяет скорость еще наверно раза в 2 увеличить
 
Форум » Freebasic » Вопросы по языку FreeBasic » Asm-функция разбиения текста на строки
Страница 1 из 11
Поиск: