Форум программистов, компьютерный форум CyberForum.ru

__asm вставка - C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 56, средняя оценка - 4.70
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
01.08.2009, 22:34     __asm вставка #1
Есть проблема с асм-вставкой нужно возвратить значение в регистр eax.

Проблема написать аналог макроса на С++.
Assembler
1
2
3
4
5
6
7
8
      alloc MACRO bytecount
        invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,bytecount
        EXITM <eax>
      ENDM
 
      free MACRO hmemory
        invoke GlobalFree,hmemory
      ENDM
Мой вариант макроса, но он не компилится(.
C++
1
2
3
#include "windows.h"
...
#define alloc(bytecount) (GlobalAlloc((GMEM_FIXED || GMEM_ZEROINIT), sizeof(bytecount));return __asm{<eax>}) //не работает(
C++
1
#define free(hmemory) (GlobalFree(hmemory)) //работает
Добавлено через 5 часов 13 минут 58 секунд
Есть специалисты по С и Ассемблеру помогите или дайте идейку, если не хочется помогать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
02.08.2009, 02:22  [ТС]     __asm вставка #41
Самое обидное, что ни один совет не попал в точку, кроме с |
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
02.08.2009, 02:23     __asm вставка #42
push eax, pop eax - никакого смысла не несут - можно удалить.

Ты ее не решил, а обошел.
Чтобы в точности было как в MASM - нужно было положить параметры в стек и вызывать GlobalAlloc внутри кода asm.
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92
02.08.2009, 02:29  [ТС]     __asm вставка #43
Цитата Сообщение от odip Посмотреть сообщение
push eax, pop eax - никакого смысла не несут - можно удалить.

Ты ее не решил, а обошел.
Чтобы в точности было как в MASM - нужно было положить параметры в стек и вызывать GlobalAlloc внутри кода asm.
Ну call и invoke запрещены, во встроенном ассемблере

Добавлено через 3 минуты 9 секунд
Цитата Сообщение от Skirmisher Посмотреть сообщение
Ну call и invoke запрещены, во встроенном ассемблере
Куда пропал мой код, мое детище
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2009, 02:36     __asm вставка
Еще ссылки по теме:

Ассемблерная вставка в С++ C++
Ассемблерная Вставка C++
Обнулить элементы вектора через __asm C++
Ошибка в __asm вставке C++
C++ Вернуть адрес виртуальной функции с помощью __asm вставки

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

Или воспользуйтесь поиском по форуму:
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
02.08.2009, 02:36     __asm вставка #44
Ну call и invoke запрещены, во встроенном ассемблере
call вполне себе работает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
 
void func( void );
 
int main( void ) {
 
__asm
{
    call func
}
 
return 0;
 
}
 
void func( void ) {
 
printf( "func()\n" );
 
}
Добавлено через 56 секунд
invoke не работает - потому что это макрос для MASM.
О чем я тебе уже говорил.
Yandex
Объявления
02.08.2009, 02:36     __asm вставка
Ответ Создать тему
Опции темы

Текущее время: 20:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru