Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Через какие регистры передается результат ф-ции, как сделать ассемблерную вставку на С 
:(
    Опции темы
Чупакабро
Дата 17.10.2012, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 27.2.2007

Репутация: нет
Всего: 4



хочу сделать функцию умножения двух векторов в виде ассемблерной вставки в C++

Код

Vector4 mul(Vector4 a, Vector4 b) 
{
  __asm {
      movups xmm0, a   
      movups xmm1, b    
      mulps xmm1, xmm0  
  }
}


в какой регистр нужно помещать результат? и вообще, как это можно реализовать без return?



Это сообщение отредактировал(а) Чупакабро - 17.10.2012, 20:41
--------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue.
PM MAIL   Вверх
LosAngelеs
Дата 26.10.2012, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.9.2012

Репутация: нет
Всего: нет



зависит от abi и от того, чем является Vector4, из кода это не ясно. В System V amd64 и если Vector4 указатель на массив, то результат был бы в %rax, а если большая структура, то на стеке вызывающая процедура выделяет место и передаёт адрес в %rdi, вызываемая процедура вернёт этот адрес в %rax и стек выровнен по 16 байтной границе, так что можно использовать movаps, операции с выровненными данными быстрее
PM MAIL   Вверх
Чупакабро
Дата 31.10.2012, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 27.2.2007

Репутация: нет
Всего: 4



Спасибо!
Vector4 это, допустим,  __m128
--------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.