Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Совместные проекты

Страница: 1 | 2 |

 

  Вопрос: Локальный Бейсик Добавлено: 23.09.04 04:25  

Автор вопроса:  CyRax  | Web-сайт: basicproduction.nm.ru | ICQ: 204447456 
 Многие знают о возможности вызова машинных кодов из VB6 с помощью CallWindowProc. Некоторые даже видели адаптированный ассемблер, написанный мной.
 В скором времени я собираюсь писать компилятор Бейсика для такого вызова. Всех кто горит желанием написания своего языка приглашаю присоединится. Проект ещё не открыт, но думаю в ближайшие месяцы будет.
 Требование только одно - знание ассемблера. Знание машинных кодов приветствуется.
 Выбор ассемблера за вами. Каждый может использовать свой любимый инструмент. Я например буду использовать свой.

Ответить

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

Номер ответа: 1
Автор ответа:
 ISpy



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

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #1
Добавлено: 23.09.04 18:27
Некоторые даже видели адаптированный ассемблер, написанный мной.

Как-то пропустил :) Не скажешь где можно скачать, если можно конечно? Насчет проекта.. можешь поподробнее описать задумку?

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 23.09.04 19:06
http://www.vbnet.ru/soft/

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 23.09.04 19:20
Задумка такая.
 Ну допустим человеку нужно что то быстрое в VB. К его услугам есть Функция CallWindowProc, запускающая машинный код.
 Но далеко не многие знают ассемблер. Раз для этих людей родным является Бейсик, то нужно для них его написать :)
 Конечно это не будет полноценный Бейсик. Он будет ориентирован на ассемблер, но вместо мнемоник программист будет писать известные ему команды.
 Например:
 ;DIM A AS LONG
 ;DIM B AS LONG
 A=5
 B=B+A

 Это будет:
 MOV EBP,ESP
 SUB ESP,8
 MOV DWORD PTR [EBP-4],5
 MOV EAX, DWORD PTR [EBP-4]
 ADD DWORD PTR [EBP-8],EAX

Ну и так далее в таком роде. Разумется с поддержкой API.

Ответить

Номер ответа: 4
Автор ответа:
 Keen



ICQ: 284-467-526 

Вопросов: 12
Ответов: 25
 Профиль | | #4 Добавлено: 23.09.04 19:52
Если бы я знал ASM :(((... А так я ногами и руками - за! Вообще, я тут тоже хочу открыть проект - язык программирования для игр (как звучит!) на VB. Преимуществ у него будет много, но главное - все уже готово, сиди и пиши скрипт движка :). Но об этом позже, да и стоит ли (хотя чуть-чуть уже написано)?

Ответить

Номер ответа: 5
Автор ответа:
 ISpy



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

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #5
Добавлено: 23.09.04 20:44
MOV EBP,ESP
 SUB ESP,8
 MOV DWORD PTR [EBP-4],5
 MOV EAX, DWORD PTR [EBP-4]
 ADD DWORD PTR [EBP-8],EAX

Прикольно, но на таком уровне я ассемблер не знаю :( Для меня он пока ограничивается кодингом в MASM'e небольших оконных и не оконных приложение с использованием API. Но ничё, может подучусь и успею помочь в проекте :)

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 23.09.04 22:42
 Добро пожаловать. Насчёт знаний не беспокойся. Что знаю - объясню. А что не знаю у crest'ы спросим. Или на MASMFORUM.COM
 Главное чтобы желание было. Так что давай, подучивайся. А то не хотелось бы уделять всё время репетиторству.

Ответить

Номер ответа: 7
Автор ответа:
 ISpy



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

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #7
Добавлено: 24.09.04 16:37
Ok, ща на выходных, на даче почитаю книжечку В. Юрова "Assembler" - учебник, а приеду уроки Iczelion'а проштудирую :)

Ответить

Номер ответа: 8
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #8
Добавлено: 24.09.04 16:41
Добро, а я пока свой ассемблер в порядок приведу. Вот только имя никак не могу подобрать.

Ответить

Номер ответа: 9
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 25.09.04 05:10
С переменными теперь будет попроще. Я добавил в ассемблер метаоператор #DIM, который позволит не заботится об подсчёте адресов локальных переменных.

Ответить

Номер ответа: 10
Автор ответа:
 ISpy



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

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #10
Добавлено: 26.09.04 14:37
Прикольная книжка оказалась, узнал много интересного :) и поразмыслив я перешел на TASM.
Разобрался с кодом:
[CODE] MOV EBP,ESP
 SUB ESP,8
 MOV DWORD PTR [EBP-4],5
 MOV EAX, DWORD PTR [EBP-4]
 ADD DWORD PTR [EBP-8],EAX[/CODE]
Он был для меня непонятен из-за косвенной регистровой адресации со смещением ( [EBP-4] ), не читал я об этом ранее :(
Зато теперь готов к труду и обороне :)) Надо еще правда почитать о CallWindowProc, но это я быстро.

Ответить

Номер ответа: 11
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #11 Добавлено: 26.09.04 22:24
ISpy

Ты с Юровым поосторожней, в нём ошибок - как у собаки блох

А спросить если что лучше на wasm'e. Там народ несколько грубоватый,(как сказал один чел: "суровые парни пишут суровый код";) но можно много чего узнать.

Ответить

Номер ответа: 12
Автор ответа:
 CyRax



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #12
Добавлено: 27.09.04 01:22
Он был для меня непонятен из-за косвенной регистровой адресации со смещением ( [EBP-4] )

 Это называется ПАМЯТЬ. В неё ты по другому никак не запишешь. Только так ([EBP-4]) или с помощью инструкции PUSH. Полная формула выглядит так:
 [r32+r32*Масштаб+Смещение]
 В языках высокого уровня такая запись называется указателем.
 Рад что ты смог разобраться.
 Сможешь теперь написать простенький пример с использованием локальных переменных?
 ;DIM A,B,C,D
 A=5
 B=5
 A=A+B
 C=A/2
 ;D=VARPTR(A)

Ответить

Номер ответа: 13
Автор ответа:
 ISpy



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

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #13
Добавлено: 27.09.04 13:53
Это называется ПАМЯТЬ.

Это не просто память, - это стек. В регистре ESP находится указатель стека, в EBP - указатель базы кадра стека. Но это так, к слову ;)
А разве в стек нельзя записать, используя эффективный адрес? Типа
mov dword ptr [0000],5
вот только как сделать чтоб он адресовал не в сегмент данных а в стек (т.е. адрес был, например не ds:0000, а ss:0000)? Может можно пихнуть на некоторое время в ds адрес ss, он будет думать, что пишет в сегмент данных, а будет писать в стек? Но это опять таки размышление вслух ;)

Сможешь теперь написать простенький пример с использованием локальных переменных?

Что значит локальных, стек что ли использовать? А какой размер переменных? Ладно, пусть будет двойное слово.
Код:

mov ebp,esp
sub esp,16
mov dword ptr [ebp-4],5 ;A
mov dword ptr [ebp-8],5 ;B
mov eax, dword ptr [ebp-8]
add dword ptr [ebp-4],eax

;младшая часть числа A уже находиться в ax
mov dx,word ptr [ebp-4] ;Нет опыта, так что не уверен правильно ли пихнул в dx старшую часть числа A
mov bx,2 ;Делитель в bx
div bx
mov word ptr [ebp-12],ax ;Пишу частное в верхнюю (вроде) часть C. Куда девать остаток от деления?
;Сорри, не знаю что такое VARPTR (пока), поэтому не могу найти D :(
Код неполный, и может немного неправильный - нет опыта, раньше кодил на асмье в основном только API :(

Возможно, для твоего проекта я пока не дорос по уровню знаний, хотя он уже принес мне пользу заставив подумать головой и засесть за учебники, так что я доволен :))

Ответить

Номер ответа: 14
Автор ответа:
 ISpy



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

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #14
Добавлено: 27.09.04 15:32
А разве в стек нельзя записать, используя эффективный адрес? Типа
mov dword ptr [0000],5
вот только как сделать чтоб он адресовал не в сегмент данных а в стек

Вроде можно писать так: mov dword ptr ss:0000h, 5
(например)
Но тогда скорее всего придется вручную изменять esp и edp :)

Ответить

Номер ответа: 15
Автор ответа:
 ISpy



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

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #15
Добавлено: 27.09.04 17:44
Еще раз подумал, и вот к чему пришел:

mov EBP,ESP
sub ESP,16

mov dword ptr [EBP-4], 5 ;Число A
mov dword ptr [EBP-8], 5 ;Число B

mov eax, dword ptr [EBP-8] ;B в eax
add dword ptr [EBP-4], eax ;А + В

xor eax, eax ;Чистим на всякий случай ;)

mov ax, word ptr [EBP-4] ;Младшая часть А
mov dx, word ptr [EBP-2] ;Старшая часть А
mov bx, 2 ;Делитель
div bx ;А/2

mov word ptr [EBP-10], ax ;Частное в старшую часть С
mov word ptr [EBP-12], dx ;Остаток в младшую часть С

VARPTR - пока не знаю что это такое :(

Ответить

Страница: 1 | 2 |

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



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