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

 
 
> Непонятки с ASM в Кейле
GetSmart
сообщение Nov 16 2015, 22:58
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Прошу помощи. Взглянул в хэлп на асм. И в примеры асм-вставок из core_cmXX.c. Хочу чтобы функция возвращала значение стека (регистра SP), но не знаю как. Для универсальности решения платформа пусть будет ARM7. Регистр PSP/MSP не предлагать.

Код
static __inline unsigned long __get_CPSR(void)
{
    register unsigned long ret;

    __asm
    {
        MRS ret, CPSR;
    }
    return ret;
}

Так работает. Для любого Кортекса тоже, если заменить CPSR на другой регистр специального назначения. Но, если заменить этот регистр на SP или R13 с инструкцией MOV, то уже не работает. Функция компилится без ошибок, но значения не возвращает, т.к. кода функции (инструкций процессора) нет вообще. А в R0 (где результат функции) какое-то старое содержимое.

Код
static __inline unsigned long __get_SP(void)
{
    register volatile unsigned long stck __asm("sp");
    return stck;
}

Этот вариант аналогично не ругается и код функции отсутствует.

Сообщение отредактировал GetSmart - Nov 16 2015, 23:39


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post



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

 


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


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