Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Inline Asm в VB IDE


Автор: Gannibal 20.1.2005, 18:24
вот вопрос на засыпку а может быть и нет. как в ВБ реализоват инлайн функции Ассемблера при запуске програмы но без компиляции ... когда он скомпилирован.. програма работает.. а как зделать так чтобы она работала тй инлайн Асм работал.. при нажатии кнопки ф5

Автор: cardinal 21.1.2005, 03:36
Поточнее плиз...

Автор: Gannibal 21.1.2005, 16:50
ну вот смотри, у меня в ВБ ИДЕ открыт исходник програмы в которой я употрябил инлайнАСМ (т.е. функции из Ассемблера) когда я програму перевожу в ЕХЕ файл всё работает нормально, но когда я пробую запустить програму в ВБ ИДЕ с помощью кнопки ф5, Асм код ннекомпелируется а вот почему? когда прогу перевожу в ЕХЕ файл там уже хоокнута АПИ КреатеПроццес, вот когда ВБ ИДЕ запускает линк.ехе так вызывает эту функцию АПИ и в этом моменте весь код АСМа вставляется в ехе файла но когда запускается ВБ ИДЕ ничего такого непроисходит и поэтому когда ты хочешь тестировать прогу тебе её всё время надо компилировать

Автор: Unknown_Error 21.1.2005, 17:09
Хм...
Странно, но из предыдущего топика понял, что автор каким то образом умудрился вставить асм код в вижуал басике? smile

Автор: Gannibal 21.1.2005, 17:40
да именно АСМ в ВБ ты правельно понял и С тоже ;)

Автор: cardinal 22.1.2005, 00:45
Цитата(M @ 21.1.2005, 15:40)
да именно АСМ в ВБ ты правельно понял и С тоже

код в студию smile

Автор: __Sergey__ 22.1.2005, 01:17
Вот типа KTimer
Код

Option Explicit

'ДЛЯ ПРОЦЕССОРОВ INTEL

'---------- Пример использования -----------
'    Dim cycles As Long, cpusp As Long
 
'    cpusp = timer.CpuSpeed
   
'    timer.StartTime

'   ... здесь проверяемый код ...
   
'    к-во тактов = timer.StopTime
   
'    к-во микросекунд = timer.mks(к-во тактов, cpusp)

'возвращает к-во тактов с момента запуска процессора.
Private Declare Function ReadTime Lib "user32" Alias "CallWindowProcA" (ByVal ptrMC As Long, ByVal P1 As Long, ByVal P2 As Long, ByVal P3 As Long, ByVal P4 As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private BinCode(2) As Byte
Private BinCode1(25) As Byte
Private ptrMC As Long
Private ptrMC1 As Long
Private m_overhead As Long
Private m_startcycle As Long

Private Sub Class_Initialize()
BinCode(0) = &HF
BinCode(1) = &H31
BinCode(2) = &HC3
ptrMC = VarPtr(BinCode(0))
'учтем время, потраченное на выполнение ф-ции ReadTime
 StartTime
 m_overhead = StopTime
End Sub


Sub StartTime()
 m_startcycle = ReadTime(ptrMC, 0, 0, 0, 0)
End Sub


Function StopTime() As Long
 StopTime = ReadTime(ptrMC, 0, 0, 0, 0) - m_startcycle - m_overhead
End Function


Function CpuSpeed() As Long
 m_startcycle = ReadTime(ptrMC, 0, 0, 0, 0)
 Sleep (1000)
 On Error Resume Next
 CpuSpeed = (ReadTime(ptrMC, 0, 0, 0, 0) - m_startcycle - m_overhead) / 100000
End Function

Function mks(ByVal cycles As Long, ByVal CpuSpeed As Long) As Long
 If CpuSpeed = 0 Then Exit Function
 On Error Resume Next
 'возвращает к-во микросекунд
 mks = cycles * 10000 / CpuSpeed / 1000
End Function

Function ns(ByVal cycles As Long, ByVal CpuSpeed As Long) As Long
 If CpuSpeed = 0 Then Exit Function
 On Error Resume Next
 'возвращает к-во наносекунд
 ns = cycles * 10000 / CpuSpeed
End Function

Автор: cardinal 22.1.2005, 02:17
Ну это не совсем
Цитата(M @ 21.1.2005, 14:50)
инлайнАСМ


Автор: __Sergey__ 22.1.2005, 05:05
[quote]Ну это не совсем
А что есть - совсем?

Автор: Unknown_Error 23.1.2005, 12:24
Цитата(__Sergey__ @ 22.1.2005, 05:05)
А что есть - совсем?


Код

asm {
  mov ax, 12
}

Автор: cardinal 23.1.2005, 16:00
Unknown_Error, да, именно что-то такое... smile

Автор: Gannibal 23.1.2005, 18:39
а мне кто поможет?

Автор: cardinal 23.1.2005, 18:46
я же тебе сказал
Цитата(cardinal @ 21.1.2005, 22:45)
код в студию

smile

Автор: Gannibal 23.1.2005, 22:54
извини незаметил smile вот код надо компилить и всё ок будет... сам поймёшь это вся та прога ТхундерВБ как я о ней говорил

http://servak.wz.cz/tvb.zip

function A() as long
asm INT 3
end function

например такой код вот что асм возвращает ИНТ3 в машинном коде CD03 это понятно, а вот как этот код CD03 получить в теле самой функции

Автор: __Sergey__ 25.1.2005, 01:40
В этом ТхундерВБ пишется, что компилировать и проверять надо отдельно.
Проверять на с - или асм - компиляторах.

Я так понимаю эти коды по F5 or F8 не идут, т.к. вставляются в exe на этапе
компиляции, т.е. для VB их не существует.
Непонятно, эти асм- и с-коды, при компиляции, вставляются наподобие _inline в с++.

function A() as long
asm INT 3
end function

Допустим в этом коде генерится ли пролог, эпилог или ф-ция А() используется как
метка для асм-кода smile

Автор: Gannibal 29.1.2005, 18:10
да надо ставить компилятор Ассма и Си компилятор.. она через нич будет проверять и вставлять в ехе файл ты правельно понял ну когда они асотят при ф8 всё работает нормально а вот когда ф5 нажму так неработает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)