· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.A&O —› Str_to_Int

<< . 1 . 2 . 3 .

Посл.отвђт Сообщенiе


Дата: Сен 10, 2003 15:14:36

Black_mirror
а во втором куске кода, при умножении ecx на 10 теряется старшая часть произведения.

Возможно я не дописал всё таки "е"
jnae


Дата: Сен 10, 2003 15:16:44

2Edmond
По поводу ошибок: проверка на переполнение ессно нужна, на пустую строку тоже.
А вот действительно-ли необходимо проверять соответствие цифр десятичным, нельзя просто считать 0h концом строки?
Это заметно ускорит процесс.


Дата: Сен 10, 2003 15:47:56

boozook

Большое спасибо.

работает...

Ну раз моя первая программа под SSE2 работает, значит нужно проц апгрейдить 8) Новые Атлоны SSE2 понимают? А то мой не понимает 8(

небольшие баги:
Да, пожалуй директиву стоит добавить, слово убрать, и это:
movdqu [esp],xmm0
movdqu [esp+16],xmm0
movdqu [esp],xmm0
заменить на movqda
А также add eax,[esp+4] исправить на add eax,[esp+8]


Дата: Сен 10, 2003 16:03:59

Black_mirror
Новые АтлоныХП понимают тока SSE1

А вообще это все команды MMX, тока у пня четвертого появилась возможность использовать с ними 128-битные регистры


Дата: Сен 10, 2003 16:04:20

Edmond

Возможно я не дописал всё таки "е"
jnae


Один баг исправлен. Осталось только придумать, как умножать ecx на 10, чтоб не потерать старшие разряды. А то 18-значные числа будут неправильно преобразовываться.


Дата: Сен 10, 2003 16:10:41

По поводу ошибок: проверка на переполнение ессно нужна, на пустую строку тоже.
А вот действительно-ли необходимо проверять соответствие цифр десятичным, нельзя просто считать 0h концом строки?
Это заметно ускорит процесс.


ОК, я всё проверю.

Если ускорит!!! Тогда ОК. Только опишите всё подробно.

А пока я буду думать...


Дата: Сен 10, 2003 16:26:50

Black_mirror
Мне интересно бы как это по скорости улучшить..
ОК буду думать.. как только почищю код от багов..


Дата: Сен 10, 2003 16:33:21

Edmond

Это заметно ускорит процесс

Это я про SSE-версию имел ввиду... )

По логике - если известно, что число десятичное - следовательно это уже проверено. Ну а ноль в конце - это вроде стандартно..

Хотя, я пожалуй тоже подумаю...


Дата: Сен 10, 2003 16:45:37

boozook
Я могу сделать ДВЕ АРХИТЕКТУРЫ ЛИБЫ,.
Вообще уже очень навароченно выходит.. Но у меня выйдет :)))

То есть смотри, строка всё равно будет попадать на вход парсеру.

Я вот думаю, может сделать потоковый вариант?

То есть,

1. Делается сканер строки
2. Делается отдельно конвертер (отдельно)

А потом они соединяются.


Дата: Сен 10, 2003 17:27:39

Edmond

Можно вообще сделать лексический анализатор, который будет сам определять систему счисления (по конечному символу) и по ней считать результат


Дата: Сен 10, 2003 17:30:31

На моем процессоре замена lodsb на mov al,[esi]/inc esi дает прирост в скорости почти в два раза!


Дата: Сен 10, 2003 17:51:01

boozook
:)На моем процессоре замена lodsb на mov al,[esi]/inc esi дает прирост в скорости почти в два раза!

Я уже учёл это :)
Ещё лучше сделать хочется :)
Я правдо развернул цикл.. Но нет ли у кого идеи поизворотливей.. моей..

Можно вообще сделать лексический анализатор, который будет сам определять систему счисления (по конечному символу) и по ней считать результат

Ну это и так понятно.

Но Се зависит от того, для чего буедт использоваться..
Для шаблонизатора -- да. Но для простых IntToXX это ненужно.


Дата: Сен 10, 2003 18:32:23 · Поправил: boozook

По аналогии..
так вроде быстрее получается:
		xor eax,eax
		xor edx,edx
		xor ecx,ecx
@@:
		mov eax,[esi]
		add esi,4
		sub eax,30303030h
		cmp al,9
		ja end1
		mov cl,al
		lea edx,[edx+edx*4]
		lea edx,[ecx+edx*2]

		cmp ah,9
		ja end2
		mov cl,ah
		lea edx,[edx+edx*4]
		lea edx,[ecx+edx*2]

		shr eax,16
		cmp al,9
		ja end3
		mov cl,al
		lea edx,[edx+edx*4]
		lea edx,[ecx+edx*2]

		cmp ah,9
		ja end4
		mov cl,ah
		lea edx,[edx+edx*4]
		lea edx,[ecx+edx*2]

		jmp short @B

end1:
		dec esi
end2:
		dec esi
end3:
		dec esi
end4:
		dec esi
		ret


Дата: Сен 11, 2003 13:17:46

boozook
Замечательно!!!!!

<< . 1 . 2 . 3 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.038