Страница: 1 | 2 | 3 | 4 | 5 | 6 |
Вопрос: Проект Ассемблер в VB
Добавлено: 11.06.04 21:13
Автор вопроса: @CyRax PTR | Web-сайт:
Ответы
Всего ответов: 77
Номер ответа: 16
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #16
Добавлено: 12.06.04 03:14
Да, кстати, на VB.NET эта штука по идее тоже должна работать. Если конечно там нет встроенного ассемблера. В этом АСМ используется всего одна API - CallWindowProc. Остальное - обычный код без всяких выкрутасов.
Номер ответа: 17
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #17
Добавлено: 12.06.04 03:47
Очень полезная инфа. Только в ней нужно разбираться. Если кто то поддержит проект, то будет.
А на данном этапе я бы сделал так.
Запустите АСМ. Видите в нижних текстбоксах во втором слева какое то число? Это адрес вбшной функции. А дальше всё просто. У тебя 100 параметров? Передай в ассемблерную функцию адрес на VB-шную функцию в которой хранятся остальные 96.
И для получения нужного параметра просто вызывай её. Например адрес этой функции передаётся с первым параметром.
MOV ECX,[EBP+8] 'Пересылаем первый параметр в счётчик
MOV EAX,90 'Заносим в аккумулятор необходимый нам параметр.
PUSH EAX
PUSH EAX (зачем 2 раза я и сам не знаю. Получил методом подбора)
CALL ECX 'Вызываем VB-шную функцию.
MOV EDX,EAX 'Пересылаем в Данные(EDX) то что вернула функция
POP EAX 'Восстанавливаем Аккумулятор(EAX)
А в VB-шной вообще просто
Function MoreParams(ByVal ArgNum as Long) as Long
Select Case ArgNum
Case 90
MoreParams=Val(Form1.Label1.caption)
End Select
End Function
Конечно не совсем профессионально. Но неизвестно что ещё в этой статье. Может быть там ещё хуже. А разбираться влом. У меня Навигатор уже 3 дня стоит пока я подготовительный проект АСМ делал.
Номер ответа: 18
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #18
Добавлено: 12.06.04 10:11
Хм...
Надо же, первый раз мой код цитируют
Господа! Всё очень просто
Вы только прочитайте не одну мою статейку, а все шесть, они там подряд идут. В первую очередь - про работу с указателями и про принцип получения безымянных параметров по их смещению в стеке
Номер ответа: 19
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #19
Добавлено: 12.06.04 10:19
Да, чуть не забыл
http://bbs.vbstreets.ru/viewtopic.php?p=41094#41094
Чтобы видеть аттачи, нужна регистрация на форуме.
Номер ответа: 20
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #20
Добавлено: 12.06.04 11:14
2GSerg, дай ссылки на статьи, потому как на твой голый код смоттеть без описалова - не возможно
Номер ответа: 21
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #21
Добавлено: 12.06.04 11:56
Ссылка на его пример.
http://bbs.vbstreets.ru/download.php?id=735
Но я пока не смотрел что там.
Номер ответа: 22
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #22
Добавлено: 12.06.04 12:07
Я уже смотрел, там без бутылки пива и доков - мне не разобраться Уж очень скудные комменты...
Номер ответа: 23
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #23
Добавлено: 12.06.04 12:21
А нахрена оно тебе? Ты что на АСМ через день кодишь? Или интересно просто?
Номер ответа: 24
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #24
Добавлено: 12.06.04 12:28
Ну так как? Будем этот проект делать? Я не говорю о чём нибудь профессиональном. Что-нмбудь типа небольшого ускорителя с поддержкой не всех, а только основных мнемоник.
Хм. мне интересно именно создание такой штуки. А вам?
Номер ответа: 25
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #25
Добавлено: 12.06.04 12:37
To GSerg:
Может ошибаюсь, но кажется надо копать не столько в сторону количества параметров, сколько в сторону увеличения скорости их доставки до пункта назначения. В твоём тесте 95% времени уходит на подготовку вызова самой ф-ции. И только 5% - собственно подсчёт массива. Компилированный ехе сводит на нет разницу в подсчёте между VB и ASM. (1 000 000 элем - 16 мс и там и там). Для сравнения на PowerBasic подсчет суммы занимает 6 - 7 мс, при том что элементов в 10 раз больше (10 000 000), та же скорость для ассемблерной вставки в PowerBasic. Т.е. получается твой тест просто застревает на стадии извлечения массива из ресурсов и передачи параметров. Может, если хранить коды не в ресурсах, а как-нить в строковой переменной или ещё как, доступ ускорится?
Номер ответа: 26
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #26
Добавлено: 12.06.04 12:40
CyRax, а что ограничение количества команд сильно что-то упрощает? Из того что я разглядел в твоём коде, просто уменьшится длина SELECT CASE /// END SELECT. Может не стоит особо на этом экономить?
Номер ответа: 27
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #27
Добавлено: 12.06.04 13:03
cresta, Не понял. Что ты имел ввиду?
Номер ответа: 28
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #28
Добавлено: 12.06.04 14:01
По поводу инлайн ассемблера для ВБ МАСМ нужен только при компиляции программы так как ... твой инлайн асм код будет реальным АСМ кодом! что очень сильно увеличит производительность ... программы плюс сделает невозможное возможным... +)
TweakVB кстати тоже реализует некоторые вещи как реальные ДЛЛ так и инлайн асм... правдо платная...
Номер ответа: 29
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #29
Добавлено: 12.06.04 14:59
Ну а чего же вы хотите.
Вызов функции по соглашению stdcall происходит как?
упаковка параметров в стек в обратном порядке
передача управления одним из операторов call (при этом произойдёт добавление в верхушку стека адреса возврата)
отработав, функция возвращает управление по этому самому адресу из верхушки стека, предварительно убирая оттуда и сам адрес, и свои параметры.
Всё это подготавливается компилятором. А у нас нет поддержки компилятора. Поэтому всё то, что в других языках делается один раз при нажатии кнопочки Build, нам приходится делать каждый раз при каждом вызове. И создать константу, содержащую готовый код, нельзя, потому что параметры-то подставлять придётся всё равно. Можно создать некую структурку, которая бы содержала некоторые уже проинициализированные места (а именно машинные константы), но подставлять в неё параметры придётся всё равно. Да, это медленнее, чем сделал бы компилятор. Но я не представляю путей более-менее серьёзного ускорения.
Номер ответа: 30
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #30
Добавлено: 12.06.04 15:00
http://www.vbstreets.ru/VB/Articles/65973.aspx
http://www.vbstreets.ru/VB/Articles/65974.aspx
http://www.vbstreets.ru/VB/Articles/65975.aspx
http://www.vbstreets.ru/VB/Articles/65976.aspx
http://www.vbstreets.ru/VB/Articles/65977.aspx
http://www.vbstreets.ru/VB/Articles/65978.aspx