Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: __asm (__фыь :))  (Прочитано 10495 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mfcer__
Команда клуба

ru
Offline Offline

« : 26-01-2004 19:57 » 

Добрый день!

Как в С++, в ассемблерной вставке вызвать WinAPI функции, и как передать ей аргументы.

С Уважением,
Михаил
Записан
Serega
Гость
« Ответ #1 : 26-01-2004 20:14 » 

http://www.citforum.ru/programming/digest/asmwin32.shtml
Записан
Mfcer__
Команда клуба

ru
Offline Offline

« Ответ #2 : 26-01-2004 22:46 » 

Цитата

Да некак не получается, даже так
__asm
{
  call PostQuitMessage,0
};
Записан
Xeysan
Гость
« Ответ #3 : 27-01-2004 00:19 » 

а так?
Код:
push 0
mov eax, dword ptr PostQuitMessage
call eax
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 27-01-2004 06:44 » new

Вот так
Код:

#include <windows.h>

.....................................

wchar_t t[(=L"Hello";
__asm
|
push ecx;//сохраняем ecx
//параметры через стек, первым в стек заносим последний параметр
push MB_OK;// четвертый параметр
lea  ecx,dword ptr [t(;
push ecx;//третий параметр
push ecx;//второй
push NULL;//первый
call dword ptr [MessageBoxW(;//вызов через указатель
pop  ecx;
"


А вобще то вопрос не в тот форум- тут не обсуждают вещи, относящиеся к ОС и не входящие в стандарт(__asm к ним и относится, например в компиляторах для 64 разрядных процессоров нет поддержки ассемблерных вставок), это в форум "C++ для ОС".
Записан
Mfcer__
Команда клуба

ru
Offline Offline

« Ответ #5 : 27-01-2004 07:03 » 

Цитата

 64 разрядных процессоров

почему???
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #6 : 27-01-2004 07:34 » 

Цитата

Цитата:

64 разрядных процессоров


почему???


А потому Отлично . Причины особо не объясняются, но я так думаю-
1) У них очень много основных регистров(256 и более, хотя большая часть из них используется для регистрового файла и переименования).
2)  Компилятор создает оптимизированный код(особенно в случае Itanium), и внесение своих ассемблерных вставок, может не позволить компилятору эффективно распределить ресурсы процессора. Самостоятельное вмешательство на уровне регистров опасно- программист не в состоянии предсказать состояние процессора с таким количеством регистров и возможных состояний и может некорректно изменить состояние процессора.
3) Ассемблерные вставки не входят в стандарт(а все стермятся к стандарту Отлично ) и провоцируют написание непереносимог кода, даже в рамках одной архитектуры, но разных выпусков процессоров(например Itanium и Itanium 2).

Для 64 разрядников, если захочется писать на ассемблере, то придется компилить код отдельным компилятором в объектный файл, а потом линковать. Это верно как для gcc так и для компиляторов Microsoft.
Записан
grozny
Гость
« Ответ #7 : 31-01-2004 06:03 » 

да, МС официально заявила, что для 64-бит компиляторов _asm нет и не будет. Пришлось выносить ассемблерные вставки в отдельные файлы для АМД64. Например.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines