Страница: 1 | 2 | 3 | 4 |
Вопрос: Microsoft vs Borland
Добавлено: 07.06.04 15:54
Автор вопроса: ISpy | Web-сайт:
Ответы
Всего ответов: 49
Номер ответа: 31
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #31
Добавлено: 08.06.04 23:16
2SNE а у меня всё ровно меньше+)
Номер ответа: 32
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #32
Добавлено: 08.06.04 23:23
Fallout, признавайся что сделал, чем модифил
Номер ответа: 33
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #33
Добавлено: 08.06.04 23:42
первый семп чистый С++ то бишь после компиляции я даже не прикасался +) 1.024 это и есть один КБ +)
А вот во втором ... +) просто отрезал ... заглушку досовскую .. типа "This program must be run on win32 " +))) это может делать например PeEditor +)
Номер ответа: 34
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #34
Добавлено: 09.06.04 01:55
cresta,
Всего лишь оптимизированный алгоритм цикла.
For a&=1 To 10
Next a&
:004010AA C7C60A000000 mov esi, 0000000A
:004010B0 FFCE dec esi
:004010B2 75FC jne 004010B0
Как видно из кода он не обращается к адресу переменной для поиска счётчика цикла.
А вот если отключить использование регистров специальной директивой, то листинг уже будет выглядеть по другому.
#Register None
For a&=1 To 10
Next a&
:004010AA C745800A000000 mov [ebp-80], 0000000A
:004010B1 FF4D80 dec [ebp-80]
:004010B4 75FB jne 004010B1
По идее API-функции часто используют регистр ESI(индекс источника).
Попробуй повызывать в цикле какую нибудь API(а может даже и PB-шную ф-ю), работающую со строками.
Неизвестно что получится. Наверное снижение скорости из за постоянного
PUSH ESI
POP ESI
Тут уж надо угадать как лучше использовать цикл. Если ты работаешь с числами, то наверное лучше первый вариант (через регистр). Если со строками то второй (через память).
Номер ответа: 35
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #35
Добавлено: 09.06.04 02:19
Сама прога.
======
#Compile Exe
Function PbMain
#Register None
For a&=1 To 10
Next a&
MsgBox"one"
End Function
А вот слепок отчета компилятора.
======
PowerBASIC Compiler for Windows
PB/Win Version 7.0
Copyright (c) 1996-2002 PowerBasic Inc.
Carmel, California, USA
All Rights Reserved
Primary source: C:\PBWIN70\SAMPLES\ASM\Cicle.bas {9 total lines}
Target compilation: Cicle.exe
Compile time: 0.1 seconds, at 10800 lines/minute
224 bytes compiled code, 2165 bytes RTLibrary,
8 bytes string literals, and 1304 bytes dgroup.
Executable stack size: 1048576 bytes.
Disk image: 6144 bytes Memory image: 3477 bytes.
=======
224 байта - читый код
2165 - интерпретатор
8 байт - строки
1304 - dgroup
А кто знает что это за "dgroup"? Я в недоумении.
Номер ответа: 36
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #36
Добавлено: 09.06.04 03:24
Fallout,
Лучше смени её на "Win'9x/NT". Коротко и ясно. И тебе прикольно.
Так это как, только надпись отрезает или всю заглушку убивает нафиг?
Во второй случае прога в ДОСе виснуть дожна по идее.
Номер ответа: 37
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #37
Добавлено: 09.06.04 09:21
Да полностью ... как видишь сразу после MZ идёт PE ... толкьо виснуть не будет а писать будет КЭН НОТ ЕКЗИКУТ да и темболее мне всё рвоно до тех людей кто будет запускать мою программку... под ДОСом +)
Номер ответа: 38
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #38
Добавлено: 09.06.04 12:35
То CyRax: Ну вот такой цикл: снова проверил при 10 000 000 элементов РВ 0,07 сек, ассемблер 0,10 сек
FUNCTION SumArr(BYVAL ArrPtr AS DWORD, BYVAL Cntr AS DWORD) AS LONG
! mov ecx, Cntr
! jecxz endcicle
! mov edx, ArrPtr
! xor eax, eax
start:
! dec ecx
! add eax, dword ptr [edx+ecx*4]
! cmp ecx, 0
! jne start
endcicle:
! mov FUNCTION, eax
END FUNCTION
Пока писал, решил сделать вместо dword ptr [edx+ecx*4]
dword ptr [edx]
inc edx
inc edx
inc edx
inc edx - скорость сравнялась, а где ещё можно оптимизировать?
А с #Register None получается медленнее где-то на 20%
Номер ответа: 39
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #39
Добавлено: 09.06.04 14:09
cresta,
Почему бы тебе не слямзить цикл у самого PB?
Если я правильно понял, то Cntr - Ubound(Array).
1 mov esi, Cntr
2 dec esi
3 add eax, [edx]
4 inc edx
5 jne 2
Тем более что такой цикл - самый быстрый из АСМ-овых алгоритмов.
>А с #Register None получается медленнее где-то на 20%
Вроде ESI здесь нигде не используется так что делай смело #Register Default (а может быть даже All).
Номер ответа: 40
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #40
Добавлено: 09.06.04 15:26
Да я пытался найти, где в компилированном ехе находится РВ-цикл, чтоб сравнить как он делается компилятором с моим ассемблерным, но не нашёл
Номер ответа: 41
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #41
Добавлено: 09.06.04 16:01
Так вот же он
For a&=1 To 10
Next a&
:004010AA C7C60A000000 mov esi, 0000000A
:004010B0 FFCE dec esi
:004010B2 75FC jne 004010B0
Номер ответа: 42
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #42
Добавлено: 09.06.04 16:06
cresta,
Будешь участвовать в проекте создания интерактивного ассемблера для VB6?
Номер ответа: 43
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #43
Добавлено: 09.06.04 16:08
А этот цикл работает с такой же скоростью, как и тот, что я написал топиком выше. И ещё: add eax, dword ptr [edx] и add eax, [edx] - они получаются эквивалентны, что ли?
Номер ответа: 44
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #44
Добавлено: 09.06.04 16:15
Да я не потяну наверное такое. Мои познания в ассемблере - это то, что я вспомнил от ассемблера для восьмиразрядных машин, разбавленное несколькими просмотрами дампов в PE Explorer. Не знаю, помнишь или нет, были такие ZXSpectrum где-то в году 1990 примерно. Тогда писал на ассемблере, а сейчас - страшно, блин (
Номер ответа: 45
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #45
Добавлено: 10.06.04 09:10
Так есть же уже даже с открытыфм кодом... Адд0ОНы к ВБ которые позволяет делать асм вставки.. правдо ... только в ввиде коментов сооственно отлаживать такое невозможно.... 2@CyRax PTR а что ты предлагаешь то конкретно?