Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

 

  Вопрос: Проект Ассемблер в VB Добавлено: 11.06.04 21:13  

Автор вопроса:  @CyRax PTR | Web-сайт: basicproduction.nm.ru/ | ICQ: 204447456 

Ответить

  Ответы Всего ответов: 77  

Номер ответа: 16
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #16
Добавлено: 12.06.04 03:14
Да, кстати, на VB.NET эта штука по идее тоже должна работать. Если конечно там нет встроенного ассемблера. В этом АСМ используется всего одна API - CallWindowProc. Остальное - обычный код без всяких выкрутасов.

Ответить

Номер ответа: 17
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #20
Добавлено: 12.06.04 11:14
2GSerg, дай ссылки на статьи, потому как на твой голый код смоттеть без описалова - не возможно :(

Ответить

Номер ответа: 21
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #21
Добавлено: 12.06.04 11:56
Ссылка на его пример.
 http://bbs.vbstreets.ru/download.php?id=735

Но я пока не смотрел что там.

Ответить

Номер ответа: 22
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #22
Добавлено: 12.06.04 12:07
Я уже смотрел, там без бутылки пива и доков - мне не разобраться :) Уж очень скудные комменты...

Ответить

Номер ответа: 23
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #23
Добавлено: 12.06.04 12:21
 А нахрена оно тебе? Ты что на АСМ через день кодишь? Или интересно просто?

Ответить

Номер ответа: 24
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #27
Добавлено: 12.06.04 13:03
 cresta, Не понял. Что ты имел ввиду?

Ответить

Номер ответа: 28
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #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

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам