Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
homers
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 29
1

Delphi и ASM - не работает вызов функции Invoke через asm

28.12.2013, 17:41. Просмотров 1305. Ответов 14
Метки нет (Все метки)

В Delphi не работает вызов функции Invoke через asm. часть кода:

Delphi
1
2
3
asm
        invoke CloseHandle,ebx;
    invoke ExitProcess,0;
Пишет [Error] Project2.dpr(13): Undeclared identifier: 'invoke'
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 17:41
Ответы с готовыми решениями:

Вызов функции в asm-вставке
Здраствуйте, уже 3 час бьюсь что бы вызвать функцию в asm вставке, но никак не удаётся Этот код...

вызов функции СИ printf из asm кода
Помогите пожалуйста разобраться с вызовом библиотечных функций СИ из ассемблерногокода. Компилятор...

Как задекларировать функции DOS? [Delphi + Asm]
Здравствуйте, как задикларировать функции DOS в DELPHI, заранее благодарю. unit Assembler; ...

При сборке выдает ошибку "MASM: fatal error A1000: : 1.asm.asm"
"MASM : fatal error A1000: : 1.asm.asm :\1>link16 /TINY 1.asm.obj, 1.asm.com" Вопользовался...

Как происходит вызов asm функций из C++ кода?
Всем привет. У меня есть функции написанные на АСМе (MASM) расскажите пожалуйста, или подкиньте...

14
Not at all!
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
28.12.2013, 18:02 2
homers, только call. Invoke - встроенный в ml.exe макрос.
0
homers
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 29
28.12.2013, 18:45  [ТС] 3
Not at all!, а как правильно написать потому что call GetProcessHeap выдает ошибку

[Error] Project2.dpr(10): Undeclared identifier: 'GetProcessHeap'
0
Not at all!
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
28.12.2013, 19:00 4
Попробуйте так:
Assembler
1
call dword ptr ds:GetProcessHeap
0
28.12.2013, 19:00
Thread
programmer
2369 / 357 / 29
Регистрация: 01.06.2011
Сообщений: 3,248
Записей в блоге: 1
28.12.2013, 19:08 5
Все параметры передаються через стек.Поэтому сначала стоит в стек поместить входные данные для процедуры,потом вызвать.
0
homers
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 29
28.12.2013, 19:14  [ТС] 6
Not at all!, все равно выдает ошибку

[Error] Project2.dpr(10): Undeclared identifier: 'GetProcessHeap'. Попробовал вместо dword dd выдало вот

[Error] Project2.dpr(11): Invalid combination of opcode and operands
0
Not at all!
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
28.12.2013, 19:31 7
homers, если пишет, что идентификатор не объявлен, то, может быть, не подключены какие-то заголовочные файлы? Я, собственно, не пишу на дельфи, привёл пример вызова функции в C.
1
homers
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 29
28.12.2013, 19:38  [ТС] 8
Not at all!, подключил модули заработало, но на форме, когда нажимаю кнопку с этой функцией выдает ошибку, но направление вы мне показали спасибо
0
Thread
programmer
2369 / 357 / 29
Регистрация: 01.06.2011
Сообщений: 3,248
Записей в блоге: 1
28.12.2013, 19:45 9
так может код покажите.
0
homers
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 29
28.12.2013, 20:03  [ТС] 10
Thread, если получится, покажу
Assembler
1
call dword ptr ds:GetProcessHeap
вот это верный вариант

Добавлено через 15 минут
Not at all!,
Assembler
1
call word ptr ds:HeapAlloc,heap,0,eax
что делать если к этой функции выдает ошибку [Error] Project2.dpr(24): Operand size mismatch. Получается я не тот формат в регистр eax кладу.

А если пишу dword

Assembler
1
[Error] Project2.dpr(32): Invalid combination of opcode and operands
0
Not at all!
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
28.12.2013, 20:18 11
homers, ну Вам же Thread, написал, что параметры надо через стек передавать.
Assembler
1
2
3
4
push eax
push 0
puhs heap
call  dword ptr ds:HeapAlloc
0
homers
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 29
28.12.2013, 22:48  [ТС] 12
Спасибо, я просто в ассемблере не силен, даже можно сказать слаб
0
Mikl___
Автор FAQ
14194 / 6627 / 687
Регистрация: 11.11.2010
Сообщений: 11,921
29.12.2013, 04:56 13
homers,
посмотри внимательно
Цитата Сообщение от homers Посмотреть сообщение
push eax
push 0
puhs heap <-- push
call dword ptr ds:HeapAlloc
1
homers
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 29
29.12.2013, 12:07  [ТС] 14
Mikl___, я конечно слаб, но не настолько. Сейчас просто возникла проблема с выводов некоторых параметров. Мне нужно было весь asm код перевести в delphi. Весь код выполняется, только не получается вывод данных на консоль. Нужно также вызывать какую-то фкнуцию, а в Ассемблере у меня написана printf. Asm код нельзя делить так как потом метки не будут считываться некоторые
0
Mikl___
Автор FAQ
14194 / 6627 / 687
Регистрация: 11.11.2010
Сообщений: 11,921
29.12.2013, 14:02 15
Цитата Сообщение от homers Посмотреть сообщение
Mikl___, я конечно слаб, но не настолько. Сейчас просто возникла проблема с выводов некоторых параметров. Мне нужно было весь asm код перевести в delphi. Весь код выполняется, только не получается вывод данных на консоль. Нужно также вызывать какую-то фкнуцию, а в Ассемблере у меня написана printf. Asm код нельзя делить так как потом метки не будут считываться некоторые
Эта тирада о чем?
0
29.12.2013, 14:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 14:02

Asm in DELPHI
Не знаю, туда ли пишу но все таки Использую ассемблер в делфи. В кноце функции присваиваю mov...

Не производится деление [Delphi + Asm]
Добрый день. Не производится деление, показывает 262 вместо 6.5. Заранее благодарю. unit...

Помогите с Asm-вставкой для Delphi
есть некий алгоритм, хочу реализовать его в делфе с помощью асм вставок, но ничего не получается,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.