Модераторы: Akina
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Соскочить на ASM (из VB как ?) 
V
    Опции темы
Stop
Дата 3.1.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 3.1.2008

Репутация: нет
Всего: нет



С Новым Годом ! 
Может ли кто-нибудь подсказать, как проделать на VB6 одно очень полезное извращение? 
Аналогию приведу на старым Q-Basic для DOS.
Условная схема некоторой программы.

--- Начало некоторой программы на QB --- 
Option Base 1 ' Такой оператор есть и VB, вопросов не вызывает. 
Dim A%(8) ' Создали массив типа Integer из 8-ми элементов (длина в байтах - 16 !!! Один параграф DOS) 
DEF SEG = VARSEG (A%(1)) ' Такого оператора в VB я уже не обнаружил, суть его в том, что он 
' устанавливает некий указатель внутри самого QBasic на первый элемент нашего массива. 
' Это натуральный указатель DOS-сегмента, физически в нём находится 
' 4-байтный адрес сегмента памяти, который нам выделил DOS при создании массива А%. 
POKE (0, &H 55): POKE (1, &H 54): POKE (2, &H 1E): POKE (3, &H 16) ' Не вдаёмся пока в детали, 
' но этими операторами мы загружаем некоторые байты нашего массива 
' (НЕ элементы, а именно байты), эти байты попадают в элементы нашего массива по два, что 
' в принципе не важно, но загружаем их обязательно !!! 
POKE (4, &H 90): POKE (5, &H 90): POKE (6, &H 90): POKE (7, &H 90) 
POKE (8, &H 90): POKE (9, &H 90): POKE (10, &H 90)
 ' Для работоспособности примера тоже нужно 
' загрузить обязательно !!! 
POKE (11, &H 17): POKE (12, &H 1F): POKE (13, &H 5C) 
POKE (14, &H 5D): POKE (15, &H CB) ' Тоже обязательно загружаем эти все байты !!! 
' Ну и наконец самый главный оператор: 
CALL ABSOLUTE (0) ' Запуск прогаммы на машинных кодах по адресу DEF SEG : 0000. 
--- Конец некоторой программы на QB --- 
Получили некоторый модуль в машинных кодах DOS.
И не надо выстраивать всяческих заголовков, смещений и пр. вещей, присущих полноценной Asm-е.
Пусть этим обгружается компилятор, а нам подавай готовое место в памяти с заданной нами-же точкой входа.
Этот модуль в Asm-е выглядит так:
Код

[DEF SEG] : 0000   55   push BP   ' Сохраняем на стеке значения ключевых для QB регистров 
      0001   54   push SP   ' Если возврат не предусмотрен обратно в QB можно вообще 
      0002   1E   push DS   ' ничего не сохранять и не восстанавливать. Например ваша 
      0003   16   push SS   ' программа по окончании предусматривает перезапуск DOS. 
      0004   90   nop      ' 
      0005   90   nop      ' Как вы наверное догадались, необходимый нам для 
      0006   90   nop      ' практической работы код распологается вместо этих nop-ов 
      0007   90   nop      ' Количество этих nop-ов зависит от заказанного нами же 
      0008   90   nop      ' оператора Dim, ещё там, на "высоком" уровне. 
      0009   90   nop      ' 
      000A   90   nop      ' 
      000B   17   pop SS   ' Восстанавливаем регистры перед возвратом в QB. 
      000C   1F   pop DS   ' 
      000D   5C   pop SP   ' 
      000E   5D   pop BP   ' 
      000F   CB   RetF      ' Собственно возврат, обратно в QB. 

Есть ли анологичный механизм в VB-6?

PM MAIL   Вверх
cardinal
Дата 3.1.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



см. FAQ


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0382 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.