Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по С++
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
IEC
Может кто подскажет, как в С++ ссылку (например char* cp) загнать в регистр (например Z).
Как я понимаю, можно через функцию с параметром:
void а(сhar*)
{
asm(
"mov r30,r16\n"
"mov r31,r17\n"
)
}

А возможно ли без использования функции?
dxp
Цитата(IEC @ Apr 13 2006, 16:17) *
Может кто подскажет, как в С++ ссылку (например char* cp) загнать в регистр (например Z).
Как я понимаю, можно через функцию с параметром:
void а(сhar*)
{
asm(
"mov r30,r16\n"
"mov r31,r17\n"
)
}

А возможно ли без использования функции?

А причем тут С++? И зачем это вообще надо? Уточните задачу, плиз?
vet
Для IAR - модификатором __z_x перед объявлением функции, если не ошибаюсь. Для C++ методов - __x_z, так как первым аргументом неявно идёт this.
Где-то так (не проверял).

Код
__z_x void а(сhar* p)
{ //p передаётся в R31:R30
}
IEC
Как я понимаю this идет для объекта класса.
Задача: забить значение ссылки в регистр Z, или значение инициализированной переменной в регистр, обработка даннного значения в вставке ( __asm() ) и восстановление.
Просто нехочется для написания ассемблерного кода (оптимизация куска программы) писать функцию.
Т.Е. вопрос чисто реторический. Если есть возможность - хотелось бы ее использовать.
dxp
Цитата(vet @ Apr 13 2006, 16:32) *
Для IAR - модификатором __z_x перед объявлением функции, если не ошибаюсь. Для C++ методов - __x_z, так как первым аргументом неявно идёт this.
Где-то так (не проверял).

Код
__z_x void а(сhar* p)
{ //p передаётся в R31:R30
}

На самом деле достаточно __z. Но это недокументированные фичи, для внутреннего, так сказать, употребления.

Цитата(IEC @ Apr 13 2006, 16:40) *
Как я понимаю this идет для объекта класса.
Задача: забить значение ссылки в регистр Z, или значение инициализированной переменной в регистр, обработка даннного значения в вставке ( __asm() ) и восстановление.
Просто нехочется для написания ассемблерного кода (оптимизация куска программы) писать функцию.
Т.Е. вопрос чисто реторический. Если есть возможность - хотелось бы ее использовать.

А-а, т.е. хотите сделать обработку на асме и хотите забиндить объекты на регистры? Ну, тут хорошего, имхо, не выйдет - IAR'овский инлайновый ассемблер очень примитивный, он не поддерживает, как, например, GCC возможность указать, в какие регистры что засунуть. Кроме того, эффективность кодогенерации компилятором при использовании асмовой вставки может упасть. Поэтому рекомедованный способ, если надо что-то на низком уровне обработать - вынести в отдельную асмовую функцию и ее вызывать.
IEC
Большое спасибо за ответы! Очень жаль!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.