реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вопрос по С++
IEC
сообщение Apr 13 2006, 09:17
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



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

А возможно ли без использования функции?
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 13 2006, 09:25
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



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

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

А причем тут С++? И зачем это вообще надо? Уточните задачу, плиз?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
vet
сообщение Apr 13 2006, 09:32
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Для IAR - модификатором __z_x перед объявлением функции, если не ошибаюсь. Для C++ методов - __x_z, так как первым аргументом неявно идёт this.
Где-то так (не проверял).

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


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
IEC
сообщение Apr 13 2006, 09:40
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Как я понимаю this идет для объекта класса.
Задача: забить значение ссылки в регистр Z, или значение инициализированной переменной в регистр, обработка даннного значения в вставке ( __asm() ) и восстановление.
Просто нехочется для написания ассемблерного кода (оптимизация куска программы) писать функцию.
Т.Е. вопрос чисто реторический. Если есть возможность - хотелось бы ее использовать.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 13 2006, 12:07
Сообщение #5


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(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 возможность указать, в какие регистры что засунуть. Кроме того, эффективность кодогенерации компилятором при использовании асмовой вставки может упасть. Поэтому рекомедованный способ, если надо что-то на низком уровне обработать - вынести в отдельную асмовую функцию и ее вызывать.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
IEC
сообщение Apr 13 2006, 12:16
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 22-03-05
Из: г. Харьков, Украина
Пользователь №: 3 598



Большое спасибо за ответы! Очень жаль!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016